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

时间:2009-10-20 00:30:09

标签: svn branch

我接手了一个软件项目并决定使用Tortoise SVN将所有内容置于SVN(Assembla)之下。行李箱在ROOT下。因此主干包含整个应用程序(我标记为1.0)。对于我的第一个重要功能,我创建了一个名为“dev”的功能分支。

我可以将trunk分支中的更改合并到dev分支中而不会出现问题(因为我正在修复小错误)。一旦我的功能完成,我就会合并回主干分支。到目前为止,一切都在发挥作用。 ROOT下的新代码正确显示了新功能。但后来我做了一个提交(合并的结果),现在每次我尝试从root或dev分支进行合并时,SVN都抱怨许多文件的“树冲突”。甚至是自合并以来我没有触及过的文件。我试图解决冲突,但没有成功。

我是唯一的开发人员,因此我并不关心存储库的重大更改。但是如果可能的话,我仍然希望保留所有文件的历史记录。

解决此问题的最佳方法是什么?有没有办法可以将ROOT主干中的所有最新文件标记为文件的“明确”版本?


[编辑]更多信息

  1. 是的,'主'和'主干'是一回事。我澄清了我的问题
  2. 当您从功能分支合并回来时,您是否首先从主干进行另一次合并以获取最新的主干更改?“是的。主干是最新的。并且开发分支具有所有更改来自中继线。
  3. “一切都搞砸了”:我的意思是提交很好,但是当我开始从主干/主干合并时,SVN抱怨'树冲突'。
  4. 我有超过200个树冲突。所以我正在寻找的是“接受所有”命令

  5. [编辑] elhoim解决方案没有解决我的问题。但是,他对SVN版本问题是正确的。目前(2009-10-28),Assembla正在使用SVN v1.5.1,而我的tortoiseSVN则是v1.6。所以这就是我遇到这么多树冲突的原因。我尝试使用elhoim的链接提供的解决方案并且它不起作用(我在尝试HEAD-to-HEAD合并之前多次尝试了一堆合并。有些文件因此而没有转移到根分支)。

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

3 个答案:

答案 0 :(得分:11)

This answer应该有帮助。

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

答案 1 :(得分:6)

在尝试合并回主干之前,似乎在主干上的目录结构级别进行的某些更改未被吸收到dev分支中。在您的情况下,这可能会导致树冲突。

我发现SVN本书的这一部分非常有用,它包含解决像你这样的情况的方法。希望这可以帮助。 http://svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.html

[编辑]附加信息:


您是否已经在实际覆盖/解决冲突版本的工作空间中运行 svn已解决? 在您有问题的工作区(实际执行合并的那个工作区)上可能仍有标记为“冲突”的文件/文件夹 - 所以一旦您查看了这些并手动解决了冲突,您就可以运行svn“已解决”。我使用subversion命令行客户端进行合并 - 但我已经验证,此选项也可用于乌龟。这应该打破冲突状态,让你继续前进。好运。

答案 2 :(得分:5)

通常,SVN的合并支持只能使用一次来处理。也就是说,你在它中工作并将更改从trunk合并到它中,然后在你完成时使用svn merge --reintegrate将它合并回trunk。

之后,如果你想继续工作,你需要创建一个新的分支来处理。如果你想保留相同的存储库路径,我认为你可以删除旧版本并在其中创建一个新版本而不会丢失数据,但是如果svn:merge,你可能想先尝试使用测试版本。信息变得棘手。

这并不完美。有关详细信息,请参阅当前合并语义的时间this post

另外,请注意svn cpsvn mv用于分支和合并以外的目的 - 如果您这样做,则需要删除虚假的svn:merge属性在运行重新整合之前创建(在分支和主干上,如果需要)或者它将失败将发生树冲突消息。

总的来说,与分布式VCS系列(git,hg,bzr,darcs等)相比,svn的分支和合并仍然相当薄弱,但是如果你遵循这些指导原则就可以完成这项工作。