我以前雇主的团队使用 Git,它对我们很有效。我们并没有那么大(可能有 16 个左右,可能有 8 个真正活跃的提交者?),但我有你的问题的答案:
- N-Way 合并并不是很常见。我们提出了一些关于分支命名的约定,允许我们编写简化“发布工程”过程的脚本(我使用吓人的引号,因为我们没有发布工程师),人们会创建私有功能分支,但我们很少合并两个以上的分支时遇到问题(请参阅下一个)。
- (和#3)。我们在开发服务器上有一个中央存储库有三个原因:(a) 开发机器有 RAID5(更容错)和夜间备份(开发工作站不是夜间备份),(b) 生产版本是在开发服务器上构建的, (c) 有一个中央存储库简化的脚本。结果,N 路合并根本就没有发生。我们最接近 N 路的事情是当有人横向合并然后垂直合并时。
Git 对我们来说是一件非常棒的事情,因为它具有高度的灵活性。但是,我们确实必须建立一些约定(分支和标签名称、repo 位置、脚本等,流程),否则可能会有点混乱。一旦我们建立了约定,我们所拥有的灵活性就非常棒了。
更新:我们的约定基本上是这样的:
- 我们 NFS 服务器上的一个目录,其中包含所有中央存储库
- 我们有几个共享组件的项目,所以我们将它们分解为库,本质上,使用它们自己的存储库,而可交付的项目只是将它们作为 git 子模块包含在内。
- 上面有版本字符串和版本名称强加给我们,所以我们只是使用它们的变体作为分支名称
- 同样,对于标签,它们遵循流程指定的发布名称
- 可交付的项目包含一个属性文件,我将其读入 shell 脚本,这使我可以编写一个脚本来管理所有项目的发布过程,即使每个项目在过程上都有细微的变化——这些变化都被考虑在内在那些属性文件中
- 我编写了可以从任何标签重建可交付包的脚本
- 使用 git 允许我们使用 PAM 和/或普通用户权限(ssh 等)控制访问
- 还有其他约定更难放入项目符号列表中,例如何时应该发生合并。真的,我和另一个人有点像内部的“git 大师”,我们帮助每个人弄清楚如何使用分支以及何时合并。
- 让人们以小块的方式提交而不是在主分支中丢弃差异炸弹是一个挑战。一个人在一次提交中投入了大约两个星期的工作,我们最终不得不解开这一切。非常浪费时间,让所有人都感到沮丧。
- 与提交相关的信息丰富且详细的评论
随着您的团队经验丰富并学会相互合作,您还可以学到其他东西,但这足以让我们开始。
更新:到目前为止,任何关注此类事情的人都已经知道了,但是 Vincent Dreissen 使用 Git 编写了一个可靠且非常全面(但不详尽)的分支和发布工程。我强烈鼓励以他的过程为起点,因为有两个原因:
- 很多团队这样做或正在使用一些相近的变体(包括 Linux、Git 和许多其他 OSS 项目团队),这意味着这种方法已经过测试和调整,在大多数情况下都能成功。在此模型的约束下,您不太可能遇到尚未解决和解决的问题。
- 由于上述原因,几乎所有具有 Git 经验的工程师都会明白发生了什么。您不必编写有关发布过程基本性质的详细文档;您只需要记录特定于您的项目或团队的内容。