¿Cómo se cancela una git diff externo?
Pregunta
Tengo configuración vim como mi herramienta de diferencias externo:
[diff]
external = git_diff_wrapper
#!/bin/sh
vimdiff "$2" "$5"
Decir que tengo 300 archivos que han sido modificados; a través de fiesta, escribo "git diff". Se pone en marcha 300 vimdiffs secuencialmente, ¿cómo puedo abortar?
Solución
Si se detiene el proceso no es suficiente, matando al depósito propiamente dicho (en la que se puso en marcha el git diff
) podría ser más eficaz.
No estar listo para ir a toda velocidad en el uso de
vimdiff
(sólo soy nuevo a él), pongo el siguiente en ‘gitvimdiff
’.
El resultado es que puedo usar paravimdiff
vistazo a git-diff ejecutando ‘gitvimdiff
’, sino una invocación normal degit diff
comporta ‘’ ya que estoy acostumbrado a.
#!/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
Pero si todavía quiere el git diff
modificado, un git status
podría ayudar antes de lanzarlo;)
Y usted puede configurar una función para obtener el comportamiento git diff
de edad si es necesario:
Todavía tengo acceso a la conducta git diff por defecto con la bandera
--no-ext-diff
. He aquí una función que puse en mis archivos de configuración de bash:
function git_diff() {
git diff --no-ext-diff -w "$@" | vim -R -
}
--no-ext-diff
: para evitar el uso de vimdiff-w
: hacer caso omiso de los espacios en blanco-R
: para iniciar vim en modo de sólo lectura-
: hacer acto vim como un localizador
Otros consejos
Uso: cquit a vim de salida con un código de error. Git detectará el error y detener la apertura de nuevas vimdiffs. Es probable que desee para crear una asignación para que en su .vimrc:
if &diff
map Q :cquit<CR>
endif
A continuación, simplemente pulse Q para abortar temprano de una carrera git diff.
Para que esto funcione, debe editar su gitconfig:
git config --global difftool.trustExitCode true
git config --global mergetool.trustExitCode true
Sólo matan el proceso padre. Abre un terminal, el uso pstree -p
para encontrar el identificador de proceso (PID) del proceso git
, entonces kill -9
ella. En mi sistema, que es como la siguiente:
$ pstree -p
...
├─gnome-terminal(20473)─┬─bash(10302)───git(10331)───pager(10332)
...
$ kill -9 10331
No es exactamente elegante, pero funciona. En su sistema, pager
probablemente será algo diferente, pero tendrá git
como un proceso padre.