Von*_*onC 79
总的来说,分支的主要目的(VCS - 版本控制系统 - 功能)是实现代码隔离.
您至少有一个分支,足以进行顺序开发,并用于在同一个唯一分支上记录(提交)的许多任务.
但该模型迅速显示其限制:
当您进行开发工作(重构,演变,错误修复,......)并且您意识到您无法在与当前开发分支相同的分支中安全地进行这些更改(因为您会破坏API,或者引入会破坏的代码)一切),然后你需要另一个分支.
(为了隔离旧代码的新代码,即使稍后将合并这两个代码集)
那么这就是你的答案:
只要你不能在一个分支中追求和记录两个开发工作,你就应该分支.
(没有一个非常复杂的历史来维护).
即使你是唯一一个处理源代码的人,如果你很多,分支也很有用.
但是你不应该为每个开发人员制作一个分支:
"隔离"的目的是隔离开发工作(这个任务可以像"让我们开发软件的下一个版本"一样通用,或者像"让我们修复"一样具体错误23"),
而不是隔离"资源".
(一个名为"VonC"的分支对另一个开发者来说没有任何意义:如果"VonC"离开项目怎么办?你应该用它做什么?
一个名为"bugfix_212"的分支可以在bug跟踪系统的上下文中解释,任何开发人员都可以使用它至少有一些关于他应该用它做什么的想法)
分支不是标签(SVN是一个修订系统,它试图提出版本控制功能,如分支和标记通过廉价文件副本的目录:这并不意味着标签是一个分支)
定义分支还意味着定义合并工作流:您需要知道在完成分支时合并分支的位置.
为此,Practical Perforce的第7章(Laura WINGERD - O'Reilly)是一个很好的介绍(VCS不可知),用于合并不同类型的分支之间的工作流程:"" 软件如何发展 "(pdf)
它定义术语代码行(分支记录代码的重要演变步骤,通过某些点的标记,或通过重要的合并回到分支)
它介绍了主线模型(记录发布的中心代码行),并描述了分支的各种用途:
关于VCS的其他有趣概念:基础概念
(最初关于ClearCase,但对任何VCS也有效)
Dan*_*llo 58
分支有几种用途.最常见的用途之一是分离曾经具有公共代码库的项目.这对于试验代码非常有用,而不会影响主干.
通常,您会看到两种分支类型:
功能分支:如果某个特定功能具有破坏性,您不希望整个开发团队在其早期阶段受到影响,您可以创建一个分支来执行此工作.
修复分支:在主干上继续开发时,可以创建修复分支以将修复程序保存到最新发布的软件版本中.
您可能有兴趣查看以下文章,该文章解释了分支的原理以及何时使用它们:
pab*_*blo 18
所有21世纪的SCM都在告诉你:
分支你要处理的每一项任务,无论这是一个新功能,一个错误修正,一个测试,等等.这称为主题分支,它会改变您使用SCM的方式.
你得到:
可以做到的工具:
无法做到的工具:
它还取决于您使用的SCM工具.现代SCM(git,mercurial等)使得在需要时创建和销毁分支变得越来越容易.例如,这允许您为每个正在处理的错误创建一个分支.将结果合并到主干后,您将丢弃分支.
其他SCM,例如颠覆和CVS,具有更"重"的分支范例.这意味着,分支被认为仅适用于大于二十几行补丁的东西.在那里,分支通常用于跟踪整个开发轨道,如先前或未来的产品版本.
这取决于您使用的SCM类型.
在较新的分布式版本(如git和mercurial)中,您始终在创建分支并重新进行重新分类.我经常在一个单独的分支上工作一段时间只是因为有人破坏了主线上的构建,或者是因为网络已经关闭,然后合并后的更改会在以后修复,并且它很容易做到它甚至不讨厌.
最能帮助我理解分布式系统中的内容的文档(简短且可读)是:UnderstandingMercurial.
在具有中央存储库的旧系统中(如CVS,SVN和ClearCase),这是一个需要在团队级别决定的更严重的问题,答案应该更像是"在允许的同时保持旧版本发展继续在主线',或'作为主要实验的一部分'.
我认为,分布式模型要好得多,并且缺乏很好的图形工具才能成为主导范例.然而,它并没有被广泛理解,并且概念是不同的,因此它可能会让新用户感到困惑.
归档时间: |
|
查看次数: |
33598 次 |
最近记录: |