Como hago
estado de git
ignorar las diferencias de final de línea?
Información de antecedentes:
Utilizo aleatoriamente Windows y Linux para trabajar en el proyecto. El proyecto está en Dropbox.
Encontré mucho sobre cómo hacer que git diff ignore los finales de línea. Como utilizo meld, git diff abre meld para cada archivo. Y meld dice "archivo idéntico".
Entonces, ¿cómo evito esto? Git solo debería abrir meld para archivos modificados. Y el estado de git no debe informar que los archivos han cambiado si solo el final del archivo es diferente.
EDITAR: Causa:
Esto sucedió debido a esta configuración en Windows
core.autocrlf true
Así que revisé la copia de trabajo en Linux y configuré core.autocrlf como falso en Windows.
Sería bueno saber cómo hacer que git status ignore diferentes líneas nuevas.
core.autocrlf
sea la causa raíz en Windows, pero también una cura en Linux. El problema es queautocrlf
es global en Windows y el repositorio no tiene esa configuración.git/config
. Al ejecutar un local,git config core.autocrlf true
me deshice de los cambios falsos en mi copia de trabajo NTFS clonada en Windows pero accedida en Linux. (ahora solo hay cambios espurios con enlaces simbólicos - los enlaces simbólicos NTFS FUNCIONAN en montajes fuseblk, pero Git los ve como modificados ...)Respuestas:
Intente configurar el valor core.autocrlf de esta manera:
fuente
core.autocrlf true
es una configuración de trabajo en CygWin.core.safecrlf false
es un entorno de trabajo en git bash o mingwUtilice .gitattributes en su lugar, con la siguiente configuración:
.gitattributes se encontraría en el mismo directorio que su .gitconfig global. Si .gitattributes no existe, agréguelo a ese directorio. Después de agregar / cambiar .gitattributes, tendrá que hacer un restablecimiento completo del repositorio para aplicar con éxito los cambios a los archivos existentes.
fuente
git status
. De hecho, cambia la forma en que se registran los archivos en el repositorio. ref: git-scm.com/docs/gitattributes#_code_text_codeEsta respuesta parece relevante ya que el OP hace referencia a la necesidad de una solución de múltiples sistemas operativos. Este artículo de ayuda de Github detalla los enfoques disponibles para manejar los finales de las líneas entre sistemas operativos. Existen enfoques globales y por repositorio para administrar los finales de línea entre sistemas operativos.
Enfoque global
Configure el manejo de finales de línea de Git en Linux u OS X:
Configure el manejo de finales de línea de Git en Windows:
Enfoque por repositorio:
En la raíz de su repositorio, cree un
.gitattributes
archivo y defina la configuración de final de línea para los archivos de su proyecto, una línea a la vez en el siguiente formato:path_regex line-ending-settings
dondeline-ending-settings
es uno de los siguientes:El
text
valor se puede configurar más para instruir a Git sobre cómo manejar los finales de línea para los archivos coincidentes:text
- Cambia los finales de línea a los finales de línea nativos del sistema operativo.text eol=crlf
- Convierte los finales de líneaCRLF
en al finalizar la compra.text eol=lf
- Convierte los finales de líneaLF
en al finalizar la compra.text=auto
- Valor predeterminado sensato que deja el control de la línea a discreción de Git.Aquí está el contenido de un archivo .gitattributes de muestra:
Más información sobre cómo actualizar su repositorio después de cambiar la configuración de los finales de línea aquí . Tldr:
En algunos casos, esto es todo lo que se necesita hacer. Otros pueden necesitar completar los siguientes pasos adicionales:
fuente
Problema relacionado con los comandos git en el sistema operativo Windows:
advertencia: LF será reemplazado por CRLF en ...
El archivo tendrá sus finales de línea originales en su directorio de trabajo.
Resolución :
No aparece ningún mensaje de advertencia.
fuente
Creé un script para ignorar las diferencias en los finales de línea:
Mostrará los archivos que no se agregaron a la lista de confirmación y se modificaron (después de ignorar las diferencias en los finales de línea). Puede agregar el argumento "agregar" para agregar esos archivos a su confirmación.
Código fuente: https://github.com/lepe/scripts/blob/master/gitdiff.pl
Actualizaciones :
fuente
git status --porcelain 2>/dev/null | grep '^ M ' | awk '{ print \$2 }'
; a esto: my @mods =git status --porcelain 2>/dev/null | grep '^ M ' | cut -c4-
;Utilizo Windows y Linux, pero la solución
core.autocrlf true
no me ayudó. Incluso no cambié nada despuésgit checkout <filename>
.Así que utilizo una solución alternativa para sustituir
git status
:gitstatus.sh
Solo comparo
md5sum
un archivo y su hermano en el repositorio.Salida de ejemplo:
fuente