El problema de los finales de línea
Windows usa CRLF, Linux y macOS usan LF. Cuando desarrolladores en plataformas diferentes hacen commit al mismo repositorio, los archivos cambian de un lado a otro y los diffs se vuelven ilegibles.
La configuración simple y robusta
# .gitattributes
* text=auto eol=lf
*.{cmd,bat,ps1} text eol=crlf
*.png binary
*.jpg binary
*.pdf binary
*.zip binary
Cómo funciona text=auto
En commit, Git mira el contenido del archivo. Los archivos de texto aparentes tienen sus finales de línea normalizados a LF en el repositorio.
Renormalizar repos existentes
git add --renormalize .
git commit -m "Normalizar finales de línea"
core.autocrlf vs .gitattributes
core.autocrlf- configuración por usuario..gitattributes- commiteado al repo.
Marcar binarios
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.pdf binary
*.zip binary
*.tar binary
*.gz binary
*.dll binary
*.exe binary
Anulaciones por archivo
Makefile text eol=lf
*.sh text eol=lf
*.bat text eol=crlf
*.ps1 text eol=crlf
*.csv text
Drivers de diff y merge
*.docx diff=docx
*.pdf diff=pdf
composer.lock merge=ours
Verificar
git check-attr -a path/to/file
git ls-files --eol