【问题标题】:How to 'fix' a SVN branch/tree conflict?如何“修复”SVN 分支/树冲突?
【发布时间】:2010-12-08 04:35:50
【问题描述】:

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

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

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

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


[编辑] 更多信息

  1. 是的,'main' 和 'trunk' 是一回事。我已经澄清了我的问题
  2. 当您从功能分支合并回来时,您是否首先从主干进行另一次合并以中止最新的主干更改?” 是的。主干是最新的。并且 dev 分支具有来自主干的所有更改后备箱。
  3. “提交时一切都搞砸了”:我的意思是提交没问题,但是当我开始从主干/到主干进行合并时,SVN 就会抱怨“树冲突”。
  4. 我有 200 多个树冲突。所以我正在寻找的是“全部接受”命令

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

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

【问题讨论】:

  • @eldimo:当您将“main”合并到“dev”时,“main”分支是否与主干相同?还是“主干”中存在尚未发现的变化?
  • @dls:我认为他使用“main”和“trunk”这两个词来表示同一个分支。
  • @eldimo:需要一些细节来更清楚地说明: 1. 当您从功能分支合并回来时,您是否首先从主干进行另一次合并以中止最新的主干更改? 2. 提交时“一切都搞砸了”是什么意思?是否可以提供您在提交期间收到的错误消息?

标签: svn branch


【解决方案1】:

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

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

[编辑] 附加信息:


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

【讨论】:

    【解决方案2】:

    一般来说,SVN 的合并支持只能处理使用一个特性分支一次。也就是说,您在其中工作并将主干中的更改合并到其中,然后在完成后使用svn merge --reintegrate 将其合并回主干。

    之后,如果你想继续工作,你需要创建一个新的分支来工作。我认为如果您想保留相同的存储库路径,您可以删除旧的并在其位置创建一个新的,而不会丢失数据,但您可能需要先尝试测试存储库,以防svn:merge 信息获取搞砸了。

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

    此外,请注意将 svn cpsvn mv 用于分支和合并以外的任何用途 - 如果您这样做,则需要删除它们创建的虚假 svn:merge 属性(在分支和如果需要,在运行 reintegrate 之前运行 reintegrate ,否则它将失败将树冲突消息。

    总体而言,svn 的分支和合并与分布式 VCS 系列(git、hg、bzr、darcs 等)相比仍然很弱,但如果您遵循这些准则,它就可以完成工作。

    【讨论】:

    • 我们从 1.7 开始就遇到了这个问题,我在 SVN 红皮书实时文档中看到脚注,即 1.5 和 1.6 的这种“命中或未命中”功能有时会发现明显的问题并为您修复它。因此,在您将功能分支(或 CI 发布分支,在我们的例子中)合并回主干后,这似乎是唯一真正的解决方案,一旦出现树冲突,最好的办法就是删除原始分支并创建一个新分支。 .. 但是等等,这对 CI 不起作用!怎么办?!
    【解决方案3】:

    This answer 应该会有所帮助。

    另外,你用的是龟甲SVN客户端1.6.x吗?看来it has problems if the SVN server is less than 1.5.6...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多