2010-05-07 3 views
14

У меня ВИМ настройки как мой внешний инструмент сравнения:Как отменить внешний git diff?

[diff] 
     external = git_diff_wrapper 

#!/bin/sh 

vimdiff "$2" "$5" 

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

+0

Это прекрасная проблема есть :) – vfclists

ответ

4

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

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


Смотрите также Git Diff with 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 “[email protected]” 
fi 

Но если вы все еще хотите модифицированную git diff, git status может помочь перед его запуском;)

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

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

function git_diff() { 
    git diff --no-ext-diff -w "[email protected]" | vim -R - 
} 
  • --no-ext-diff: для предотвращения использования vimdiff
  • -w: игнорировать пробелы
  • -R: начать Vim в только для чтения режим
  • -: сделать vim действующим как пейджер
+0

gitvimdiff псевдоним является хорошей идеей. – v2k

+1

О, мужик, я бы почти прошел через миллионы 'ctrl + q', если бы не прочитал это первым. Благодаря тонну!! – shriek

2

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

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

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

17

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

if &diff 
    map Q :cquit<CR> 
endif 

Тогда просто нажмите Q, чтобы рано прервать из мерзавца дифф перспективы.

Для того, чтобы это работало необходимо изменить gitconfig:

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

Это должен быть принятый ответ, поскольку он непосредственно решает вопрос, а не обеспечивает обходное решение. Замечательная идея для отображения 'if & diff' тоже. Спасибо всем! – pabo

+1

это не работает для меня, как настроить? – songhir

+0

Это не работает для меня. Я имею в виду не отображение, а команду: cquit. Vim выходит правильно, но Git все еще продолжает работать с этим процессом. – kai