Как вы отмените внешний Git Diff?
Вопрос
У меня установка VIM в качестве моего внешнего инструмента Diff:
[diff]
external = git_diff_wrapper
#!/bin/sh
vimdiff "$2" "$5"
Скажем, у меня есть 300 файлов, которые были изменены; Через Bash я печатаю «Git Diff». Он запускает 300 Vimdiffs последовательно, как мне прервать?
Решение
Если остановка процесса недостаточно, убивая сам оболочку (в которой вы запустили git diff
) может быть более эффективным.
Смотрите также Git diff с 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 по умолчанию с
--no-ext-diff
флаг. Вот функция, которую я положил в мои файлы конфигурации Bash:
function git_diff() {
git diff --no-ext-diff -w "$@" | vim -R -
}
--no-ext-diff
: Для предотвращения использования Vimdiff-w
: игнорировать пробелы-R
: Чтобы начать Vim в режиме только для чтения-
: сделать VIM действовать как пейджер
Другие советы
Используйте: CQUIT для выхода из VIM с кодом ошибки. Git будет обнаруживать ошибку и прекратить открывать новые Vimdiffs. Вы, вероятно, захотите создать отображение для него в вашем .vimrc:
if &diff
map Q :cquit<CR>
endif
Тогда просто поразите Q до раннего прерваний из разжигания GIT.
Для того, чтобы это работать, вы должны редактировать ваш GitConfig:
git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true
Просто убить родительский процесс. Откройте терминал, используйте pstree -p
найти идентификатор процесса (PID) git
процесс, то kill -9
Это. В моем системе это выглядит что-то подобное:
$ pstree -p
...
├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332)
...
$ kill -9 10331
Не совсем элегантно, но это работает. В вашей системе, pager
вероятно, будет что-то другое, но у него будет git
как родительский процесс.