Cra*_*g H 73 version-control branch branching-strategy
我工作的公司开始遇到他们目前的分支模型的问题,我想知道社区有哪些不同的分支策略?
对于不同情况,有什么好的吗?贵公司使用什么?它们的优点和缺点是什么?
jco*_*oby 54
这是我过去使用的方法,取得了很好的成功:
/ trunk - 流血的边缘.下一个主要版本的代码.在任何给定时间可能会或可能不会工作.
/branches/1.0,1.1等.代码的稳定维护分支.用于修复错误,稳定新版本.如果是维护分支,则应编译(如果适用)并准备好在任何给定时间进行质量保证/运输.如果是稳定分支,它应该编译并且功能完整.不应添加任何新功能,不进行重构,也不需要进行代码清理.您可以添加前置前缀以指示稳定分支与维护分支.
/支链/ cool_feature.用于高度实验性或破坏性的工作,可能会或可能不会进入主干(或维护分支).无法保证代码编译,工作或以其他方式表现得非常好.在合并到主线分支之前应该尽可能持续最短时间.
/tags/1.0.1,1.0.2,1.1.3a等用于标记打包和发布的版本.永远不会改变.制作任意数量的标签,但它们是不可变的.
我们的存储库如下:
/trunk
/branches
/sandbox
/vendor
/ccnet
Run Code Online (Sandbox Code Playgroud)
/ trunk是你的标准,前沿发展.我们使用CI,因此必须始终构建并通过测试.
/分支 这是我们放置"制裁"的大变化的地方,即我们知道的东西会变成主干但可能需要一些工作并且会破坏CI.此外,我们在维护版本上工作,这些版本都有自己的CI项目.
/ sandbox 每个开发人员都有自己的沙箱,还有一个共享的沙箱.这是为了"让我们的产品添加一个LINQ提供程序"这类任务,当你不做你真正的工作时,你会这样做.它可能最终进入主干,它可能不会,但它存在并受版本控制.这里没有CI.
/ vendor 标准供应商分支用于我们编译的项目,但它不是我们维护的代码.
/ ccnet 这是我们的CI标签,只有CI服务器可以在这里写.Hindsight会告诉我们将其重命名为更通用的内容,例如CI,BUILDS等.
请查看此http://codicesoftware.blogspot.com/2010/03/branching-strategies.html以获得更好的解释
第一件事:KISS(保持简单愚蠢!)
/branches /RB-1.0 (*1) /RB-1.1 (*1) /RB-2.0 (*1) /tags /REL-1.0 (or whatever your version look like e.g. 1.0.0.123 *2) /REL-1.1 /REL-2.0 /trunk current development with cool new features ;-)
*1)保持版本可维护 - 例如,服务包,修补程序,错误修正,如果需要和/或需要可以合并到主干)*2)major.minor.build.revision
拇指规则:
--hfrmobile
小智 2
目前,我们有一个用于持续维护的分支,一个用于“新举措”的分支,这意味着“将来某个时候会出现的东西;我们不确定什么时候”。我们偶尔也会有两个维护分支:一个为当前生产中的内容提供修复,另一个仍在质量检查中。
我们看到的主要优点是能够更快地响应用户请求和紧急情况。我们可以对生产中的分支进行修复并发布它,而无需释放任何可能已签入的额外内容。
主要缺点是我们最终会在分支之间进行大量合并,这增加了遗漏或错误合并某些内容的可能性。到目前为止,这还不是问题,但这绝对是需要记住的事情。
在我们制定这个政策之前,我们通常在主干中进行所有开发,只有在发布代码时才进行分支。然后我们根据需要对该分支进行修复。它更简单,但不那么灵活。