svn从主干合并

svn从主干合并,svn,merge,trunk,mergeinfo,Svn,Merge,Trunk,Mergeinfo,有时,当我从主干合并一个项目时,一些文件会显示为已修改,即需要在合并时签入,即使我的版本和主干之间没有差异。一个比较显示他们是完全相同的,即使空白也没有什么不同 这怎么可能?它与mergeinfo有关吗? 考虑到没有更改,不将这些文件签入我的分支有什么副作用。。。 当我尝试合并回主干时会有麻烦吗? 您可能会看到一个报告,其中一个文件在合并过程中被更新,尽管它没有被更新。这可能是由于更新了该文件或目录的svn:mergeinfo属性 通常,只有项目的根目录才应该有svn:mergeinfo属性,因

有时,当我从主干合并一个项目时,一些文件会显示为已修改,即需要在合并时签入,即使我的版本和主干之间没有差异。一个比较显示他们是完全相同的,即使空白也没有什么不同

这怎么可能?它与mergeinfo有关吗? 考虑到没有更改,不将这些文件签入我的分支有什么副作用。。。 当我尝试合并回主干时会有麻烦吗?
您可能会看到一个报告,其中一个文件在合并过程中被更新,尽管它没有被更新。这可能是由于更新了该文件或目录的svn:mergeinfo属性

通常,只有项目的根目录才应该有svn:mergeinfo属性,因为您几乎应该总是从项目的根目录合并。然而,一些开发人员有合并单个文件和目录的习惯,因为他们知道这些文件和目录已经更改。当开发人员执行此操作时,Subversion将开始使用其各自的svn:mergeinfo属性跟踪这些文件和目录上的合并

现在,当您进行合并时,所有这些svn:mergeinfo属性都必须更新,即使文件本身没有更改。毕竟,Subversion仍然必须跟踪您进行了特定的合并,即使它不会影响该文件,以便能够跟踪已经合并和未合并的内容

如果svn:mergeinfo是问题所在,请不要还原该文件。否则,Subversion将一次又一次地重复无用的合并。您可以尝试从该特定文件的主干和分支中删除svn:mergeinfo,但请注意不要忘记合并的内容

在Subversion中合并并不像它应该的那样干净。Subversion识别两种不同类型的合并:

将工作从主干合并到特定分支的常规合并。 重新整合将分支上的工作合并回主干。 重新整合的概念是必要的,因为您的分支包含您从主干合并到分支的内容,并且处理不在主干中的分支。你不希望你已经合并到分支中的东西再次被放在主干中,所以重新整合功能只会将分支上的工作复制回主干,实际上这是一个双向合并。完成后,您必须非常小心再次合并回该分支

为什么?:该分支上的所有更改都已合并到主干中,并创建了一个新的主干修订。如果执行新的Subversion主干到分支合并,Subversion将看到合并创建的新修订,并尝试将新修订包含的所有更改重新合并到分支中

要处理此问题,请使用merge的-record only选项将新修订从主干合并回分支。现在,当您从主干合并回分支时,合并将不考虑新版本:

$ svn co $REPO/trunk
$ cd trunk
$ svn merge --reintegrate $REPO/branch/1.2    #Two-way Reintegrating branch 1.2 to trunk
$ svn commit -m"Reintegrate 1.2"
commit revision 12345
合并创建了版本12345。为了使我们能够重复使用分支机构,必须仅将其记录回分支机构:

$ svn co $REPO/branch/1.2
$ cd 1.2
$ svn merge -c 12345 --record-only $REPO/trunk
$ svn commit -m"Mark Reintegrate Merge as completed"
扼要重述 这怎么可能?它与mergeinfo有关吗? 是的。您可以从主干和分支中删除该文件中的svn:mergeinfo信息。然而,你需要小心。或者,你可以忽略它,现在你知道它是好的

考虑到没有更改,不将这些文件签入我的分支有什么副作用。。。 Subversion只需在下次与每个合并进行合并时再次尝试合并,时间会越来越长,因为每次都必须合并更多的修订

当我尝试合并回主干时会有麻烦吗? 从分支合并到主干时,必须使用-reintegrate参数防止分支将更改重新合并回主干。重新整合合并仅使用双向合并。这基本上使主干与分支匹配


一旦完成此操作,您必须小心从主干到分支的新合并。

您可能会看到一个报告,其中一个文件在合并过程中被更新,即使它没有被更新。这可能是由于更新了该文件或目录的svn:mergeinfo属性

通常,只有项目的根目录才应该有svn:mergeinfo属性,因为您几乎应该总是从项目的根目录合并。然而,一些开发人员有合并单个文件和目录的习惯,因为他们知道这些文件和目录已经更改。当开发人员执行此操作时,Subversion将开始使用其各自的svn:mergeinfo属性跟踪这些文件和目录上的合并

现在,当您进行合并时,所有这些svn:mergeinfo属性都必须更新,即使文件本身没有更改。毕竟,Subversion仍然必须跟踪您是否进行了特定的合并,即使它不会影响 在文件中,以便能够跟踪已合并和未合并的内容

如果svn:mergeinfo是问题所在,请不要还原该文件。否则,Subversion将一次又一次地重复无用的合并。您可以尝试从该特定文件的主干和分支中删除svn:mergeinfo,但请注意不要忘记合并的内容

