4

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

4

2 回答 2

4

好吧,您确实合并了这两个分支。对?按预期工作。

您所做的是进行合并。即使合并没有导致任何代码更改,这在合并中并不少见,Subversion 仍然标记合并已完成。如果没有别的,标记你做了一个合并——即使它没有导致任何变化,仍然是一个好主意。想象一个发布出去,有人说“等等,没有人将该分支合并回主干!我们将不得不延迟发布,直到我们完成”,因为他们没有在svn:merge-info记录中看到合并。

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

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

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

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

于 2012-09-11T14:58:40.303 回答
0

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

有关详细信息,请参阅 SVNBook:“Mergeinfo 和预览”

于 2012-09-11T13:18:42.900 回答