2

我已经阅读了很多关于此的内容,但无法弄清楚问题所在,这很奇怪。我为服务器使用 1.7 版,为客户端使用最新的龟版(1.7)。这是场景:

  1. 我创建了一个父分支,然后从中创建了 1 个子分支。所以,PARENT_BRANCH -> CHILD_BRANCH
  2. 在 CHILD_BRANCH 中添加一个新目录并提交。
  3. 使用乌龟合并从 CHILD_BRANCH 到 PARENT_BRANCH 的所有更改。我使用了 'merge a range of revisions' 选项,并没有在选项中指定任何修订,所以基本上让 svn 识别和管理要合并的修订。
  4. 合并后,在 PARENT_BRANCH 中创建新目录。
  5. 从 PARENT_BRANCH -> CHILD_BRANCH 合并回来。
  6. 我在新目录上遇到树冲突,错误是它试图添加的目录已经存在。

好吧,当然该目录在子分支中,因为它最初来自那里。我虽然 svn 1.5+ 使用 merge-info 跟踪合并,但应该知道这是目录所在的分支,不应该抛出树合并错误。

知道发生了什么,我该如何解决这个问题?我给出的示例仅针对 1 个目录,但实际上有很多目录和文件,因此手动逐个处理需要数小时。

4

2 回答 2

6

问题是 CHILD 和 PARENT 都有不同的修订版,它们添加了相同的文件夹。CHILD 对您第 4 步中的修订一无所知。

每次从 CHILD 到 PARENT 的合并后(您的第 4 步),您需要立即向 CHILD 记录它具有从 CHILD 到 PARENT 的合并的修订。您可以通过将 PARENT 中的修订合并到 CHILD 并在 tortoisesvn 中检查此标志来做到这一点:

在此处输入图像描述

阅读有关颠覆分支重新集成的这篇文章。

于 2013-05-04T13:03:11.040 回答
2

SVN 是一种可以以多种不同方式使用的工具。一些用例得到很好的支持,而另一些则没有。在两个分支之间连续双向合并属于后一类。

因此,SVN 并不适合所有项目。但是,它对于大多数项目都非常有效,因为不需要合并两个方向的更改。SVN 的典型工作流程如下:

创建一个特性分支,对特性分支进行更改,并将来自原始分支的所有更改合并到特性分支,以便特性分支包含来自原始分支的所有内容以及仅存在于该特定特性分支上的一些附加特性. 一旦功能分支完成,它就会与原始分支重新集成,并关闭。

此工作流程得到 SVN 的良好支持,并且在大多数项目中运行良好。

于 2013-05-04T08:54:14.117 回答