我知道这个理论,但是从一个项目的实际角度来看,如何使用svn?说,我有一个网站,其功能将被修改或添加。在什么情况下会使用新的中继线,分支和标签?
答案 0 :(得分:2)
不同的组织做了很多不同的事情。 Alex给出的解决方案是一个常见的解决方案,但它遇到的问题是,只有在您降落分支后,您才会发现其他分支与您的分支发生冲突。这导致人们不得不在一段时间内没有看过的东西中调试冲突。
我遇到的另一种常见方法是在trunk中进行所有开发,并使开发人员对所有提交进行小型,独立,提交。添加功能有多种方法,默认情况下使其不可见,但在开发副本中打开。使用它们。这种方法需要开发人员的关注,但避免了管理长寿分支之间冲突的痛苦。
许多使用Alex解决方案的人都会跳起来说:“除了小团队之外,任何事情都无法奏效!”为此,我回答小团队没有任何问题,他们的生产力通常远远超过大型团队所能做的。如果开发人员有纪律,那么该策略可以扩展,例如Google使用它。如果您想查看使用该策略的实际项目,请查看http://llvm.org/。
还有一些建议。如果你想遵循Alex的策略,我强烈建议使用git而不是svn。它处理分支比svn更好。如果您想遵循我建议的策略,并且您的团队不是一个与您信任的人合作的小团队,那么您需要使用http://code.google.com/appengine/articles/rietveld.html等代码审核工具来减少可能出现的明显问题。
答案 1 :(得分:2)
看看这两篇文章:
http://www.snuffybear.com/ucm_branch.htm
http://www.vance.com/steve/perforce/Branching_Strategies.html
来自SnuffyBear的链接更多地讲述了您似乎想要使用的策略,而other article则讨论了其他策略,例如分支发布。每篇文章都概述了每种策略的优缺点。
答案 2 :(得分:1)
我会说一个单独的主干,其中“稳定”非常小的变化(可能是小错误修复),这不会破坏你的构建。
应为新功能/大变更分支。当分支机构正在运行时,分支机构应保持最新状态,更改主干。
完成新功能后,应将分支合并回主干,然后删除分支。
标签适用于发行版。例如V1.2
答案 3 :(得分:1)
我的拙见:合并分支是可怕的。在许多情况下,不同开发人员所做的更改是完全独立的,因此可以顺利合并。但在任何繁忙的项目中,都会有变化冲突的时候。如果你很幸运,SVN会识别冲突并在合并时给你错误。如果你不太幸运,SVN不会抓住它,但它无法编译。无论哪种方式,现在有人必须弄清楚如何将变化放在一起。有时这很明显也很容易。但是我曾经多次在那里让那些一起做出改变的开发人员让我们弄明白该怎么做。
如果你非常不走运,SVN和编译器都没有看到问题,冲突的更改会转到生产,并且程序行为不正确。
根据这一观察,我得出两个结论:(a)尽量减少分支。或者更准确地说,制定您的策略以尽可能少地合并。并且(b)在代码仍在测试时对代码进行合并。
有一段时间我的公司有一个分支策略,说每个项目都有自己的分支,在该分支上进行测试,当我们准备部署到生产时,我们将所有分支合并到该版本中,编译和部署。事实证明这是一个非常糟糕的主意。有人会在部署前一天尝试解决合并冲突,并且从未测试过合并的结果。许多微妙的错误都涌入生产中。
对于我们使用此策略的人:大多数开发都是在trunk中完成的。当一个版本准备好转交给测试组时,我们为它剥离一个分支。然后在下一个版本的工作继续在trunk。当前版本的任何错误修复都在分支中完成,并且此分支中的更改会定期合并回主干。有时需要同时处理3个版本的工作,即一个版本正在测试中,另一个版本已接近准备好进行测试,现在我们需要从下一个版本开始。在这种情况下,我们将拥有测试分支,当前版本的主干和下一版本的“预”分支。当前版本发布到测试组时,我们会将“pre”分支合并到trunk中,然后它成为当前版本。
我们最近开始尝试稍微不同的策略。当一个版本正在测试中时,我们仍然会剥离一个单独的分支。但是测试中出现的任何修复都是在trunk中进行的,然后这些修复程序从trunk合并到测试分支中。这意味着所有开发都发生在主干中,并且合并总是从主干到其他地方。这有两个很大的优点:第一,开发人员总是使用trunk进行测试,因此我们对主干中的代码很好有信心。测试组将对发布分支进行测试,因此我们相信发布分支是好的。也就是说,我们确信两个分支都将进行测试。当您在分支中进行更改然后合并回主干。几乎没有人保证会测试合并的结果。二,主干总是拥有每个模块的完整“怪”历史。当您从分支合并回主干。 trunk中的历史记录归因于从分支到执行合并的人的所有更改,而不是真正进行更改的人,而注释往往是一个没有信息的“从brach xyz合并”。当您从主干到分支合并时,确定分支现在显示“错误”的人和无法提供信息的注释,但主干具有良好的历史记录。有一个地方可以去历史,而不是试图追逐分支。