【问题标题】:Do frequent commits improve Mercurial's ability to automatically merge?频繁提交会提高 Mercurial 自动合并的能力吗?
【发布时间】:2011-12-08 18:09:42
【问题描述】:

经常提交(细粒度的变更集)以简化合并是否重要?

换个说法:如果我不经常提交,Mercurial 的更改记录会缺少数据吗?

【问题讨论】:

  • 您的问题缺少很多细节。 “不经常”和“容易”是什么意思?什么样的文件?提交的大小是多少?合并的频率如何?我倾向于说它根本不会改变Mercurial的能力,只会改变你自己解决冲突的能力,但这实际上取决于你不提供的各种参数。

标签: version-control mercurial merge


【解决方案1】:

这是一个微妙的区别,但让合并变得困难的不是提交的大小,而是你合并的频率。通常这些相互之间有很强的相关性,但并非总是如此。例如,mercurial 不在乎您是否在合并之间有 100 次提交或 1 次大提交进行完全相同的更改。由于您是从同一基线合并,因此无论如何它实际上将这 100 个提交合并在一起。您将遇到完全相同数量的必须手动解决的冲突。

人们建议频繁合并的原因是由于人为限制,而不是善变。对于人类来说,每天手动解决一个合并冲突比一次性解决 100 天的冲突要容易得多。此外,如果你早点做,你通常可以完全避免后来的冲突。

【讨论】:

  • 我听说 Mercurial 的合并工作比 SVN 更容易,因为它有一个更改列表,可以提供有关如何修改的更细粒度的信息。但是,如果,正如你所说,它将我的所有提交集中在一起,那么如何累积更改列表?当然 SVN 只是做,'1 big commit'...
  • 它使用更改列表来了解每个被合并的单独分支中的更改,因为它们都是最新的版本。当分支之间的代码行不同时,它会知道该行是在两个分支中更改还是仅在一个分支中更改。自该共同祖先以来发生了多少次提交与等式无关。所有 mercurial 需要知道的是哪个 branch 更改了代码行。 Subversion 的问题(尽管他们正在研究它)是它没有跟踪足够的信息来可靠地确定正确的共同祖先。
  • 您认为如果源代码控制机制能够跟踪每次提交中发生的所有更改,它会进一步提高其自动合并的能力吗?每次按键均匀。
  • Mercurial 已经为每个提交跟踪它,但它只需要这么大的粒度,因为您可以潜在地在每个提交之间进行分支或合并。如果你在合并之间走得更久,额外的细节就被浪费了。每次按键也是如此。除非您在每次按键之间合并,否则细节将被浪费。进一步改进自动合并的唯一方法是以某种方式考虑源代码的语法,因此如果它们在语义上相同,则不会将其视为冲突。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多