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?

¿Fue útil?

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.

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


Git Diferenciar con vimdiff

vimdiff

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 para vimdiff vistazo a git-diff ejecutando ‘gitvimdiff’, sino una invocación normal de git 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top