SVN在不做任何更改的情况下修改文件上的SVN:merginfo属性



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

好吧,您确实合并了这两个分支。正确的工作符合预期。

你所做的是合并。尽管合并没有导致任何代码更改,这在合并中并不罕见,但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,并且没有出现上述其他问题。

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

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

最新更新