19

我有两个分支(主干的子级)需要合并到一个分支中进行测试,但它们不能进入主干。两个分支都是最新的trunk@HEAD。所以我想从这个开始:

__________________trunk
  \___duck   \
              \___beaver

对此:

__________________________trunk
  \
   \______________platypus

我从最新版本的树干创建了分支鸭嘴兽,并试图将鸭子和海狸合并到这个新的树干副本中:

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

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

4

5 回答 5

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
于 2014-09-03T08:24:12.450 回答
1

我在重新集成从另一个分支合并的分支时遇到了类似的问题(本身现在已重新集成)。像这样:

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

似乎无法重新集成鸭子,找不到路径错误抱怨 r4 - 但我可以将特定修订版(r5-r9)从鸭子合并回主干。

于 2014-06-30T03:47:59.220 回答
1

发生这种情况是因为 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进行过任何操作,它不会为您提供共同的祖先svn copy。如果您知道这从未发生过, 然后你可以使用--stop-on-copy.

于 2018-08-20T14:39:32.123 回答
0

我解决了这个问题:

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

  2. 从主干创建新的“合并”分支

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

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

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

最终结果是一个新分支,其中包含未更改的功能分支和主干的更改(但遗憾的是日志中有一些新条目)。

于 2014-10-10T13:52:07.307 回答
-1

在进行合并时尝试使用--ignore-ancestry选项。可能是合并历史不完整(可能是由于乌龟或任何客户对此事实),并且当您进行“正常”合并时,在分支上所做的某些事情正试图应用于工作副本。

于 2012-10-03T05:24:23.230 回答