我有两个分支(主干的孩子)需要合并到一个分支进行测试,但他们不能进入主干。这两个分支都与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
如果我尝试将鸭子(或海狸)整合到树干中,它可以正常工作。我在这里缺少什么?
答案 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之前的状态并提交回复
仅将记录从步骤3合并到分支
通过将新的合并分支合并回主干进行测试,但当然没有提交
最终结果是一个新的分支,其中包含来自功能分支和主干的更改不变(但是日志中包含一些新条目)。
答案 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
查找共同祖先。尽管有时这可能会找到正确的修订版本(例如,分支duck
和beaver
是从trunk
分支出来的,但是如果有任何{{ 1}}在创建分支后的任何分支中进行操作。如果您知道从未发生过,则可以使用svn copy
。
答案 4 :(得分:-1)
执行合并时尝试使用--ignore-ancestry选项。可能是合并历史记录不完整(可能是由于乌龟或任何客户端因此而存在),并且当您执行“正常”合并时,在分支上执行的操作会尝试应用于工作副本。