Git合并解决符号链接上的冲突

时间:2018-07-10 09:16:39

标签: git merge branch symlink conflict

将策略设置为textarea的branch1合并到branch2时,策略不会处理软链接的冲突。合并失败导致软链接。 任何线索如何处理这种情况?

步骤

-Xours

2 个答案:

答案 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”分支中的任何更改,不仅是在发生冲突时。