我在主干中有一个特性分支,并定期将主干中的更改合并到分支中,一切都运行正常。今天,我将分支合并回主干中,在创建分支后添加到主干中的任何文件都被标记为“树冲突”。将来有办法避免这种情况吗?
我认为他们没有被正确标记。
我在主干中有一个特性分支,并定期将主干中的更改合并到分支中,一切都运行正常。今天,我将分支合并回主干中,在创建分支后添加到主干中的任何文件都被标记为“树冲突”。将来有办法避免这种情况吗?
我认为他们没有被正确标记。
当前回答
这里发生的事情如下:在主干上创建一个新文件,然后将它合并到分支中。在合并提交中,这个文件也将在分支中创建。
当您将分支合并回中继中时,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分支重新整合
其他回答
我也遇到过类似的问题。唯一对我有用的是删除冲突的子目录:
svn delete --force ./SUB_DIR_NAME
然后从工作副本的另一个根目录中再次复制它们:
svn copy ROOT_DIR_NAME/SUB_DIR_NAME
然后做
svn cleanup
and
svn add *
你可能会得到最后一个警告,但忽略它们,最后
svn ci .
这可能是由于没有在所有地方使用相同版本的客户端造成的。
使用版本1.5的客户端和版本1.6的客户端使用同一个存储库会产生这种问题。(我自己也被咬了。)
直到今天,至少从3个月前开始,我在尝试将一个分支合并回主干(使用TortoiseSVN 1.11)时经常遇到数百个树冲突。顺便说一句,不管是否重制。 我从2004年的TortoiseSVN v1开始就一直在使用它,而且我一直在重新集成分支。我想最近一定发生了什么事吧?
所以今天我做了一个简单的实验,我发现了是什么导致了这些疯狂的冲突:
I forked off the trunk @393; I modified tens of files randomly, as well as creating new ones; I committed. Now @395 (a colleague forked off at 394 to perform his own stuff). Then I tried to reintegrate the branch back into the trunk, test only; following TortoiseSVN's recommendation in the wizard: "to merge all revisions (reintegrate), leave that box empty". To achieve this, I right-clicked onto the trunk folder, and chose "TortoiseSVN > Merge, from /path/to/branch", and I left the rev range empty, as advised on the dialog.
讨论:(见附件)
所有修改……的什么?我不知道客户肯定指的是“所有修订的目标!”(主干)”,因为,在重新集成该分支的过程中,我看到提到“合并修订1-HEAD”!我的天啊可怜的魔鬼,你会死在这里的。那个分支是@393出生的,看在上帝的份上,你看不懂它的出生证明吗?
解决方法:
与wiz的建议相反,请指定一个范围,涵盖…的所有修订。树枝的生命!因此,394头; 现在再次运行合并测试,并获得一支雪茄。()。
道德: 我不能理解为什么他们还没有修复这个错误,因为这是一个,对不起。 我应该花时间跟他们汇报。
这里发生的事情如下:在主干上创建一个新文件,然后将它合并到分支中。在合并提交中,这个文件也将在分支中创建。
当您将分支合并回中继中时,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分支重新整合
我通过Gary给出的链接找到了解决方案(我建议按照这种方式进行)。
通过汇总来解决向SVN客户端1.6提交工作目录的树冲突。X你可以使用:
svn resolve --accept working -R .
在哪里。目录冲突。
警告:“提交你的工作目录”意味着你的沙盒结构将是你要提交的,因此,例如,如果你从你的沙盒中删除了一些文件,它们也会从存储库中删除。这只适用于冲突的目录。
通过这种方式,我们建议SVN解决冲突(——resolve),从当前目录(.)开始递归地(-R)接受沙箱中的工作副本(——accept working)。
在TortoiseSVN中,右键单击“Resolved”,实际上解决了这个问题。