git多人协作时的分支管理

1. 为什么要多人协作

一个项目可能有多个人同时开发,每个人负责自己的模块。比如开发一个问答系统,A开发分词和NER模块,B开发ElasticSearch数据库模块,C开发数据清洗模块,D开发精排模块,E开发问答模块。这种情况下,若大家都在master分支上开发,那么随时都会有人修改master分支、造成master分支混乱。此时正确的做法,就是让A~E每个人从master分支新建一个自己的开发分支,例如A_devel,然后自行开发,在开发时将自己的改动更新到自己的A_devel分支,在确保代码无误的情况下,再将自己的A_devel合并到master分支上去,完成git的多人协作。

2. 说说以上一套流程的具体操作

首先,对于A~E五个小小伙伴而言,此时应该有一个共同的初始代码,这份代码目前只有master分支。第一件事,就是拉取master分支到本地,然后在本地新建自己的个人分支(A_devel),再将个人分支推送到远程仓库。

1.首先,拉取代码到本地(默认的就是master'分支)

git clone http:/xxx.xxx.xxx.xxx:xxxx/contract.git

 2.其次,在本地新建一个新个人分支A_devel,并且保证远程仓库也有这个分支:

git checkout -b A_devel origin/A_devel
# A_devel是新建的本地分支名,origin/A_devel是同名的远程分支名。当然你也可以将二者设置为不同名字,但这样未免太精神分裂了

现在用命令“git branch -a”查看一下,发现自己已经处于本地分支A_devel下,且远程也存在这个分支,此时就可以在这个分支上进行自己的开发了。

3.经过一系列开发后,你在本地分支A_devel有了一些改动,此时你可以将这些改动push到你自己的远程分支A_devel

git push origin A_devel

如果你已经确定你的改动无误并且打算合并到主项目中(即master分支),你此时就可以进行以下操作:

4.首先,在本地切换到master分支

git checkout master

5.其次,确保在多人协作下不会错过别人推送到master分支上的改动,要先pull一下master分支

git pull origin master

6.然后,将你自己的分支A_devel与master分支合并

git merge A_devel

此时,你可通过git status查看得知你当前合并到master分支的A_devel分支有多少次commit要被推送到master上。大概就是下面这个样子:

$ git status        
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

7.下一步就是将这些commit推送到master分支

git push origin master

从而完成A_devel个人开发分支和master分支的合并

***注意:当然对于大多数情况而言,master分支都是受保护的分支,如果你直接去向master分支进行push,是不会成功的。所以若以gitlab为例,你在操作第7步之前,还需要在gitlab上提交merge request:

****1. 切换到gitlab项目主页,按下图所示,在页面左边栏找到“Branches”

git多人协作时的分支管理_第1张图片

                                                                                                  图1 

****2.来到Branches页面后,你可以清楚地看到,你自己和一同开发本项目的人员当前分支的情况。以第三行为例,假设该分支就是A_devel分支,那么后面的“5|32”的含义,是该分支落后于master分支5个commit(可能来自于第二行所示的分支之前合并到master的内容)、领先于master分支32个commit(这个就是A_devel分支自己开发完后还未push到master上的内容,这个commit数应该和第6步操作后git status所展示的commit数一致)。

了解这些之后,我们就可以直接点击Merge request,去向项目主管申请push到master的权利、也是提醒他对你提交的代码进行审查。

git多人协作时的分支管理_第2张图片

                                                                                                      图2  

 ****3.下一步,就是填写一些此次merge request的具体信息了。如下图所示,从上到下按顺序填写即可。提交后就需要等待“Assignee”去审查并通过你的merge request。一旦通过后,你就可以完成“git push origin master”的操作了。

git多人协作时的分支管理_第3张图片

                                                                                                       图3 

 

8.此时,虽然你将你个人的开发分支A_devel merge到master上了,但你可能还想继续在A_devel上开发,而此时项目的其他开发人员的分支,如B_devel可能有些更新也同样merge到了master(即如图2所示,A_devel落后当前master5个commit),那么你如何确保你自己的A_devel分支和此时master分支完全一致呢?

  1. 首先,是要切换到master分支下,然后拉取master分支的最新代码。这两步我们上文已经提到了,就是步骤4、5;
  2. 切换回自己的A_devel分支,并将A_devel分支和刚刚拉取过的master合并。操作为:
$ git checkout A_devel
$ git merge master

Updating e5b4ad0..17a6e81
Fast-forward

假如这次合并没有冲突,那么会显示下面的“Fast-forward”内容,证明你已经成功将自己的A_devel和master的最新改动合并。

你可能感兴趣的:(git)