你如何取消外部git差异?

v2k*_*v2k 16 git vim vimdiff external

我已经将vim设置为我的外部差异工具:

[diff]
        external = git_diff_wrapper

#!/bin/sh

vimdiff "$2" "$5"
Run Code Online (Sandbox Code Playgroud)

假设我有300个已修改过的文件; 通过bash,我输入"git diff".它按顺序启动了300个vimdiff,我该如何中止?

jsh*_*sha 18

使用:cquit退出vim并显示错误代码.Git将检测错误并停止打开新的vimdiff.你可能想在.vimrc中为它创建一个映射:

if &diff
  map Q :cquit<CR>
endif
Run Code Online (Sandbox Code Playgroud)

然后从git diff运行中点击Q到早期中止.

要使其工作,您必须编辑您的gitconfig:

git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,因为它直接解决问题而不是提供解决方法.'if&diff`映射也很精彩.谢谢大家! (2认同)
  • @kai https://git-scm.com/docs/git-difftool 说您需要将 --trust-exit-code 添加到您的 git difftool 命令。我的别名现在是 d = difftool --trust-exit-code 添加 --trust-exit-code 我可以在 vim 中使用 :cq 来中止差异。 (2认同)

Von*_*onC 3

如果停止进程还不够,杀死 shell 本身(您在其中启动了git diff)可能会更有效。

\n\n

http://trick.vanstaveren.us/wp/wp-uploads/2009/06/close-this-window.png

\n\n
\n\n

另请参见Git Diff 与 Vimdiff

\n\n

VimDiff

\n\n
\n

还没准备好全速使用vimdiff(我\xe2\x80\x99m刚刚接触它),我将以下内容放入\xe2\x80\x98 gitvimdiff\xe2\x80\x99。
\n 结果是我可以vimdiff通过运行 \xe2\x80\x98 \xe2\x80\x98 来查看 git-diff gitvimdiff,但是 \xe2\x80\x98 git diff\xe2\x80\x99 的正常调用的行为与我相同\xe2\x80\x99m 习惯了。

\n
\n\n
#!/bin/sh\n\nif [ -n "${GIT_EXTERNAL_DIFF}" ]; then\n[ "${GIT_EXTERNAL_DIFF}" = "${0}" ] ||\n{ echo \xe2\x80\x9cGIT_EXTERNAL_DIFF set to unexpected value\xe2\x80\x9d 1>&2; exit 1; }\nexec vimdiff \xe2\x80\x9c$2\xe2\x80\xb3 \xe2\x80\x9c$5\xe2\x80\xb3\nelse\nGIT_EXTERNAL_DIFF=\xe2\x80\x9d${0}\xe2\x80\x9d exec git \xe2\x80\x93no-pager diff \xe2\x80\x9c$@\xe2\x80\x9d\nfi\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

但如果您仍然想要修改git diffgit status在启动之前可能会有所帮助;)

\n\n

如果需要,您可以设置一个函数来获取旧git diff行为:

\n\n
\n

我仍然可以使用该--no-ext-diff标志访问默认的 git diff 行为。Here\xe2\x80\x99s 是我放入 bash 配置文件中的函数:

\n
\n\n
function git_diff() {\n  git diff --no-ext-diff -w "$@" | vim -R -\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n
    \n
  • --no-ext-diff: 防止使用 vimdiff
  • \n
  • -w: 忽略空格
  • \n
  • -R: 以只读模式启动vim
  • \n
  • -: 让vim充当寻呼机
  • \n
\n
\n