将策略设置为textarea
的branch1合并到branch2时,策略不会处理软链接的冲突。合并失败导致软链接。
任何线索如何处理这种情况?
-Xours
答案 0 :(得分:2)
所有符号链接内容更改都被视为“高级”冲突,而无需涉及“低级”合并代码。
随着RomainVALERI answered,-X ours
(或--strategy-option=ours
)被传递到合并策略,在您的情况下,该策略是默认的-s recursive
。但是对于递归和解析合并,(扩展)策略选项“我们的”仅适用于(普通)文件中的冲突。
请记住git merge
的工作原理是:
HEAD
提交和您命名的其他提交的共同基点的提交; git diff --find-renames
:一个是从合并基础到HEAD
,另一个是从合并基础到其他提交; (将合并的更改应用于合并基础将产生合并结果。)
两个git diff
可以找到更高级别(树级别)的更改。例如,您可能从合并基础更改为HEAD
,但您修改了Readme.txt
,但它们却被删除 Readme.txt
。 Git无法将它们结合起来,并且-X ours
不赞成您对它们的更改:Git只是声明了合并冲突。同样,-X ours
不会处理将文件从“常规文件”更改为“符号链接”的问题。
在您的特定示例中,“文件”(实际上是blob-content)没有更改模式,仅更改了内容:它以前是指向某些路径 A 的符号链接,现在这是一条指向您另一边的路径 B ,另一边指向另一条路径 C 的路径。 Git 可以通过-X ours
获取您的信息来解决此问题,但事实并非如此。 Git强迫您手动解决此冲突,就像它强迫您手动解决已修改/删除的冲突一样。没有-X
选项会有所帮助。
编辑:这被宣布为错误,已在Git 2.17中修复。从Git 2.17开始,-X ours
或-X theirs
选择我们或他们的符号链接。因此,如果您的Git为2.17或更高版本,则可能已经成为 。
答案 1 :(得分:0)
-Xours是策略选项,而不是合并选项。
我的意思是,'-Xours'应该修改策略,例如
git merge -s recursive -Xours mybranch
而“我们的”将是策略本身,作为合并命令的选项提供:
git merge -s ours mybranch
但是,请小心,因为这两个过程是不同的。后者只会忽略“ mybranch”分支中的任何更改,不仅是在发生冲突时。