SVN修改文件的SVN:mergeinfo属性,不做任何更改

SVN修改文件的SVN:mergeinfo属性,不做任何更改,svn,mergeinfo,Svn,Mergeinfo,我对svn有一个“问题”,我不明白为什么有时当我合并两个分支时,它会报告对文件的mergeinfo属性进行修改,而对文本没有任何更改。 这是正常行为吗? 如果没有,会出现什么问题?svn:mergeinfo属性用于跟踪存储库中已执行的合并信息 有关详细信息,请参阅SVN手册:。您确实合并了这两个分支。对吗?一切正常 你做的是合并。即使合并没有导致任何代码更改,这在合并中并不少见,Subversion仍然标记合并已经完成。如果没有别的,标记您进行了合并——即使它没有导致任何更改,仍然是一个好主意。

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

如果没有,会出现什么问题?

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


有关详细信息,请参阅SVN手册:。

您确实合并了这两个分支。对吗?一切正常

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

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

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

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

因此,如果Subversion没有在其应有的更改中进行合并,请确保您正确地使用了
--重新集成
,并且没有出现上述其他问题。

是的,我读过,但为什么它会跟踪不受合并影响的文件上的信息?是的,但是,例如,如果在我的N修订版中,我更改了分支B1中的文件Controller.java,然后在主干上重新整合该文件,为什么在提交之前,我在主干的根目录和configuration.xml中更改了mergeinfo属性(例如)??这听起来很奇怪…你只是合并了一个文件,还是合并了根目录下的所有文件,而这是唯一合并的文件?如果您从项目的根目录合并,并且这是唯一合并的文件。项目的根目录获取
svn:mergeinfo
configuration.xml
会发生更改,因为有人仅对该文件执行了
svn合并
,现在它也必须跟踪合并。因此,
svn:mergeinfo
也会更新。这就是为什么我说总是从项目的根合并。否则,您将得到数千个文件——每个文件都有自己的
svn:mergeinfo
。好的,但是没有人接触
configuration.xml
,这就是问题所在,如果没有对其进行任何修改,svn将设置
mergeinfo
属性…如果该文件上有
svn:mergeinfo
属性,这意味着有人对该文件进行了合并,并且仅在遥远的过去对该文件进行了合并
svn:mergeinfo
设置在合并的根目录上(这就是我陈述第一点的原因)。一旦在文件或目录上设置了
svn:mergeinfo
,它将在每次合并时更新,即使它不在树的根目录上。看见您可以删除
configuration.xml
上的
svn:mergeinfo
属性以停止合并跟踪。然后,它不会更新它。找到了。这将解释有关Subversion中合并跟踪的所有内容,以及为什么
configuration.xml
文件上有一个
svn:mergeinfo
属性。