3

我正在一个由 5 名开发人员组成的团队中开展一个更大的项目,我们使用 Mercurial 作为 VCS。

我们都倾向于在本地工作和提交,直到我们认为可以推送一个功能/修复,然后合并并推送我们的更改。我通常每天推送(并因此与远程合并)几次,其他大多数人也是如此。

这通常会导致“合并混乱”:多个开发人员拉取、合并和推送变更集。生成的历史不是很漂亮,有时看起来像这样:

合并杂波

我怀疑人们是否可以在混乱中分离出特定的变更集,或者甚至弄清楚它是如何/以何种方式影响的(至少我对前景感到不寒而栗)。

如果合并是必要的,我想上面的历史会很好,但是大多数这些合并可以通过重新定位(安全地)避免,因为每个开发人员都在处理与其他任务或多或少隔离的特定任务。

实际问题:

  • VCS 历史看起来像上面这样“正常”吗?应该避免这样的历史吗?
  • 如何避免这样的历史?

关于“避免”部分:由于我们处理的任务有些孤立(后端、前端、Web),我们可以将它们拆分为分支,甚至可能是单独的存储库。不过,这些项目并不是完全独立的,所以我认为分成几个 repos 会带来更多的痛苦而不是收获。我不确定命名分支是否会更好,因为从那时起我们经常在那里有 3 个以上的分支,这些分支必须经常合并到主干中。

变基似乎是一种选择,特别是因为许多变更集彼此完全独立——但这将决定是否变基的负担交给开发人员。可能会有冲突,然后一个人毕竟必须合并。这很可能会导致人们一开始就没有变基,所以我们又回到了现在的状态。

现在我想不出另一种让历史看起来更干净的选择。现在可能不是什么大问题,但是当突然有 20 个开发人员时会发生什么?如果历史是一个大迷宫,那它的意义何在?如果有几十个交叉点,我认为很难跟踪变更集的影响。

4

3 回答 3

3

您所看到的或多或少是,当您有多个开发人员都在同一个存储库上工作时应该发生什么。

唯一真正的解决方法是重写历史,特别是如果你已经进行了本地提交。你需要拉,变基,然后推。

编辑:关于你的修订图有一件事让我印象深刻。有很多分支从这些分支分支并在这些子分支之间合并。看起来,嗯,很混乱。如果您的分支和合并像看起来那样混乱,那么您的团队可能会从更结构化的分支和合并方法中受益。

启发git-flow“成功的 Git 分支模型”也可以应用于 Mercurial 存储库。 hgflow是一个有助于实现它的扩展。

如果这看起来结构太多,那么您总能找到另一种前进的方式。但是,可能值得投入一些想法并引起您团队的注意。

另请参阅:commit-pull-merge-push 或 pull-merge-commit-push?

于 2012-09-18T17:33:11.820 回答
3

是的,使用rebase并避免Noisy合并它的安全(自 hg-2.1 起)和简单的.

你是一个由 5 名开发人员组成的小团队。上述所有合并很可能发生,因为“我在部分 X 上做了一些提交,而 Bob 在部分 Y 上工作”。这些合并不会带来任何有用的信息,也没有人关心独立使用你的微分支

当分支具有良好的语义时(例如:用于修复错误的稳定分支、用于新功能的默认分支)或当更改需要很长时间才能成熟并值得与其他更改合并时,将分支保留在历史记录中很有用。其他合并对我来说只是噪音。

自从引入阶段(Mercurial 2.1)以来,使用 rebase 是非常安全的,因为(默认情况下)Mercurial 将只允许您对本地变更集进行 rebase。您的新工作流程可能如下所示:

  • 克隆
  • 黑客
  • 犯罪
  • 黑客
  • 犯罪
  • 变基
  • 测试
于 2012-09-20T10:00:24.093 回答
1

您正在查看太多抽象级别,然后抱怨它看起来太复杂。有一个选项可以将您的视图限制在分支的主线中。用它。仅在您有特定需求时才深入研究合并的分支。拥有可用且不需要的历史记录比使用变基销毁它要好。

于 2012-09-18T18:12:01.860 回答