为什么我在Subversion中发生树冲突?

我有一个我的树干function分支,并正在合并从我的树干变化到我的分支定期和一切工作正常。 今天,我去分支合并到树干,创build我的分支后,添加到我的树干的任何文件被标记为“树冲突”。 将来有没有办法避免这种情况?

我不认为这些被正确标记。

我发现解决scheme阅读加里给的链接(我build议按照这种方式)。

总结解决树型冲突提交您的工作目录与SVN客户端1.6.x您可以使用:

svn resolve --accept working -R . 

哪里. 是冲突的目录。

警告“提交你的工作目录”意味着你的沙盒结构将是你正在提交的沙盒结构,所以如果你从沙盒中删除了一些文件,它们也将被从存储库中删除。 这仅适用于冲突的目录。

这样,我们build议SVN解决冲突( --resolve ),从当前目录( . )开始recursion地( -R )接受沙箱内的工作拷贝( --accept working )。

在TortoiseSVN中,右键单击select“已解决”,实际上解决了这个问题。

Subversion 1.6添加了Tree Conflicts来覆盖目录级的冲突。 一个很好的例子就是当你在本地删除一个文件,然后一个更新尝试在文件上改变文本。 另一个是当你有一个颠覆重命名你正在编辑的文件,因为这是一个添加/删除操作。

CollabNet的Subversion博客上有一篇关于树冲突的文章。

我不知道这是否发生在你身上,但有时我select错误的目录进行合并,即使所有文件都显示完全正常,我也会得到这个错误。

例:

合并/ svn /项目/分支机构/一些分支/来源到/ svn /项目/树干—>树冲突

将/ svn / Project / branches / some-branch合并到/ svn / Project / trunk —> OK

这可能是一个愚蠢的错误,但并不总是显而易见的,因为你认为它更复杂。

根据我的经验,SVN创build树冲突WH​​ENEVER我删除一个文件夹。 似乎没有理由。

我是唯一一个在我的代码上工作 – >删除一个目录 – >提交 – >冲突!

我等不及要切换到Git 。

我应该澄清 – 我使用Subclipse 。 这可能是问题! 再次,我等不及要切换…

这里发生的事情如下:你在你的trunk上创build一个新文件,然后把它合并到你的分支中。 在合并提交中,这个文件也将在你的分支中创build。

当你将你的分支合并到主干时,SVN会再次尝试:在分支中创build一个文件,并尝试在合并提交中在主干中创build它,但它已经存在! 这造成了树冲突。

避免这种情况的方法是做一个特殊的合并, 重新整合 。 您可以使用--reintegrate开关实现此--reintegrate

你可以在文档中阅读这个: http : //svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate

然而,当你的分支合并到树干时,底层math是完全不同的。 你的function分支现在是重复树干更改和私人分支更改的混杂,所以没有简单的连续范围的修订复制。 通过指定–reintegrate选项,你可以让Subversion仔细地复制你的分支独有的改变。 (事实上​​,它通过比较最新的树干树与最新的树枝树来实现这一点:所得到的差异正是您的树枝改变!)

重新集成一个分支之后,强烈build议将其删除,否则每当在另一个方向上合并时:从树干到分支,您都会继续收到树冲突。 (与前面所述的原因完全相同)

还有一个办法,但我从来没有尝试过。 你可以在这篇文章中阅读: v1.6中的Subversion分支重新集成

这可能是由于不使用相同版本的客户端而造成的。

使用版本1.5客户端和版本1.6客户端对同一个存储库可能会造成这种问题。 (我只是咬自己。)

如果遇到由于没有编辑/删除/到达文件附近的任何地方而造成的树冲突,那么在合并命令中出现错误的可能性也很大。

可能发生的情况是,您之前已经合并了您当前合并中包含的一系列更改。 例如,在主干中,某人编辑了一个文件,然后重命名它。 如果你在第一次合并你包括编辑,然后在第二次合并包括编辑和重命名(本质上是删除),它也会给你一个树冲突。 这样做的原因是之前合并的编辑出现在你自己的,因此删除将不会自动执行。

这至less可以在1.4版本库上发生,我不确定在1.5中引入的合并跟踪是否有帮助。

我今天也遇到过这个问题,虽然我的问题可能跟你的问题没有关系。 在检查完文件列表之后,我意识到自己做了什么 – 我暂时从另一个程序集的一个程序集中使用了一个文件。 我做了很多改变,并不想孤儿SVN的历史,所以在我的分支,我已经从另一个程序集的文件夹移动文件。 这不是由SVN跟踪,所以它看起来像文件被删除,然后重新添加。 这最终导致树冲突。

我通过移回文件,提交, 然后合并我的分支解决了问题。 之后我把文件移回去了。 :)这似乎是伎俩。

我有一个类似的问题。 实际上,我唯一能做的就是删除冲突的子目录:

 svn delete --force ./SUB_DIR_NAME 

然后从工作副本中的另一个根目录中再次复制它们,其中包含:

 svn copy ROOT_DIR_NAME/SUB_DIR_NAME 

然后做

 svn cleanup 

 svn add * 

你可能会得到最后一个警告,但只是忽略它们,最后

 svn ci . 

我遇到了同样的问题,并通过使用这些指令重新进行合并来解决此问题。 基本上,它使用SVN的“2-URL合并”来更新trunk到你的分支的当前状态,而不会打扰那么多历史和树的冲突。 救了我从手动修复114树的冲突。

我不确定它是否保留了历史,也不是我想要的,但对我来说这是值得的。

我有时遇到的情况是:

假设你有一个主干,从中你创build了一个发布分支。 在trunk上进行了一些修改(尤其是创build“some-dir”目录)之后,您将创build一个function/修复分支,以便以后合并到发行分支中(因为修改足够小,function/修复对于发行很重要) 。

 trunk -- ... -- create "some-dir" -- ... \ \-feature/fix branch \- release branch 

如果您尝试直接将function/修复分支合并到发布分支中,则会发生树冲突(即使该function/修复分支中不存在该目录):

 svn status ! C some-dir > local missing or deleted or moved away, incoming file edit upon merge 

因此,在合并特性/修复分支之前,需要明确合并在主干上创build的“创build特性/修复”分支之前创build“some-dir”目录的提交。

我经常忘记,因为这是没有必要的混帐。