DVCS Repo设计 - 使用分支机构或单独的回购单独分离dev?

时间:2011-01-28 00:44:00

标签: git mercurial repository workflow dvcs

我正在制定一项“行动计划”,用于将我们的源代码管理从SourceSafe 6.0(ugh)迁移到DVCS,如git或Mercurial(最好是git ATM)。现在我正在研究未来的存储库设计,即分支布局以及如何配置'中央'/祝福的回购。

现在,我只是真的使用git作为将业余爱好开源代码推送到GitHub的手段,并且最近用于保持我自己的私人仓库工作,以便我对代码进行更细粒度的控制修订版比SourceSafe允许的那样。不幸的是,除了使用简单的功能分支之外,我还没有在我的回购中体验到广泛的分支/合并场景或其他半复杂的git用法。换句话说,我没有很多关于DVCS的整体经验,所以我认为我不能预测我们将在这里使用的典型工作流程,因此我无法自己创建匹配的存储库设计。

相反,我花了很多时间阅读其他人的git工作流程,并尝试将这些策略应用到我们如何在我的工作中发布代码。无论如何,我认为这是一个开始的地方,我们可以随着时间的推移改变它。

现在,在查看了许多git工作流之后,我真的很喜欢特定的outlined by Vincent Driessen,它似乎有一个非常干净的分支布局,几乎适合我们在工作中的部署(或应该,无论如何):

使用分支单独开发/稳定


Separate Dev/Stable Using Branches

但是,我承认在Joel Spolsky's HgInit site上看到一个不同的例子之后有点困惑,它似乎更多地关注单独的存储库而不是分支开发和稳定代码的分支:

使用Repos分离Dev / Stable


Separate Dev/Stable Using Repos

问题


这个以存储库为中心的分离层是否只是一个与git没有太多用处的Mercurial事物?如果没有,那么使用这种方法比使用分支来分离dev / stable代码有什么优点/缺点?或者我只是完全误解了这里发生了什么? : - )

任何意见都将受到赞赏;如果这个问题由于我沉浸在无知中而浪费时间,我会提前道歉。

2 个答案:

答案 0 :(得分:6)

最后,这完全取决于您的偏好。我喜欢克隆作为分支模型Joel封面,但它们都是有效的。这是一篇很棒的文章,涵盖了Mercurial和Git中的几个不同的分支模型(尽管有标题):

http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

我最大的建议是不要过度思考。我知道你需要一个管理层可以买入的具体建议,但如果我的经验在你所在的地方重演,你会发现人们非常认真地对待这个分散的部分。你将有即兴团队在网络共享方面做一点努力,你将拥有开发者克隆和拉动,以及各种各样的临时组织。只要你有一些坚定,明确的期望(例如:“必须编译”或“必须可以发送”或“必须有吉姆的祝福”)的关键回购,你就可以了。

答案 1 :(得分:3)

我对此的感觉是,除了经过最佳测试的东西之外,你应该避免分支。这意味着所有分支都应来自版本中的修订。

这样做的理由是双重的。首先,当您在功能分支中有错误时,您希望知道该错误是该功能的结果,而不是因为代码中的错误。其次,当您想要发布您的功能时,您不希望强制进行任何与您的功能无关的更改。

我们已经采用了一种工作策略,我称之为“浓密分支”战略。

基本上有功能,发布,修补程序和主分支。所有功能分支必须具有在其基础上的主分支中标记的修订,并且它们可能在任何时候都不与其他功能分支合并。它们可能会与主分支中未来标记的修订版合并。

一旦功能准备就绪,它就会合并到发布分支进行测试。一旦经过测试,它就会进入主分支。当您在图表中绘制出来时,修补程序会得到很多处理。

最后,我们有一个一次性的“整合”分支。该分支主要是自动合并所有可能很快发布的功能。此分支需要进行日常构建测试,但不一定与发布分支进行相同级别的严格测试。这是在过程的早期捕获功能交互错误。

我是一个善变的人。所以我没有看到'branch'和'repository'之间确实有明显的区别。事实上,对于大多数事情,我并不真正喜欢多个分支存储库,因为它可以使您在实际上不想使用的分支中合并太容易。我根本不想在我的回购中修改。