近期在做一个项目的时候,需要在原来代码的基础上创建一个分支,并在新分支上维护开发。
其实repo上创建分支很简单,就是git创建新分支一样,为什么?其实熟悉repo的朋友就会知道,repo只不过是利用git(manifest仓库)来记录管理多个git仓库而已。因此我们利用repo创建一个新的分支,其实就是给repo管理的每个git仓库创建一个一样的新分支。我们知道单个git仓库创建分支的命令很简单。
1.创建一个新分支
git 创建一个分支:
git checkout -b new_branch_name
那么对于repo来说就是对所有的仓库进行创建一个新分支命令如下。
repo forall -c "git checkout -b new_branch_name"
repo forall -c :此命令的意思是遍历所有的git仓库(除了管理的仓库manifest外),并在每个仓库(除了管理的仓库manifest外)执行-c后面所指定的命令,-c也就是所指的是command。如上面就是在每个仓库(除了管理的仓库manifest外)都执行git checkout -b new_branch_name命令,那么这样就可以给每个仓库创建了一个一样的新分支了。
2.推上服务器
上面的创建分支操作只是在本地创建了一个新分支,我们还要推到服务器上。
同样git在本地创建新分支后,推上服务器的命令的如下
git push <远程主机名> <本地分支名>:<远程分支名>
需要注意的是,如果省略本地分支名,则表明的意思是删除远程分支。如下就是相当于删除远程的master分支
git push origin :master
#相等于
git push origin --delete master
如果省略远程分支,就表示远程分支名默认跟本地分支名一样,如果远程分支不存在,则创建一个跟本地分支名一样的远程分支。如下
git push origin local_branch_name
repo把本地分支推上服务器:
repo forall -c "git push origin local_branch_name"
3.把新分支添加到manifest仓库
大家都知道manifest仓库是管理repo下面其他仓库的,因此我们要让repo知道我们创建了新分支,好让同步的时候可以根据分支名来同步分支。
(1)为manifest仓库创建新分支new_branch_name
因为repo forall -c的命令是除了.repo/manifest下的仓库都进行git命令,所以我们还需要在.repo/manifest也创建一个分支.
.repo/manifests$ git checkout -b new_branch_name
(2)并且修改default.xml
<default remote="origin" revision="new_branch_name" sync-j="4"/>
(3)把新分支推上服务器
git add default.xml
git commit -m "add a new branch"
git push origin new_branch_name
4.验证
新建一个文件夹,然后拉取该分支是否成功,成功则OK
repo init -u git@xxxx -b xxxx
repo sync -c
repo forall -c “git checkout -b xxx origin/xxx”