Как вы отменяете внешний git diff? - PullRequest
16 голосов
/ 07 мая 2010

В качестве внешнего инструмента сравнения я настроил vim:

[diff]
        external = git_diff_wrapper

#!/bin/sh

vimdiff "$2" "$5"

Скажем, у меня есть 300 файлов, которые были изменены; через bash я набираю "git diff". Он запускает 300 vimdiffs последовательно, как мне прервать его?

Ответы [ 3 ]

18 голосов
/ 12 марта 2013

Использование: 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
4 голосов
/ 07 мая 2010

Если остановки процесса недостаточно, уничтожение самой оболочки (в которой вы запустили git diff) может быть более эффективным.

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


См. Также Git Diff с Vimdiff

VimDiff

Не будучи готовым перейти на полную скорость к использованию vimdiff (я просто новичок в этом), я добавил следующее в ‘gitvimdiff’.
В результате я могу использовать vimdiff для просмотра git-diff, запустив ‘gitvimdiff‘, но обычный вызов ‘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 diff, git status может помочь перед его запуском;)

И вы можете настроить функцию для получения старого git diff поведения, если это необходимо:

У меня все еще есть доступ к поведению git diff по умолчанию с флагом --no-ext-diff. Вот функция, которую я вставил в мои файлы конфигурации bash:

function git_diff() {
  git diff --no-ext-diff -w "$@" | vim -R -
}
  • --no-ext-diff: запретить использование vimdiff
  • -w: игнорировать пробелы
  • -R: чтобы запустить vim в режиме только для чтения
  • -: заставить vim действовать как пейджер
2 голосов
/ 07 мая 2010

Просто убей родительский процесс.Откройте терминал, используйте pstree -p, чтобы найти идентификатор процесса (PID) процесса git, затем kill -9 его.В моей системе это выглядит примерно так:

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

Не совсем элегантно, но работает.В вашей системе pager, вероятно, будет отличаться, но будет иметь git в качестве родительского процесса.

...