代码之家  ›  专栏  ›  技术社区  ›  Thierry Roy

如何“修复”SVN分支/树冲突?

  •  20
  • Thierry Roy  · 技术社区  · 15 年前

    我接手了一个软件项目,决定把所有东西都放到SVN下 Assembla )使用Tortoise SVN。树干在树根下。所以主干包含了整个应用程序(我标记为1.0)。对于我的第一个大功能,我创建了一个名为“dev”的功能分支。

    我可以毫无问题地将主干分支中的更改合并到dev分支中(就像我在做小错误修复一样)。当我的特性完成后,我做了一个合并回主干分支。到目前为止,一切都很顺利。根下的新代码正确地显示了新特性。但后来我提交了(合并结果的提交),现在每当我尝试从根目录或dev分支进行合并时,SVN都会抱怨许多文件上的“树冲突”。即使是合并后我没有接触的文件。我试图解决冲突,但没有成功。

    我是唯一的开发人员,所以我不关心对存储库的重大更改。但如果可能的话,我还是想保留所有文件的历史记录。

    解决这个问题的最佳方法是什么?有没有一种方法可以将根主干中的所有最新文件标记为该文件的“确定”版本?


    [编辑]更多信息

    1. 是的,“主”和“后备箱”是一样的。我已经澄清了我的问题
    2. 当您从功能分支合并回来时,您是否首先从主干进行了另一次合并,以中止最新的主干更改?”对。后备箱是最新的。dev分支拥有来自主干的所有更改。
    3. “承诺的一切都搞砸了”:我的意思是承诺很好,但当我开始从主干/到主干进行合并时,SVN就抱怨“树冲突”。
    4. 我有超过200个树冲突。所以我要找的是“全部接受”命令

    [编辑]Elhoim解决方案没有解决我的问题。但是,他对SVN版本问题的看法是正确的。目前(2009-10-28),assemble使用的是SVN v1.5.1,而我的TortoissVn是v1.6。所以这就是为什么我有这么多的树冲突。我尝试使用Elhoim的链接提供的解决方案,但它不起作用(在尝试头对头合并之前,我尝试了多次合并。因为这个原因,一些文件没有转移到根分支)。

    看到头对头合并仍然不起作用,我决定简单地删除分支文件夹中的所有“.svn”文件,将这些文件复制到根文件夹中并进行提交。

    3 回复  |  直到 15 年前
        1
  •  11
  •   Community CDub    8 年前

    This answer 应该帮助。

    否则,您是否使用Tortoise SVN客户端1.6.x?似乎 it has problems if the SVN server is less than 1.5.6

        2
  •  6
  •   Critical Skill    15 年前

    似乎在尝试合并回主干之前,主干上目录结构级别所做的一些更改没有被吸收到dev分支中。在您的案例中,这可能导致了树冲突。

    我发现SVN手册的这一部分非常有用,它包含解决类似您的情况的方法。希望这有帮助。 http://svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.html

    [编辑]附加信息:


    你已经跑了吗 奇异值分解 在实际覆盖/解决冲突版本的工作区上? 在有问题的工作区(您实际执行合并的工作区)上,可能仍有标记为“冲突”的文件/文件夹-因此,一旦您查看了这些文件/文件夹并手动解决了冲突,就可以运行svn“已解决”。我使用Subversion命令行客户机进行合并,但是我已经验证了,这个选项在Tortoise上也可用。这将消除冲突状态,让您继续前进。古德拉克。

        3
  •  5
  •   Walter Mundt    15 年前

    通常,SVN的合并支持只能使用功能分支来处理 一旦 . 也就是说,您在其中工作并将主干中的更改合并到其中,然后使用 svn merge --reintegrate 当你完成的时候把它合并回主干。

    之后,如果您想继续工作,您需要创建一个新的分支来进行工作。我认为,如果您希望保持相同的存储库路径,可以删除旧的存储库并在其位置生成新的存储库,而不会丢失数据,但您可能希望首先尝试测试repo,以防 svn:merge 信息越来越混乱。

    这并不完美。见 this post 从什么时候开始引入当前的合并语义来获取更详细的信息。

    此外,注意使用 svn cp svn mv 除了分支和合并之外的其他用途——如果这样做,则需要删除伪 Svn:合并 它们创建的属性(在分支和主干上,如果需要的话)在运行重新集成之前,否则将失败,从而导致树型冲突消息。

    总的来说,与分布式VCS系列(Git、Hg、BZR、DARC等)相比,SVN的分支和合并仍然相当薄弱,但是如果您遵循这些指导原则,它就可以完成这项工作。