是否可以调查导致 SVN 看到合并冲突的原因?

Is it possible to investigate what caused SVN to see a merge conflict?

很多时候,当将许多变更集合并到另一个分支时,我会遇到我根本没有预料到的合并冲突。其中一些情况下的行为是可疑的,我想阅读 SVN 的日志,告诉我他为什么决定看到冲突。我很怀疑目标分支上的文件被其他人修改了。

当您遇到冲突时,您可以在您的分支上使用 svn log somefile 来找出您所做的更改。您可以在要合并的另一个分支上使用 svn log svn://url/repo/branch/somefile 来查看该文件发生了什么变化。

根据此信息,您可以推断出 SVN 标记冲突的原因。冲突可能很小(树冲突和合并信息冲突通常很容易解决)。如果你们都更改了文本文件的同一行,那么 SVN 不仅会标记冲突,还会修改文件,以便您可以看到原始版本、您的更改以及它们的更改。

您可以使用合并工具(Beyond Compare、meld、TortoiseSVN merge)来解决冲突,方法是查看三个版本并选择要从每个版本中保留的行。

有了所有这些信息,您应该能够弄清楚标记冲突的原因。

您怀疑其他文件没有被修改,所以这次调查会让您确定。如果事实证明没有人提交这些文件,那么我怀疑问题出在 mergeinfo 上。如果您从其他来源合并,而另一个分支合并了其他来源,那么您将在 mergeinfo 属性中遇到冲突。这是与文件关联的元数据,它告诉 SVN 已经合并了哪些版本。

如果您至少一次没有解决冲突并提交更新的属性,那么下次合并时,您将再次看到同样的问题。