的行为git mergetool
完全取决于选择的合并工具和 Git 传递给它的命令行。因此,要改变它的行为,你需要找到一个命令行,并配置 Git 以使用该命令行。
我自己也有这个问题(特别是关于 KDiff3),PiQuer 的回答让我有所了解,但它让我开始思考。应该有一种方法可以准确地为 KDiff3 复制 Git 的默认行为,除非没有该--auto
选项(这就是导致 KDiff3 不显示 GUI 的原因)。
看起来 KDiff3 合并工具的默认命令的来源位于文件git/mergetools/kdiff3中。这看起来像一个 shell 脚本,所以我们应该能够准确地复制它!把它放在一行上,删除--auto
和转义东西给了我们这个:
git config --global mergetool.kdiff3.cmd "if \"\$base_present\"; then \"\$merge_tool_path\" --L1 \"\$MERGED (Base)\" --L2 \"\$MERGED (Local)\" --L3 \"\$MERGED (Remote)\" -o \"\$MERGED\" \"\$BASE\" \"\$LOCAL\" \"\$REMOTE\" >/dev/null 2>&1; else \"\$merge_tool_path\" --L1 \"\$MERGED (Local)\" --L2 \"\$MERGED (Remote)\" -o \"\$MERGED\" \"\$LOCAL\" \"\$REMOTE\" >/dev/null 2>&1; fi"
和变量在 Git 文档base_present
中merge_tool_path
没有特别提到可以在 中使用mergetool.<tool>.cmd
,因此在将来的某个时候,此命令可能无法按原样工作。但是,它们可以很容易地替换为一个命令来测试是否BASE
引用了一个存在的文件,以及一个 KDiff3 的硬编码路径。
请注意,上面的命令替换了 Gitkdiff3
合并工具的默认命令,而不是创建一个单独的命令。
关于原始问题中的其他几点:
- 该
trustExitCode
设置告诉 Git 合并工具的退出代码是否是合并是否成功的正确指示。它不会影响合并工具的行为,而是会影响合并工具退出后 Git 的行为。请参阅git-mergetool 的手册。
- 您在输入后看到的自动分辨率都是
git mergetool
由合并工具本身完成的。git mergetool
仅在需要合并的文件版本上调用外部工具。