当我使用meld作为git mergetool
解决合并冲突时,meld会显示本地/输出文件和远程/输出文件之间的差异(以蓝色或绿色表示),这是Git自动解决的,而不仅仅是实际的冲突(以红色突出显示)。当我点击向下箭头时,它会转到下一个(蓝色/绿色)差异,而不是下一个冲突(红色)。在此主题中,有一张图片说明了这一点。
我该如何:
- 忽略非冲突的差异
- 或者像kdiff3一样直接跳到下一个冲突,而不会停留在差异处??
当我使用meld作为git mergetool
解决合并冲突时,meld会显示本地/输出文件和远程/输出文件之间的差异(以蓝色或绿色表示),这是Git自动解决的,而不仅仅是实际的冲突(以红色突出显示)。当我点击向下箭头时,它会转到下一个(蓝色/绿色)差异,而不是下一个冲突(红色)。在此主题中,有一张图片说明了这一点。
我该如何:
将以下内容添加到您的.gitconfig
文件中:
[mergetool "meld"]
cmd = meld --auto-merge "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
这是与Git默认情况下运行相同的命令,只是使用了--auto-merge
选项,以便Meld可以自动解决尽可能多的冲突。
git difftool --tool=meld -d
不兼容。它会出现 Error: --output option requires 1 argument
的错误。 - ks1322git mergetool
"(man) 不修改冲突路径的三个版本(基础、本地和远程)。该命令学会了可选地准备这些文件,并解决未冲突部分。
查看提交 9d9cf23, 提交 de8dafb, 提交 98ea309 (2021年2月9日) 由Seth House (whiteinge
)完成。
(在提交78a26cb中由Junio C Hamano -- gitster
--合并,2021年2月17日)
合并工具的目的是帮助用户解决Git无法自动解决的任何冲突。如果有必须手动解决的冲突,Git将写入一个名为MERGED的文件,其中包含了Git能够自行解决的所有内容以及用冲突标记包装的所有不能解决的内容。将MERGED视为两个或三个方面的差异的一种方式。如果将冲突标记的每个“侧”分别提取,则外部工具可以将这些冲突表示为并排的差异。然而,许多合并工具会对LOCAL和REMOTE进行diff,它们都包含合并之前的文件版本。由于Git自动解决的冲突不存在,因此它会强制用户手动重新解决这些冲突。一些合并工具也会显示MERGED,但通常只作为参考,而不是解决冲突的焦点。这增加了一个mergetool.hideResolved标志,它将使用冲突文件的每个相应“侧”覆盖LOCAL和REMOTE,并因此隐藏Git能够自行解决的所有冲突。覆盖这些文件将立即使任何使用它们的合并工具受益,而无需对工具进行任何更改。在流行合并工具的小型调查中没有注意到任何不良影响,因此这种行为默认为true。但是,可以通过将mergetool.hideResolved设置为false来全局禁用它。
mergetool
: 增加hideResolved
配置原始实现者:Felipe Contreras
签署者:Seth House
请参阅 "Mergetools: Stop doing three-way merges!"。
git config
现在包含在其手册页中:
在OP的情况下:
mergetool.hideResolved
在合并期间,Git会自动解决尽可能多的冲突,并编写'MERGED'文件,在任何无法解决的冲突周围放置冲突标记;'LOCAL'和'REMOTE'通常表示来自Git冲突解决之前的文件版本。
此标志会导致'LOCAL'和'REMOTE'被覆盖,以便仅向合并工具呈现未解决的冲突。
可以通过
mergetool.<tool>.hideResolved
配置变量为每个工具进行配置。默认为true
。
git config --global mergetool.meld.hideResolved true
这个描述在以下内容中:
mergetool
:添加每个工具的支持和覆盖hideResolved标志协助者:Johannes Sixt
协助者:Junio C Hamano
签署者:Seth House
Add a per-tool override flag so that users may enable the flag for one tool and disable it for another by setting
mergetool.<tool>.hideResolved
tofalse
.In addition, the author or maintainer of a mergetool may optionally override the default
hideResolved
value for that mergetool.
If themergetools/<tool>
shell script contains ahide_resolved_enabled
function it will be called when the mergetool is invoked and the return value will be used as the default for thehideResolved
flag.
hide_resolved_enabled () { return 1 }
Disabling may be desirable if the mergetool wants or needs access to the original, unmodified 'LOCAL' and 'REMOTE' versions of the conflicted file.
For example:
- A tool may use a custom conflict resolution algorithm and prefer to ignore the results of Git's conflict resolution.
- A tool may want to visually compare/constrast the version of the file from before the merge (saved to 'LOCAL', 'REMOTE', and 'BASE') with Git's conflict resolution results (saved to 'MERGED').
git config
现在在其手册页面中包含以下内容:
mergetool.<tool>.hideResolved
允许用户为特定工具覆盖全局
mergetool.hideResolved
值。
meld 3.14.0
- Kos