Intereting Posts
Не удается добавить файлы в Git Переключение SVN на ветку, которая старше рабочей копии Получить последний тег git из текущей фиксации Как создать базу слияния в Git? Выполнено с ошибками, не отображается в исходном дереве Как выполнить медленную работу с асинхронным запуском, в частности, пост-фиксацию SVN? Почему Codekit жалуется на 10K-файлы, когда у меня нет файлов 10K в проекте? Получение cmake для запуска до сборки после вытягивания из git md-файл отлично смотрится на Github Repo, но он не выглядит так хорошо на страницах Github Что такое «(1)» в git (1)? Продвижение кода: Build или Binary? Подсчет объектов Git, которые были нажаты, и способ подсчета git нажал объекты Поддерживает ли git получение папки с сервера? Использование git для развертывания с существующим необработанным кодом на рабочем сервере Как выяснить после доморощенного, у меня есть двойные пути для git?

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

У меня есть vim setup, как мой внешний инструмент сравнения:

[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 (я просто к нему не vimdiff ), я gitvimdiff следующее в « 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 действовать как пейджер

Используйте: 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 

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

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

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