Agregue lo siguiente a su .gitconfig
:
anw = !git diff -U0 -w --no-color -- \"$@\" | git apply --cached --ignore-whitespace --unidiff-zero "#"
Gracias a la respuesta de @Colin Herbert por la inspiración.
Explicación de sintaxis
La final #
debe ser citada para que no se trate como un comentario dentro del .gitconfig
, sino que se pase y se trate como un comentario dentro del shell: se inserta entre el final de los git apply
argumentos proporcionados por el usuario y que git
se coloca automáticamente en el Fin de la línea de comando. Aquí no se quieren estos argumentos: no queremos git apply
consumirlos, de ahí el carácter de comentario anterior. Es posible que desee ejecutar este comando GIT_TRACE=1 git anw
para ver esto en acción.
Las --
señales de final de argumentos y permite que para el caso de que usted tiene un archivo llamado -w
o algo que se vería como un interruptor para git diff
.
Las comillas dobles escapadas $@
son necesarias para preservar cualquier argumento entregado por el usuario. Si el "
personaje no se escapa, el .gitconfig
analizador lo consumirá y no alcanzará el shell.
Nota: .gitconfig
el análisis de alias no reconoce las comillas sencillas como nada especial - sus caracteres especiales solamente son "
, \
, \n
, y ;
(fuera de una "
cadena de -quoted). Esta es la razón por la "
que siempre se debe escapar, incluso si parece que está dentro de una cadena entre comillas simples (de lo que git es completamente agnóstico).
Esto es importante, por ejemplo. si tiene un alias práctico para ejecutar un bash
comando en la raíz del árbol de trabajo. La formulación incorrecta es:
sh = !bash -c '"$@"' -
Mientras que el correcto es:
sh = !bash -c '\"$@\"' -
git apply --ignore-whitespace
contrario, el parche no se aplicaría por razones obvias.