Tengo mi editor de texto para recortar automáticamente el espacio en blanco al guardar un archivo, y estoy contribuyendo a un proyecto de código abierto que tiene graves problemas con el espacio en blanco al final.
Cada vez que intento enviar un parche, primero debo ignorar todos los cambios de espacios en blanco a mano, para elegir solo la información relevante. No solo eso, sino que cuando corro git rebase
, generalmente me encuentro con varios problemas debido a ellos.
Como tal, me gustaría poder agregar al índice solo cambios que no sean espacios en blanco, de manera similar git add -p
, pero sin tener que elegir todos los cambios yo mismo.
¿Alguien sabe como hacer esto?
EDITAR: No puedo cambiar la forma en que funciona el proyecto, y han decidido, después de discutirlo en la lista de correo, ignorar esto.
fuente
git apply --ignore-whitespace
contrario, el parche no se aplicaría por razones obvias.git add -w
eso hizo esto.patch does not apply
yerror while searching for
... ¿Alguna idea?patch does not apply
errorgit diff -U0 -w --no-color | git apply --cached --ignore-whitespace --unidiff-zero
. Esto no es arriesgado porque el índice ya está lo más actualizado posible, por lo que es una base confiable para el parche.Esto funciona para mi:
Si quieres mantener un escondite, esto funciona
No me gustan los escondites, pero me he encontrado con un error en git + cygwin donde pierdo los cambios, así que para asegurarme de que las cosas fueron al registro, al menos configuré lo siguiente:
Básicamente creamos un diff que no incluye los cambios de espacio, revertimos todos nuestros cambios y luego aplicamos el diff.
fuente
git stash
pago en lugar de finalizar la compra, para tener una copia de seguridad de sus cambios, al menos hasta que se pruebe.Cree un archivo de parche que contenga solo los cambios reales (excluyendo líneas con solo cambios de espacio en blanco), luego limpie su espacio de trabajo y aplique ese archivo de parche:
Revise las diferencias restantes, luego
add
ycommit
como de costumbre.El equivalente para Mercurial es hacer esto:
fuente
La respuesta más votada no funciona en todos los casos, debido al espacio en blanco en el contexto del parche según los usuarios en los comentarios.
Revisé el comando de la siguiente manera:
Esto genera un parche sin contexto. No debería ser un problema ya que el parche es de corta duración.
Alias correspondiente, nuevamente una revisión de lo que ya fue proporcionado por otros usuarios:
fuente
--ignore-space-change
lugar de-w
.git diff -U0 --ignore-space-change --no-color | git apply --cached --unidiff-zero
--ignore-blank-lines
contrario, encontrará parches de diferencias que se parcharán en compensaciones incorrectas si algunos de los cambios de 'espacio en blanco' que desea ignorar son eliminaciones / adiciones de líneas vacías.Agregue lo siguiente a su
.gitconfig
: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 losgit apply
argumentos proporcionados por el usuario y quegit
se coloca automáticamente en el Fin de la línea de comando. Aquí no se quieren estos argumentos: no queremosgit apply
consumirlos, de ahí el carácter de comentario anterior. Es posible que desee ejecutar este comandoGIT_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 paragit 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:Mientras que el correcto es:
fuente
¿Qué tal lo siguiente:
El comando dentro de las comillas inversas obtiene los nombres de los archivos que tienen cambios que no son espacios en blanco.
fuente
git add `git diff -w |grep '^+++' |cut -c7-`
si no se utilizan submódulosPrimero debe considerar si el espacio en blanco final es intencional. Muchos proyectos, incluidos el kernel de Linux, Mozilla, Drupal y Kerberos (por nombrar algunos de la página de Wikipedia sobre estilo) prohíben los espacios en blanco finales. De la documentación del kernel de Linux:
En su caso, el problema es al revés: las confirmaciones anteriores (y tal vez las actuales) no siguieron esta directriz.
Apostaría a que nadie realmente quiere el espacio en blanco final, y solucionar el problema podría ser un cambio bienvenido. Otros usuarios también pueden estar experimentando el mismo problema que usted. También es probable que los contribuyentes que agregan espacios en blanco finales no se den cuenta de que lo están haciendo.
En lugar de intentar reconfigurar git para ignorar el problema, o deshabilitar la funcionalidad deseable en su editor, comenzaría con una publicación en la lista de correo del proyecto explicando el problema. Muchos editores (y git en sí) pueden configurarse para ocuparse del espacio en blanco final.
fuente
Encontré un gancho de confirmación previa de git que elimina los espacios en blanco finales . Sin embargo, si no puede lograr que otros usen esto, entonces podría no ser una solución válida.
fuente