2010-05-07 19 views
14

c'ho configurazione vim come il mio strumento diff esterno:Come si cancella un git diff esterno?

[diff] 
     external = git_diff_wrapper 

#!/bin/sh 

vimdiff "$2" "$5" 

dire che ho 300 file che sono stati modificati; via bash, digito "git diff". Lancia in sequenza 300 vimdiff in sequenza, come faccio ad abortire?

+0

Questo è un problema meraviglioso avere :) – vfclists

risposta

4

Se arrestare il processo non è sufficiente, uccidere la shell stessa (in cui è stato lanciato il git diff) potrebbe essere più efficace.

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


Vedi anche Git Diff with Vimdiff

VimDiff

Non essendo pronto ad andare tutta velocità nel usando vimdiff (io sono solo nuovi ad esso), ho messo il seguente in 'gitvimdiff'.
Il risultato è che posso utilizzare vimdiff per esaminare git-diff eseguendo 'gitvimdiff', ma una normale chiamata di 'git diff' si comporta come sono abituato.

#!/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 

Ma se si vuole ancora il modificato git diff, un git status potrebbe aiutare prima di lanciarlo;)

e si può impostare una funzione per ottenere il vecchio git diff comportamento in caso di necessità:

Ho ancora accesso al comportamento predefinito git diff con il flag --no-ext-diff. Ecco una funzione che ho messo nel mio file di configurazione di bash:

function git_diff() { 
    git diff --no-ext-diff -w "[email protected]" | vim -R - 
} 
  • --no-ext-diff: per evitare usando vimdiff
  • -w: ignorare gli spazi
  • -R: per avviare Vim in sola lettura modalità
  • -: per rendere vim agire come un cercapersone
+0

l'alias gitvimdiff è una bella idea. – v2k

+1

Oh uomo, avrei quasi passato milioni di 'ctrl + q' se non avessi letto prima questo. Grazie mille !! – shriek

2

Basta uccidere il processo padre. Aprire un terminale, utilizzare pstree -p per trovare l'ID di processo (PID) del processo git, quindi . Sul mio sistema, sembra qualcosa del genere:

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

Non esattamente elegante, ma funziona. Sul tuo sistema, pager sarà probabilmente qualcosa di diverso, ma avrà il git come processo genitore.

17

Uso: cquit per uscire da vim con un codice di errore. Git rileverà l'errore e smetterà di aprire nuovi vimdiff.Probabilmente si vorrà creare una mappatura per esso nel vostro Vimrc:

if &diff 
    map Q :cquit<CR> 
endif 

Poi basta premere Q per interrompere presto da una corsa git diff.

Affinché questo funzioni è necessario modificare il vostro gitconfig:

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

Questa dovrebbe essere la risposta accettata poiché affronta direttamente la domanda anziché fornire una soluzione alternativa. Meravigliosa idea anche per la mappatura 'if & diff'. Grazie tutto! – pabo

+1

non funziona per me, come configurare? – songhir

+0

Questo non funziona per me. Non mi riferisco alla mappatura ma al comando cquit stesso. Vim esce correttamente, ma Git continua il processo di diffusione. – kai