How do you cancel an external git diff?

十年热恋 提交于 2019-11-27 07:52:41

If stopping the process is not enough, killing the shell itself (in which you launched the git diff) might be more effective.


See also Git Diff with Vimdiff

Not being ready to go full speed into using vimdiff (I’m just new to it), I put the following in ‘gitvimdiff’.
The result is that I can use vimdiff to look at git-diff by running ‘gitvimdiff‘, but a normal invocation of ‘git diff’ behaves as I’m used to.

#!/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

But if you still want the modified git diff, a git status might help before launching it ;)

And you can setup a function to get the old git diff behavior if needed:

I still have access to the default git diff behavior with the --no-ext-diff flag. Here’s a function I put in my bash configuration files:

function git_diff() {
  git diff --no-ext-diff -w "$@" | vim -R -
}
  • --no-ext-diff: to prevent using vimdiff
  • -w: to ignore whitespace
  • -R: to start vim in read-only mode
  • -: to make vim act as a pager
jsha

Use :cquit to exit vim with an error code. Git will detect the error and stop opening new vimdiffs. You'll probably want to create a mapping for it in your .vimrc:

if &diff
  map Q :cquit<CR>
endif

Then just hit Q to early abort from a git diff run.

In order for this to work you must edit your gitconfig:

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

Just kill the parent process. Open up a terminal, use pstree -p to find the process ID (PID) of the git process, then kill -9 it. On my system, it looks something like this:

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

Not exactly elegant, but it works. On your system, pager will probably be something different, but it will have git as a parent process.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!