我对svn有一个"问题",我不明白为什么有时当我合并两个分支时,它会在文件的mergeinfo属性上报告修改,而文本没有更改
这是正常行为吗
如果没有,问题出在哪里?
好吧,您确实合并了这两个分支。正确的工作符合预期。
你所做的是合并。尽管合并没有导致任何代码更改,这在合并中并不罕见,但Subversion仍然标记着合并已经完成。如果没有别的,标记您进行了合并——即使它没有导致任何更改,仍然是一个好主意。想象一下,一个发布即将发布,有人说"等等,没有人将该分支合并回主干中!我们将不得不推迟发布,直到我们完成",因为他们在svn:merge-info
记录中没有看到合并。
所以,是的,你看到的可以是正常行为。
现在,如果你的问题是"为什么我的更改没有被合并",那就另当别论了。Subversion通常在合并方面做得很好,但你必须确保你做了一些事情:
- 仅从项目的根目录合并,而不是从单个分支和文件合并。也有例外,但大多数时候你应该合并一个项目的分支。否则,你会到处都是
svn:merge-info
- 知道何时使用
--reintegrate
标志。您有一个分支"a"(在本例中可能包括trunk)。您从分支"a"生成支路"B"。- 当您从"A"合并到"B"时,不使用
--reintegrate
- 当您从"B"合并到"A"时,请记住使用
--reintegrate
。它改变了Subversion处理合并的方式
- 当您从"A"合并到"B"时,不使用
- Subversion不能很好地处理高度复杂的合并情况。如果你把一个分支做成一大堆分支,并在它们之间来回合并,那么Subversion就会一团糟。这就是我告诉人们不要做按功能分支业务的原因之一。它使得跟踪各种合并变得困难,并且可能导致Subversion出现合并问题。也许这是一个特性:由于Subversion不能很好地处理这些高度复杂的合并情况,所以您必须避免它们。我已经能够说服许多管理者放弃高度复杂的反模式分支方案,只需简单地声明Subversion无法处理它
- 如果您手动合并文件(许多开发人员更喜欢这样做:手动将分支中的更改应用回主干),请使用
svn merge --record-only
,这样Subversion就知道您已经完成了合并。当开发人员手动进行一些合并,而另一些则允许Subversion进行合并时,随之而来的是滑稽
因此,如果Subversion没有合并它应该有的更改,请确保您正确使用了--reintegrate
,并且没有出现上述其他问题。
svn:mergeinfo
属性用于跟踪有关在存储库中执行的合并的信息。
有关详细信息,请参阅SVNBook:"Mergeinfo and Previews"。