我有一个 svn 的“问题”,我不明白为什么有时当我合并两个分支时,它会报告修改文件上的mergeinfo属性而文本没有更改。
这是正常行为吗?
如果不是,可能是什么问题?
问问题
8241 次
2 回答
4
好吧,您确实合并了这两个分支。对?按预期工作。
您所做的是进行合并。即使合并没有导致任何代码更改,这在合并中并不少见,Subversion 仍然标记合并已完成。如果没有别的,标记你做了一个合并——即使它没有导致任何变化,仍然是一个好主意。想象一个发布出去,有人说“等等,没有人将该分支合并回主干!我们将不得不延迟发布,直到我们完成”,因为他们没有在svn:merge-info
记录中看到合并。
所以,是的,你看到的可能是正常行为。
现在,如果您的问题是“为什么我的更改没有被合并”,那就是另一个问题了。Subversion 通常在合并方面做得很好,但你必须确保你做了一些事情:
- 仅从项目的根目录合并,而不是单个分支和文件。有例外,但大多数时候您应该合并项目的分支。否则,你最终会
svn:merge-info
到处都是。 - 知道何时使用
--reintegrate
标志。您有一个分支“A”(在此示例中可能包括主干)。你从分支 "A"创建一个分支 "B " 。- 当你从“A”合并到“B”时,你不使用
--reintegrate
- 当你从“B”合并到“A”时,记得使用
--reintegrate
. 它改变了 Subversion 处理合并的方式。
- 当你从“A”合并到“B”时,你不使用
- 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 回答