Estoy tratando de hacer que git no cambie ningún final de línea para ninguna operación. Desafortunadamente, parece que no importa qué. Lo he reducido al siguiente caso de prueba, que tiene tantos mecanismos diferentes para deshabilitar este comportamiento como pude encontrar.
- Comience con dos máquinas (computadora con Windows = A, computadora con Linux = B)
- En ambas máquinas:
git config --global core.autocrlf false - En ambas máquinas:
git config --global core.eol crlf(por si acaso)
- Cree un nuevo repositorio en A. Desde una carpeta vacía:
git init --shared(luego muestre el.gitdirectorio creado )- Crea un nuevo archivo
.gitignoreen el repositorio - Cree un nuevo archivo
.gitattributesen el repositorio con una sola línea:* -text git add ., luegogit commit -m "initial commit"para solucionarlo, por ejemplo, esto .git branch master_recv- Agregar controles remotos
- Cree un nuevo archivo
document.txten el repositorio que contenga CRLF - Comprometerse:,
git add -Aluegogit commit -m "<something>" - Tenga en cuenta que A
document.txttodavía contiene CRLF (y eliminarlo y restablecer con--harddevuelve la versión todavía con CRLF)
- SCP todo el directorio a la computadora B
- Agregar un nuevo archivo que
new filecontenga CRLF - Comprometerse:,
git add -Aluegogit commit -m "<something>" - Tenga en cuenta que B
document.txty Bnew filetodavía contienen CRLF
- Lleva el maestro de B a A:
git pull <remote> master:master_recv - A
document.txtha cambiado a LF. El archivo agregadonew filetambién contiene LF.
El problema no ocurre si B es una máquina con Windows.

core.autocrlfSiempre ha sido falso? ¿Parece que ya tienes\nfinales de línea en tu repositorio? No hay ninguna configuración para cambiar\nen su repositorio\r\nen su directorio de trabajo.Respuestas:
Dentro de su proyecto, debería haber un
.gitattributesarchivo. La mayoría de las veces, debería verse como a continuación (o esta captura de pantalla ):Cambie
* text=autoa* text=falsepara deshabilitar el manejo automático (ver captura de pantalla ).Me gusta esto:
Si su proyecto no tiene un archivo .gitattributes, los finales de línea los establecen sus configuraciones de git. Para cambiar sus configuraciones de git, haga esto:
Vaya al archivo de configuración en este directorio:
1) C: \ ProgramData \ Git \ config
2) Abra el archivo de configuración en Notepad ++ (o cualquier editor de texto que prefiera)
3) Cambie "autocrlf =" a falso.
fuente
* text=falseno desarma el texto: deja el texto configurado con el valor de cadena falso. Esto tiene el mismo efecto que dejar el texto sin especificar (no específicamente sin definir). El uso* -textle da la configuración especial de desarmado. Desmarcar el atributo de texto en una ruta le dice a git que no intente ninguna conversión de final de línea al registrarse o al finalizar la compra.* text=falseno tiene efecto. ¡Por favor arregle la respuesta!Una solución simple es:
git config --global core.autocrlf falsegit add --renormalize .Si se realizan conversiones automáticamente, eso significa que hay una
.gitattributescore.eoldirectiva dentro del repositorio.Con Git 2.8+ (marzo de 2016) , verifique si todavía hay transformación eol con:
fuente
autocrlfHOY! unsettedautocrlfes equivalente afalse. Te quedaste detrás de los movimientos de moda en Git1.8.5.2.Me lo imaginé. Parece que el programa SCP estaba convirtiendo los finales de línea. Me di cuenta de esto cuando intenté crear deliberadamente un archivo con terminaciones LF y luego observé que aparecía como CRLF cuando lo descargué.
Dado que esta fue la solución para mí, acepto esta respuesta, pero las personas del futuro también deberían consultar las otras respuestas para obtener una solución más general.
fuente
Del tema "Efectos" de la página del manual de gitattributes (5)
core.autocrlfen el nuevo (1.7.2+) Git no se usa,core.eoly la configuración correcta | desarmado del atributo de texto se considera una forma más confiablefuente
.gitattributesembargo, en el archivo, había deshabilitado explícitamente todo como texto, ¿verdad? Además, no lo veo con una opción para que no haga conversión (aunquecrlfpodría no tener ningún efecto).texty evitar cualquier conversión, debe establecer .gitattributes en* -texty no en* text=false.falseno es un valor válido para eltextatributo; git no lo reconocerá y, en su lugar, volverá a su configuración predeterminada de autocrlf. Además, después de cambiar eltextvalor, debe hacer una copia de seguridad de todos los archivos de su repositorio local, hacer una confirmación, luego restaurar los archivos con el final de línea correcto según los necesite y volver a confirmarlos. Entonces, git no volverá a modificar el final de las líneas.