你如何取消外部git差异?

时间:2010-05-07 06:25:24

标签: git vim external vimdiff

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

[diff]
        external = git_diff_wrapper

#!/bin/sh

vimdiff "$2" "$5"

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

3 个答案:

答案 0 :(得分:18)

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

if &diff
  map Q :cquit<CR>
endif

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

为了使其正常工作,您必须编辑gitconfig:

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

答案 1 :(得分:4)

如果停止进程是不够的,那么杀死shell本身(你在其中启动git diff)可能会更有效。

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


另见Git Diff with Vimdiff

VimDiff

  

还没准备好全速使用vimdiff(我刚刚开始使用它),我在“gitvimdiff”中添加了以下内容。
  结果是我可以使用vimdiff通过运行“gitvimdiff”来查看git-diff,但正常的“git diff”调用就像我以前一样。

#!/bin/sh

if [ -n "${GIT_EXTERNAL_DIFF}" ]; then
[ "${GIT_EXTERNAL_DIFF}" = "${0}" ] ||
{ echo “GIT_EXTERNAL_DIFF set to unexpected value” 1>&2; exit 1; }
exec vimdiff “$2″ “$5″
else
GIT_EXTERNAL_DIFF=”${0}” exec git –no-pager diff “$@”
fi

但是如果您仍然需要修改后的git diffgit status可能会在启动之前提供帮助;)

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

  

我仍然可以使用--no-ext-diff标志访问默认的git diff行为。这是我在bash配置文件中添加的函数:

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

答案 2 :(得分:2)

刚刚杀死父进程。打开终端,使用pstree -p查找git进程的进程ID(PID),然后查找kill -9进程。在我的系统上,它看起来像这样:

$ pstree -p
...
        ├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332)
...
$ kill -9 10331

不完全优雅,但它有效。在您的系统上,pager可能会有所不同,但它会以git作为父进程。