题
今天早上我读了两种意见在重构。
- 意见1(页上不存在)
- 意见2(页上不存在)
他们建议支(和随后合并)代码:
- 保持干净。
- 允许开发人员离开危险的变化。
以我的经验(特别是与Borland的相),合并是一个非繁琐的操作。因为这个原因,我分支只有当我必须(即当我想,冻结一个释放候选).
在理论上,分支的意义,但该机制并使它成为一个非常危险的操作。
我的问题:
- 你觉得舒适合并代码?
- 你的分行代码的原因比其他冻结的释放 候选人?
解决方案
一些松散的指导原则:
- 支晚只有当你需要
- 合并的早期和经常
- 得到合适的人做的合并,无论是谁提出的改变或该人是谁写的原始版本是最好的
分枝只是一个工具,你需要学习如何有效地使用它,如果你想要最大的利益。
你的态度分支可能应该之间不同分布式的开放源码项目(例如那些录)和公司的发展项目(可能上运行SVN).对于分项目只要鼓励分支的最大化的创新和实验,对于后一种你想要的更严格的控制和决定签政策,对每一个码线,决定在分支应该/应当不会发生,主要是为了"保护"的代码。
这里是一个指南,以支:
http://www.vance.com/steve/perforce/Branching_Strategies.html
这里是一个较短的指南,与一些高等级的最佳做法:
https://www.perforce.com/sites/default/files/pdf/high-level-perforce-best-practices.pdf
其他提示
分支可能是痛苦的,但它不应该。
这是什么混帐像项目(善变的,扎尔)告诉我们的有关简历和SVN.录和善变的、分支是容易的。在SVN这很容易,但与的大型项目,它可以是位铁杆管理(因为花费的时间上的分支/合并过程,可能会很长--相比,其他一些人喜欢的混蛋,水银--和困难,如果有非显而易见的冲突)。不要帮助的用户不用于支经常有信心分支。很多的用户不了解的强有力的使用的分支只是让它走不添加新问题,他们的项目,让未知的恐惧使他们远的效率。
分支应该是一个简单的和强大的工具,我们必须使用对于任何理由不够好的分支。
一些很好的理由分公司:
- 工作上一个特定的特征并行与其他人(或虽然工作在其他功能或者如果你孤单上的项目);
- 有几个品牌版本的应用程序;
- 具有平行的版本相同的申请--就像并发技术发展的同时,通过为团队的一部分,看看是什么在起作用的更好;
- 具有资源应用程序正在改变对一个艺术家、设计人员(例如在游戏)具体分支,应用"稳定的",而其他部门和后备箱是用于特加和调试;
- [在此处添加的有益的用法]
支是微不足道的。并不是。出于这一原因,我们很少分支的任何东西。
SVN,我已经找到了分支以相对容易。特别是,如果你周期性合并的干成你的支持它变得太远了同步。
我们使用svn.只需要我们大约5分钟以分行代码。这是微不足道量相比的痛苦,它将我们从来都干。
工作中的码基数百万行代码有数以百计的开支是每天发生。生命的分行取决于大量的工作正在做。
对于一个小的修正:
- 设计师使sidebranch主流
- 使得变化
- 测试
- 评论
- 合并累积的变化,从主流sidebranch
- 迭代过一个或更多的前几步
- 并回到主流
对于多人的团队功能:
- 小组的一个特征sidebranch主流
- 各个团队的成员运作的特征sidebranch如"小型解决"的做法和合并的特征sidebranch.
- sidebranch总理定期合并累积的变化,从主流的功能sidebranch.小增量合并从主要特征sidebranch更容易处理。
- 当特工作,做最后的合并,从主流的功能sidebranch
- 合并的特征sidebranch主流
为客户软件的发布:
- 做一个分支
- 提供修复需要发布分支
- 修复是propogated向/从主流的需要
客户释放流可能非常昂贵支持。需要测试的资源--人员和设备。后一年或两年,开发知识特定流开始变得陈旧作为主流的向前移动。
你能想象有多少,它必须成为Microsoft,以支持XP和Windows Vista7并发?想测试床、管理、文件、客户服务和最后的开发人员小组。
黄金规则: 从来没有 打破的主流,因为你可以拖延一个大号的开发。 $$$
该分支的问题是为什么我使用一种分布式版本控制系统(Git在我的情况,但也有善变的和集市)在创建一个分支是微不足道的。
我用短暂的分支机构所有的时间用于发展。这让我周围的混乱在我自己的仓库,出错和错误的选择,然后 rebase
更改的主要分行使只有干净的变化保持在历史记录。
我用 tag
s标冻结代码,而且很容易在这些系统要回去和分支,这些对于错误的修正没有一个载荷的长期分代码的基础。
我用颠复,并考虑支非常简单和容易的。所以回答问题1..是的。
原因的分支可以有所不同大规模。我分支,如果我觉得我应该。很难把规则和原因上下为所有的可能性。
然而,至于"允许开发人员离开危险的变化。"评论。我完全同意这一个。我创建一个分支,每当我想到真的玩的代码,并希望我是唯一开发工作。当你分支,你可以做那个...
我已经在一个项目使用svn和TFS和支由本身是一个非常简单的事情。
我们使用的分支为释放候选人以及对于长期持久的或实验的特点和隔离其他团队的干扰。
只有痛苦的时刻,在分支是合并,因为旧的或强烈的开支可能不同于很多从主干,并且可能需要重大努力,合并后面。
具有说上述,我想说的分支是一个强大和有益的做法应考虑到在发展中国家。
如果合并是太多的痛苦,考虑迁移到一个更好的风险.这将是一个更大的痛苦,但只有一次。
我们使用svn和已经通过了一项规则,以支断变化。微小的变化做正确的主干。
我们还支稿。
分支和合并工作。授予有时候我们坐下来思考如何的东西合在一起,但通常svn的一项伟大的工作的合并的一切。
我用svn,它需要不到一分钟的时间来分行代码。我用,它采取了不到一分钟的时间来分行代码。我也使用其他较少,SCMs,他们要么不支持分支机构或是太痛苦来使用。相听起来像是后者。
所以,如果你不能迁移到一个更有用的人(实际上,我只听说过坏事关于相)然后你可能需要尝试一种不同的方法:手册的分支。这包括检查你的代码复制到不同的目录,然后将它添加作为一个新目录。当你需要合并,你会检查了这两个目录和使用WinMerge执行合并,在检查的结果与原来的目录。尴尬的和潜在的困难,如果你继续使用的分支,但是它的工作。
的伎俩,与分支是不是把它作为一个全新的产品。它是一个分支-一个相对短暂的装置使用的变化单独和安全的一个主要产品的主干。谁认为合并是很困难的是既重构的代码文件,以便得多(即他们被重新命名、复制、创新、删除旧的),该处成为一个完全不同的事情,或者他们保留的支如此之久,累积的变化没有什么相似之处的原件。你可以保持一支很长一段时间,你只需要合并您变回。这样做和支化/合并变得非常容易。
我只是做了几次,所以我没有完全舒服。
我已经做到了进行设计实验,将跨过某些检查,这样的分支是一个简单的方法墙关闭自己的花园中玩。此外,它让我来修补,而其他人工作的主要分支,因此我们没有失去太多的时间。
我也做了它当做出范围广泛的变化会使干uncompilable.很显然在我的项目,我们要删除的编写时间类安全的一大部分代码(从泛型系统。对象)。我就知道这会需要一段时间,将需要改变所有的代码这将妨碍其他人的工作。这还将破坏建立,直到我完成。因此,我支和剥离出仿制药工作,直到这一支编制。然后,我并回到主干。
事实证明,这很好。预防的一个很大的脚趾踏,这是伟大的。我们希望这样的事会再次出现。其一种罕见的事情,一个设计的改变将需要这种广泛的编辑不要导致一个很大的代码被抛出去...
支必须是设法正确合并的痛苦。以我的经验(与必然)定期融合到分离主线,意味着一体化的背入主线进行得非常顺利。
只有极少数情况下,当合并失败。在不断一体化,从主要行分行可能已经涉及合并,但他们只是小小的编辑的自动工具可以处理,无需人为干预。这意味着用户没有"请"这些情况的发生。
因此,任何合并需要在最终的一体化往往可以自动处理的。
Perforces3种方式合并工具是一个很大的帮助时,他们实际需要。
你觉得舒服的分支法?
这真的取决于该工具的我是使用。与相,分支的确是非微不足道(别,相吸在分支).}类型的分支是一种经常性活动,是很容易的。
你的分行代码的原因比其他冻结的释放候选人?
好吧,这真的取决于你的版本控制的图案,但简短的回答是肯定的。实际上,我建议阅读的下列条款:
- 版本控制的多个团队 通过亨里克*阅读得到的要点如下:
- FeatureBranch 由马丁*福勒
我真的很喜欢这个模式中所述第一条和它可以适用与任何(不分布)的版本控制系统,包括相.
我可能会考虑的第二种办法(实际上,一种混合两者的战略),带有(并且只有)分布式版本控制系统(DVC)如Git,善变...
我们使用相和我们才支的时候,我们有一个情况的要求(即修补程序,以生产过程中释放的周期或一些长达项目,跨越多种释放windows)。我们使用的图片公司的财产,以确定稿,使这一个简单的问题,以建立分支机构以后的需要。所有的版本是基于这些看标签和我们不建立无标记的代码。
开发应该是下一个"代码-测试-commit"的模式和如果他们需要一个认为一些测试的目的,或"危险"的发展他们的创建和管理。我管理的储存库,并创建支路,只有当我们需要他们。这次是(但不限于):
- 生产的修复程序
- 项目的长或重叠的发展周期
- 广泛的改写或发展实验
合并工具在相并不是最大的,但是我还没有遇到一个问题造成的。不管是谁做的合并只是需要被非常肯定他们知道他们在做什么。
创建一个"只读参考"视明星队和设置浮动结构将允许更改在干自动显示了在分支。设定项目,以支上的改变。这是好的并行发展的努力。
创建一个"只读参考"图标记的配置是什么你会用于修复现有的生产释放(假设你已标记)。
支是微不足道,因为大多数已经回答了,但合并,就像你说的,不是。
真正的关键是去耦和单元的测试。尝试分离 之前 你的分支,并保持眼睛上的主要可以肯定的是,脱钩并接口的维持。这样的时候合并,这样,更换一个乐高件:删除旧的片,和新的一块完全适合它的地方。该单元的测试是在保证什么都不得打破。
分支和合并应该是相当直截了当的。
- 我觉得很舒服的分支/合并。
- 支样做是出于不同原因,根据您的发展过程模型/
有几个不同分支的模式:
这里是一个
Trunk
.
.
.
..
. ....
. ...
. ..Release1
.
.
...
. ....
. ...Release2
.
.
..
. ...
. ..
. ...Release3
.
.
现在这里有一个奇怪的事情。假设Release1需要一些之前.现在,你需要支Release1发展1.1.这是确定的,因为现在你可以支R1,做你的工作,然后合并回R1形成R1。1.注意到如何这样可以使该差异明之间的版本?
另一分支的模式是所有发展完成在树干上,并且每释放被标记,但没有进一步的发展得到执行在那个特定的释放。分支机构发生的对发展。
Trunk
.
.
.
.Release1
.
.
.
.
.Release2
.
.......
. ......
. ...DevVer1
. .
. .
. ...DevVer2
. ....
. ....
...
.Release3
.
可能有一个或两个其他主要分支的模式,我不记得他们在我的头顶。
底线是你的风险投资需要支持灵活分支和合并。每文件风险投资公司系统本的一个主要的痛苦海事组织(RCS,CVS)。SVN说是一个理想在这里,不知道为什么。
善变的一项伟大的工作在这里,(我认为)饭桶。