Version control 频繁的提交是否能改善Mercurial';自动合并的能力?

Version control 频繁的提交是否能改善Mercurial';自动合并的能力?,version-control,mercurial,merge,Version Control,Mercurial,Merge,经常提交(细粒度变更集)以简化合并是否重要 换言之:如果我不经常提交,Mercurial的更改记录是否会缺少数据?这是一个微妙的区别,但导致合并困难的不是提交的大小,而是合并的频率。通常情况下,它们之间有很强的相关性,但并不总是如此。例如,mercurial不在乎在合并之间有100次提交,还是有1次大提交进行完全相同的更改。由于您是从同一基线进行合并,因此无论如何,它都会有效地将这100次提交合并在一起。您将拥有与必须手动解决的冲突数量完全相同的冲突 人们建议频繁合并的原因是人为的限制,而不是m

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


换言之:如果我不经常提交,Mercurial的更改记录是否会缺少数据?

这是一个微妙的区别,但导致合并困难的不是提交的大小,而是合并的频率。通常情况下,它们之间有很强的相关性,但并不总是如此。例如,mercurial不在乎在合并之间有100次提交,还是有1次大提交进行完全相同的更改。由于您是从同一基线进行合并,因此无论如何,它都会有效地将这100次提交合并在一起。您将拥有与必须手动解决的冲突数量完全相同的冲突


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

你的问题缺乏很多细节。“不经常”和“容易”是什么意思?什么样的文件?提交的大小是多少?合并的频率有多高?我倾向于说,它根本不会改变Mercurial的能力,只会改变你自己解决冲突的能力,但这实际上取决于你没有提供的各种参数。我读到Mercurial比SVN更容易合并,因为它有一个更改列表,可以提供关于如何修改内容的更细粒度信息。但是,如你所说,如果它将我所有的承诺都集中在一起,那么如何吸收变更列表呢?当然,SVN只是执行“1个大提交”……它使用变更列表来了解自最新版本(这两个版本都是通用的)被合并的每个分支中发生了什么变化。当一行代码在两个分支之间不同时,它可以知道该行是在两个分支中更改的,还是仅在一个分支中更改的。自该共同祖先以来发生了多少次提交与等式无关。mercurial只需要知道哪个分支更改了代码行。Subversion的问题(尽管他们正在研究)是它没有跟踪足够的信息来可靠地确定正确的共同祖先。您认为如果源代码管理机制跟踪每次提交中发生的所有更改,它是否会进一步提高自动合并的能力?Mercurial已经在每次提交时跟踪它,但它只需要这么多的粒度,因为您可以在每次提交之间进行分支或合并。如果在合并之间进行更长的时间,则会浪费额外的细节。每个按键都是如此。除非在每个按键之间合并,否则细节将被浪费。进一步改进自动合并的唯一方法是以某种方式将源代码的语法考虑在内,这样,如果它们在语义上相同,就不会将它们视为冲突。