0

我已git配置(如下所示)使用vimdiffasdifftool并比较另一对文件,而无需在调用:qa. 这很棒。唯一的问题是有时许多文件存在差异。如何防止git运行另一个vimdiff实例并继续差异队列?

git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

我尝试vim使用非零错误代码 ( :cq) 退出,但没有帮助。

vim如果答案对和都有效,那就太棒了nvim

4

2 回答 2

3

我在不同的堆栈上得到了解决方案:

git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true

然后退出:cq

正如@VonC 所提到的,也适用于nvim

于 2016-09-29T20:57:41.893 回答
1

请注意,您mergetool.trustExitCode true不仅可以申请vimdiff,还可以申请nvimdiff

在 Git 2.29(2020 年第四季度)中,基于变体的“ git mergetoolmanvim的现有后端已经过重构,然后nvim添加了对“”的支持。

请参阅pudinha ( ) 的提交 1186897提交 83bbf9b pudinha 2020 年 7 月 29 日
(由Junio C Hamano 合并 -- gitster--提交 873fa13中,2020 年 8 月 17 日)

mergetools: 添加对 nvimdiff (neovim) 系列的支持

签字人:pudinha


修复了在Git 2.30(2021 年第一季度)添加nvimdiff支持时引入的回归。mergetool

请参阅Johannes Schindelin ( ) 的提交 12026f4提交 6bc9082(2020 年 11 月 11 日(由Junio C Hamano 合并 -- --d203add 提交中,2020 年 11 月 21 日)dscho
gitster

mergetool:避免list_tool_variants破坏用户定义的设置

签字人:约翰内斯·辛德林

83bbf9b92ea8(“ mergetool--lib:改进对 vimdiff 样式工具变体的支持”,2020-07-29,Git v2.29.0-rc0 --批次 #8中列出的合并)中,我们本着 Postel 定律的精神引入了一个功能:宽容在您接受的输入中。在这个特定的例子中,我们不仅希望允许,而且希望将其作为Beyond Compare 工具的名称。list_tool_variantsbcbc3

然而,这个补丁忽略的是它完全允许用户覆盖mergetools/.
但是现在我们去掉了尾随数字,用户给该工具的名称实际上可能不在由list_tool_variants.

diff_cmd因此,如果检测到用户定义的设置,让我们对and做同样的事情merge_cmd:用普通版本覆盖它。


Git 2.30.1(2021 年第一季度)修复了 2.29 回归,其中 " git mergetool --tool-help" ( man )无法列出所有可用工具。

请参阅Philippe Blain ( ) 的commit 80f5a16(2021 年 1 月 7 日(由Junio C Hamano 合并 -- --提交 073552d中,2021 年 1 月 15 日)phil-blain
gitster

mergetool--lib:修复“ --tool-help”以正确显示可用工具

报告人:Philippe Blain
基于补丁程序:Johannes Sixt
签字人:Philippe Blain

提交83bbf9b(“ mergetool--lib:改进对 vimdiff 样式工具变体的支持”,2020-07-29,Git v2.29.0-rc0 -批次 #8中列出的合并)在( man )( man )的输出中引入了回归[1]git mergetool --tool-helpgit difftool --tool-help

在函数 ' show_tool_names' in 中git-mergetool--lib.sh,我们遍历支持mergetools的及其变体并将它们累积在变量 ' variants' 中,并用文字 ' \n' 分隔它们。

然后代码使用 ' echo $variants' 将这些 ' \n' 转换为换行符,但这种行为不可移植,它恰好在某些 shell 中工作,例如 dash(1) 的 'echo' 内置函数。

对于 ' echo' 不会将 ' \n' 转换为换行符的 shell,最终结果是显示的唯一工具是现有变体(按字母顺序排列的最后一个变体除外),因为变体在 ' $variants' 中由实际换行符分隔,因为几个 ' echo' 来电mergetools/{bc,vimdiff}::list_tool_variants

通过将实际的换行符嵌入到variantsin 中来修复此错误show_tool_names()
在此期间,替换sort | uniqsort -u.

为了防止将来出现回归,添加一个简单的测试来检查一些已知工具是否正确显示(让我们避免计算工具的总数以减少添加新工具时的维护负担,或者如果 ' --tool-help' 学习了额外的逻辑,比如隐藏工具取决于在当前平台上)。

[1] https://lore.kernel.org/git/CADtb9DyozjgAsdFYL8fFBEWmq7iz4=prZYVUdH9W-J5CKVS4OA@mail.gmail.com/

于 2020-08-24T20:24:58.707 回答