我在主干中有一个特性分支,并定期将主干中的更改合并到分支中,一切都运行正常。今天,我将分支合并回主干中,在创建分支后添加到主干中的任何文件都被标记为“树冲突”。将来有办法避免这种情况吗?
我认为他们没有被正确标记。
我在主干中有一个特性分支,并定期将主干中的更改合并到分支中,一切都运行正常。今天,我将分支合并回主干中,在创建分支后添加到主干中的任何文件都被标记为“树冲突”。将来有办法避免这种情况吗?
我认为他们没有被正确标记。
当前回答
我遇到了同样的问题,并通过使用这些指令重新做合并来解决它。基本上,它使用SVN的“2-URL合并”将主干更新到分支的当前状态,而不用担心历史和树冲突。让我不用手动修复114棵树的冲突。
我不确定它是否像人们希望的那样保存了历史,但对我来说是值得的。
其他回答
我也遇到过类似的问题。唯一对我有用的是删除冲突的子目录:
svn delete --force ./SUB_DIR_NAME
然后从工作副本的另一个根目录中再次复制它们:
svn copy ROOT_DIR_NAME/SUB_DIR_NAME
然后做
svn cleanup
and
svn add *
你可能会得到最后一个警告,但忽略它们,最后
svn ci .
这里发生的事情如下:在主干上创建一个新文件,然后将它合并到分支中。在合并提交中,这个文件也将在分支中创建。
当您将分支合并回中继中时,SVN再次尝试做同样的事情:它看到分支中创建了一个文件,并试图在合并提交中在中继中创建它,但它已经存在!这就产生了树冲突。
避免这种情况的方法,是做一个特殊的合并,重新整合。您可以使用——reintegrate开关来实现这一点。
你可以在文档中读到: http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate
When merging your branch back to the trunk, however, the underlying mathematics are quite different. Your feature branch is now a mishmash of both duplicated trunk changes and private branch changes, so there's no simple contiguous range of revisions to copy over. By specifying the --reintegrate option, you're asking Subversion to carefully replicate only those changes unique to your branch. (And in fact, it does this by comparing the latest trunk tree with the latest branch tree: the resulting difference is exactly your branch changes!)
在重新集成一个分支之后,非常明智的做法是将其移除,否则当您从另一个方向(从主干到分支)合并时,您将继续得到树冲突。(原因与之前描述的完全相同。)
其实也有办法,但我从没试过。你可以在这篇文章中阅读:v1.6中的Subversion分支重新整合
I came across this problem today as well, though my particular issue probably isn't related to yours. After inspecting the list of files, I realized what I had done -- I had temporarily been using a file in one assembly from another assembly. I have made lots of changes to it and didn't want to orphan the SVN history, so in my branch I had moved the file over from the other assembly's folder. This isn't tracked by SVN, so it just looks like the file is deleted and then re-added. This ends up causing a tree conflict.
我通过将文件移回,提交,然后合并我的分支来解决这个问题。然后我把文件移了回来。:)这似乎奏效了。
我遇到了同样的问题,并通过使用这些指令重新做合并来解决它。基本上,它使用SVN的“2-URL合并”将主干更新到分支的当前状态,而不用担心历史和树冲突。让我不用手动修复114棵树的冲突。
我不确定它是否像人们希望的那样保存了历史,但对我来说是值得的。
Subversion 1.6添加了树冲突来覆盖目录级别的冲突。一个很好的例子是,当您在本地删除一个文件时,更新会尝试对该文件进行文本更改。另一种情况是,当您对正在编辑的文件进行subversion重命名时,因为这是一个添加/删除操作。
CollabNet的Subversion博客上有一篇关于树冲突的很棒的文章。