SVN在两个分支之间合并 - “路径未找到”

时间:2012-10-03 05:15:49

标签: svn version-control merge

我有两个分支(主干的孩子)需要合并到一个分支进行测试,但他们不能进入主干。这两个分支都与trunk @ HEAD保持同步。所以我想离开这个:

__________________trunk
  \___duck   \
              \___beaver

到此:

__________________________trunk
  \
   \______________platypus

我从最新版本的trunk创建了分支platypus,并尝试将duck和beaver合并到这个新的trunk副本中:

svn copy ^/trunk ^/branches/platypus;
svn switch ^/branches/platypus;
svn merge --reintegrate ^/branches/duck;
svn merge --reintegrate ^/branches/beaver;

但合并操作失败

svn: '/blah/!svn/bc/12047/repo/branches/duck' path not found

如果我尝试将鸭子(或海狸)整合到树干中,它可以正常工作。我在这里缺少什么?

5 个答案:

答案 0 :(得分:19)

我遇到了同样的错误,并且能够通过手动指定我想要合并的所有修订号而不是让SVN决定来解决它。这允许合并继续,并按预期提示我进行合并冲突。

我正在使用TortoiseSVN手动选择修订,但我认为使用SVN命令行会是这样的:

svn log --stop-on-copy https://svn.blah/svn/proj1/branches/xyz

然后记下所有修订号,并将它们全部合并,例如:

svn merge -c123,124,156,159 https://svn.blah/svn/proj1/branches/xyz

答案 1 :(得分:1)

我有一个类似的问题,重新整合了一个从另一个分支合并的分支(现在已经重新整合)。像这样:

-----------------------------r7------------------
  \                         /             /ERROR !svn/bc/4/repo/branches/duck' path not found
   r1----dinosaur--r5-------             /
                    \---duck------------r9

似乎没有可能重新整合鸭子,未发现的路径错误抱怨r4 - 但我可以将特定的修改(r5-r9)从鸭子合并到后备箱。

答案 2 :(得分:0)

我解决了以下问题:

  1. 将有问题的分支合并到主干

  2. 创建新的"合并"从树干分支

  3. 将主干恢复到步骤1之前的状态并提交回复

  4. 仅将记录从步骤3合并到分支

  5. 通过将新的合并分支合并回主干进行测试,但当然没有提交

  6. 最终结果是一个新的分支,其中包含来自功能分支和主干的更改不变(但是日志中包含一些新条目)。

答案 3 :(得分:0)

之所以发生这种情况,是因为SVN不知道要合并的修订,可能是因为合并信息丢失或损坏。

通过比较日志来找到两个分支之间的共同祖先(具有最高修订版本X的共同提交):

svn log duck > dlog.txt
svn log beaver > blog.txt

合并从该修订版X到当前标题的所有更改:

svn switch duck    # if you are not already on it
svn merge -r X:HEAD beaver
# Merge conflicts
svn commit

注意:可接受的答案建议使用--stop-on-copy查找共同祖先。尽管有时这可能会找到正确的修订版本(例如,分支duckbeaver是从trunk分支出来的,但是如果有任何{{ 1}}在创建分支后的任何分支中进行操作。如果您知道从未发生过,则可以使用svn copy

答案 4 :(得分:-1)

执行合并时尝试使用--ignore-ancestry选项。可能是合并历史记录不完整(可能是由于乌龟或任何客户端因此而存在),并且当您执行“正常”合并时,在分支上执行的操作会尝试应用于工作副本。