@sunnycld
2015-10-27T10:09:05.000000Z
字数 2079
阅读 4924
git flow是一个用于管理多人合作的工作方式。在多人合作的项目中,通过制定一些使用git的规范,来避免多人开发导致的相互干扰。
想象一下,当你正在开发的一个功能A,需要某个其他人完成的功能B,而别人在这个功能B的提交中又参杂了另外一个还没有开发完的功能C。这个时候,你如果将功能B获取下来,就会同时获取到还未开发完的功能C的代码,这会导致你的功能A从完成变成了未完成,因为你当前的代码是不能运行的。
git flow就是让git的使用变得容易理解和管理而提出的。
网上有很多git flow的使用说明,我就不在这里一一细说了,大家自行传送过去看看,git flow详解
上面已经介绍了git flow的概念和流程,git flow其实是一种管理模型,并不是新增加了一种功能。如果想用省事的方式使用git flow,建议安装git flow命令集。不过不用命令集也是没有问题的。
只要我们理解了这套管理模型的意图,使用branch和merge等命令完全是可以的。
gerrit是用来进行code review的系统,相信在多人合作开发时会有很多团队选择使用它。gerrit的官网有相关的使用说明。
网上也有很多介绍gerrit的文章,我就不在这里介绍了。我想在这里记录的是我在使用gerrit中碰到的一些问题和解决办法。
git pull --rebase
,然后再push一次git reset --soft HEAD^
把这次提交的commit删掉,重新commit一次。--soft参数表示只删除commit信息,保留当前的代码,并且已经是stage的状态。git push --no-thin origin HEAD:refs/for/master
。这个问题是gerrit与git不兼容导致的bug。该bug的具体原因是git提交时,在gerrit生成了一个未关闭的review请求,但是这个请求并不属于任何一个提交。gerrit版本为2.6, git版本高于1.8.3就会有这个bug。git merge feature
合并到develop,push时提示no changes,gerrit拒绝提交,怎么办?git merge feature --squash
,然后commit,再push一次。出现这种情况的原因是新开发的功能在feature分支上已经提交,merge到develop分支时,由于develop分支并没有更新,所以是一个完全合并,feature分支上的commit都被完整保留下来,每一个commit的Change-Id在gerrit看来都是已经经过code review的,所以gerrit拒绝了提交。这种方式会将feature分支上的所有commit合成为一个,将丢失中间的commit message。但能够更加符合git flow的管理方式,因为主程只关心最后将要进入到develop中的代码。