选择使用GIT来进行版本控制,除了它可以随时提交更新,速度快,和对分布式开发的强大支持外, 还有一点就是因为它提供多分支开发的操作便捷性,相对SVN来说要方便和快捷很多. 下面就根据NLB KSI项目为例说明一下GIT环境下,如何正确的进行多分支开发以及一些需要注意的事项.
首先,在项目进入SPRINT开发阶段之前,组内的每个组员应该都GIT的基本操作有一定的了解,然后在本地安装和配置GIT环境详见(http://www.ufinity.cc/wiki/pages/viewpage.action?pageId=23363736), 由新加坡PM或者是组长在master分支上创建开发主分支 marchant (分支名称)
branch:master
>git branch marchant //创建分支
>git push origin marchant //把创建好的提交分支到远程
所有的开发工作都会在SPRINT结束时,合并到marchant分支里面.
然后, 在我们进行SPRINT需求分析的时候,会根据不同的模块(portlet)进行分配任务,一个组员在当前SPRINT可能会负责其中一个模块的开发工作,这样就可以为该模块创建一个子分支,例如:TOM在sprint 1里面负责user Sign in portlet, 需要在marchant 分支下面为创建一个新的子分支 6152447(取自SG pivotaltracker分配的任务编号),这样在sprint 1开发期间TOM只允许在 6152447 分支里面进行提交代码. 如果是由于模块较大,或者功能比较复杂,需要多人协作开发完成,可以让俩个或者多个组员在同一个子分支进行开发.
(注意: 在多个组员在同一分支进行开发的时候,组员要养成经常更新代码的习惯,避免在长时间不更新代码以后,出现文件冲突的情况.)
还有一种情况是经常遇到的,对于公共代码的共享问题, 比如项目里DB层代码,工具类等. 例如: TOM在sprint1里面开发的时候,需要用到一些验证工具类, 然后JERRY已经所在的另外一个分支 6200397下面,添加了这些验证类, 并且满足TOM的需求, 这样就需要分支之间进行合并操作了.
操作步骤:
JERRY:
> git checkout 6200397 //切换到6200397
> git pull origin marchant //更新marchant分支
> git push origin 6200397 //提交验证类到远程
TOM:
> git checkout 6152447 //切换到6152447
> git pull origin marchant //更新marchant
> git merge origin 6200397 //合并远程6200397的验证类代码到6152447分支.至此TOM已获得需要的验证类.
最后在SPRINT结束的时候,需要把所有子分支的内容合并到主开发分支里面去.
如果想从另外一个分支更新代码到当前分支,可以直接使用:
> git pull origin newbranchname
这样就可以不用切换分支和MERGE了.
注意: 想要从本地删除一个分支,可以直接用 git branch -d branchname, 如果失败了,并确认必须删除,就可以用 git branch -D branchname,来进行强制删除, 在本地删除以后, 如果还想把远程对应的分支也删除的话,可以用git push origin :heads/branchname 来删除远程分支.