Вопрос

У меня установка VIM в качестве моего внешнего инструмента Diff:

[diff]
        external = git_diff_wrapper

#!/bin/sh

vimdiff "$2" "$5"

Скажем, у меня есть 300 файлов, которые были изменены; Через Bash я печатаю «Git Diff». Он запускает 300 Vimdiffs последовательно, как мне прервать?

Это было полезно?

Решение

Если остановка процесса недостаточно, убивая сам оболочку (в которой вы запустили 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 по умолчанию с --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 как родительский процесс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top