我需要合并回一个分支branchA
,该分支是svn mkdir
而不是svn copy
错误创建的。
使用svn merge --ignore-ancestry ^/branches/branchA .
导致许多树冲突,我只能通过svn resolve --accept working
来解决,尽管我需要的是接受来自branchA
的更改。
我想这样做,因为branchA
是trunk
的超集,并且没有任何提交与branchA
中的提交并行提交。
我有什么方法可以做到吗?
注意:
我无权运行svn-admin
。
答案 0 :(得分:1)
简短的回答:你做不到。你不能,因为Subversion通常使用所谓的三向合并。您需要两个端点(分支的HEAD和主干的HEAD)以及最近的共同祖先(MRCA)作为合并中的第三个点。
MRCA用于确定分支上已更改的内容以及主干上已更改的内容。假设我们的文件最初看起来像这样:
one
two
three
four
five
six
在行李箱上我们有:
one
FOO
three
BAR
five
FUBAR
我们在分行上:
one
two
BARFOO
four
five
six
我们现在想要将我们的分支与主干合并。如果我们只是进行比较,我们会看到第2行,第4行和第6行不同。然而,在行李箱上改变了第二和第四行。我们不想更改它们以匹配分支上的内容。相反,分支上唯一更改的行是第3行。我们将第3行从分支替换为主干。没有其他线被触及。
现在,Subversion合并比这更复杂,但这是三向合并的基本算法:你比较你正在与他们的MRCA合并的两个HEAD。如果没有MRCA,您就无法合并 - 这就是您所处的情况。
即使--ignore-ancestory
标记也不起作用,因为您的主干上有foo.txt
,分支上有foo.txt
。它们可能看起来像是同一个文件,但根据Subversion它们不是同一个文件。它们是两个完全不同的文件,恰好位于同一目录中并且具有相同的名称。
如果您想简单地强制您的主干看起来像您的分支,您可以尝试--accept theirs-full
标志。同样,我不是100%确定这会起作用,因为Subversion可能会拒绝识别文件名。如果您没有安装Subversion 1.8,可以尝试--reintegrate
选项。
最后,您可以尝试欺骗Subversion。从主干到正确的分支点建立另一个分支。看看那个新的分支。使用系统的复制命令(而不是通过Subversion)将文件从坏分支复制到此新分支。现在,提交任何更改(您可能必须添加不存在的文件并删除不应存在的文件)。承诺改变。
你应该有一个看起来与坏分支完全相同的新分支。但是,由于此分支具有MRCA,因此您应该能够进行合并。