在Subversion中合并并不像它应该的那样干净。Subversion识别两种不同类型的合并:

将工作从主干合并到特定分支的常规合并。 重新整合将分支上的工作合并回主干。 重新整合的概念是必要的,因为您的分支包含您从主干合并到分支的内容,并且处理不在主干中的分支。你不希望你已经合并到分支中的东西再次被放在主干中,所以重新整合功能只会将分支上的工作复制回主干,实际上这是一个双向合并。完成后,您必须非常小心再次合并回该分支

为什么?:该分支上的所有更改都已合并到主干中,并创建了一个新的主干修订。如果执行新的Subversion主干到分支合并,Subversion将看到合并创建的新修订,并尝试将新修订包含的所有更改重新合并到分支中

要处理此问题,请使用merge的-record only选项将新修订从主干合并回分支。现在,当您从主干合并回分支时,合并将不考虑新版本:

$ svn co $REPO/trunk
$ cd trunk
$ svn merge --reintegrate $REPO/branch/1.2    #Two-way Reintegrating branch 1.2 to trunk
$ svn commit -m"Reintegrate 1.2"
commit revision 12345
合并创建了版本12345。为了使我们能够重复使用分支机构,必须仅将其记录回分支机构:

$ svn co $REPO/branch/1.2
$ cd 1.2
$ svn merge -c 12345 --record-only $REPO/trunk
$ svn commit -m"Mark Reintegrate Merge as completed"
扼要重述 这怎么可能?它与mergeinfo有关吗? 是的。您可以从主干和分支中删除该文件中的svn:mergeinfo信息。然而,你需要小心。或者,你可以忽略它,现在你知道它是好的

考虑到没有更改,不将这些文件签入我的分支有什么副作用。。。 Subversion只需在下次与每个合并进行合并时再次尝试合并,时间会越来越长,因为每次都必须合并更多的修订

当我尝试合并回主干时会有麻烦吗? 从分支合并到主干时,必须使用-reintegrate参数防止分支将更改重新合并回主干。重新整合合并仅使用双向合并。这基本上使主干与分支匹配

完成后,您必须小心从主干到分支的新合并。

David在与Merge Hell相关的问题的大多数方面都是正确的。但我想在一些具体细节上透露一些额外的信息

当您执行普通差异时,您只能比较内容,如果在/主要是GUI/diff查看器中忽略此更改,则某些差异可能会由于设置而错过某些更改-f.e EOL样式更改 存储库中的每个对象不仅可以包含内容,还可以作为读取有关svn:properties的非内容数据的容器,svn:mergeinfo只是一个最明显的示例,但每个文件都可以包含更多自定义属性,这些属性也在合并过程中被合并、替换、更新。提交前合并后修改的工作副本中的svn diff将显示WC中的所有更改,两个节点之间的svn diff mergeset和合并源也将显示所有这些详细信息-请尝试 当您在嵌套树上执行子树只合并一部分,然后执行完全合并时,即您分支了/A/B/C-file,由于某些原因,只合并C-file,然后重复/A/B/C-file,最后一次合并删除C-file中包含的mergeinfo 大卫在大多数方面都是正确的,并不是所有方面的麻烦,有关合并地狱。但我想在一些具体细节上透露一些额外的信息

当您执行普通差异时,您只能比较内容,如果在/主要是GUI/diff查看器中忽略此更改,则某些差异可能会由于设置而错过某些更改-f.e EOL样式更改 存储库中的每个对象不仅可以包含内容,还可以作为读取有关svn:properties的非内容数据的容器,svn:mergeinfo只是一个最明显的示例,但每个文件都可以包含更多自定义属性,这些属性也在合并过程中被合并、替换、更新。提交前合并后修改的工作副本中的svn diff将显示WC中的所有更改,两个节点之间的svn diff mergeset和合并源也将显示所有这些详细信息-请尝试 当您在嵌套树上执行子树只合并一部分,然后执行完全合并时,即您分支了/A/B/C-file,由于某些原因,只合并C-file,然后重复/A/B/C-file,最后一次合并删除C-file中包含的mergeinfo 值得注意的是,1.8不需要重新集成,因为Subversion会自动确定合并的类型
为你。还值得注意的是,较旧版本的Subversion可能已经在各种文件上创建了svn:mergeinfo属性,而较新版本更容易避免这种情况,尽管David所说的合并特定文件和反向合并仍然会造成mergeinfo属性的混乱。因此,如果您不使用1.8并且正在进行合并,您可能需要升级。@Ben-最新Subversion在子树的情况下,文件中也可能有mergeinfomerge@Lazy是的,David提到了这一点,这就是我在说合并特定文件时的意思。1.7/1.8仍然比1.6好得多。值得注意的是,1.8不需要重新整合,因为Subversion会自动为您确定合并的类型。还值得注意的是,较旧版本的Subversion可能已经在各种文件上创建了svn:mergeinfo属性,而较新版本更容易避免这种情况,尽管David所说的合并特定文件和反向合并仍然会造成mergeinfo属性的混乱。因此,如果您不使用1.8并且正在进行合并,您可能需要升级。@Ben-最新Subversion在子树的情况下,文件中也可能有mergeinfomerge@Lazy是的,David提到了这一点,这就是我在说合并特定文件时的意思。1.7/1.8仍然比1.6好得多。