Как отменить внешний git diff?

У меня есть настройка vim в качестве внешнего инструмента diff:

[diff]
        external = git_diff_wrapper

#!/bin/sh

vimdiff "" ""

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

3 ответов


Если остановки процесса недостаточно, убивая саму оболочку (в которой вы запустили 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}" = "" ] ||
{ echo “GIT_EXTERNAL_DIFF set to unexpected value” 1>&2; exit 1; }
exec vimdiff “″ “″
else
GIT_EXTERNAL_DIFF=”” exec git –no-pager diff “$@”
fi

но если вы все еще хотите изменен git diff, a 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 действовал как пейджер

Use: cquit для выхода из vim с кодом ошибки. Git обнаружит ошибку и перестанет открывать новые vimdiffs. Вы, вероятно, захотите создать отображение для него в своем .vimrc:

if &diff
  map Q :cquit<CR>
endif

затем просто нажмите Q, чтобы рано прервать запуск git diff.

чтобы это работало, вы должны отредактировать свой gitconfig:

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

просто убить родительский процесс. Откройте терминал, используйте pstree -p чтобы найти идентификатор процесса (PID)