SVN修改文件上的svn:mergeinfo属性,没有任何变化

时间:2012-09-11 13:06:42

标签: svn mergeinfo

我对svn有一个“问题”我无法理解为什么有时当我合并两个分支时,它报告修改文件上的 mergeinfo 属性而不对文本进行任何更改。
这是正常的行为吗? 如果没有,那可能是什么问题?

2 个答案:

答案 0 :(得分:4)

嗯,你确实合并了这两个分支。对?按预期工作。

你做的是合并。即使合并没有导致任何代码更改,并且这对合并来说并不罕见,Subversion仍然标记合并已完成。如果没有别的,标记你进行了合并 - 即使它没有导致任何变化,仍然是一个好主意。想象一下发布一个发布,有人说“等等,没有人把那个分支合并回主干!我们必须推迟发布直到我们完成这个”,因为他们没有看到合并svn:merge-info记录。

所以,是的,你看到可以正常行为。

现在,如果您的问题是“为什么我的更改未合并”,那就是另一个问题。 Subversion通常在合并方面做得很好,但你必须确保做一些事情:

  • 仅从项目的根目录合并,而不是单个分支和文件。有例外,但大多数时候你应该合并项目的分支。否则,你最终会得到svn:merge-info
  • 知道何时使用--reintegrate标志。你有一个分支“A”(在这个例子中可能包括trunk)。您从分支“A”创建分支“B”
    • 从“A”合并到“B”时,不使用--reintegrate
    • 从“B”合并到“A”时,请记住使用--reintegrate。它改变了Subversion处理合并的方式。
  • Subversion不能很好地处理高度复杂的合并情况。如果你创建一个分支,一大堆分支,并在它们之间来回合并,Subversion将陷入困境。这是我告诉人们不要为每个功能业务执行分支的原因之一。它使跟踪各种合并变得困难,并且可能导致Subversion出现合并问题。也许这是一个特性:由于Subversion不能很好地处理这些高度复杂的合并情况,你必须避免它们。通过简单地说Subversion无法处理它,我已经能够通过高度复杂的反模式分支方案来谈论许多管理人员。
  • 如果您手动合并文件(并且许多开发人员更喜欢这样做:手动将分支中的更改应用回主干),请使用svn merge --record-only,以便Subversion知道您已完成合并。当开发人员手动进行一些合并而其他人允许Subversion进行合并时,就会出现欢闹。

因此,如果Subversion没有合并它应该具有的更改,请确保您正确使用--reintegrate,并且您没有遇到上述其他问题。

答案 1 :(得分:0)

svn:mergeinfo属性用于跟踪有关已在存储库中执行的合并的信息。

有关详细信息,请参阅SVNBook:"Mergeinfo and Previews"