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.git
directorio creado )- Crea un nuevo archivo
.gitignore
en el repositorio - Cree un nuevo archivo
.gitattributes
en 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.txt
en el repositorio que contenga CRLF - Comprometerse:,
git add -A
luegogit commit -m "<something>"
- Tenga en cuenta que A
document.txt
todavía contiene CRLF (y eliminarlo y restablecer con--hard
devuelve la versión todavía con CRLF)
- SCP todo el directorio a la computadora B
- Agregar un nuevo archivo que
new file
contenga CRLF - Comprometerse:,
git add -A
luegogit commit -m "<something>"
- Tenga en cuenta que B
document.txt
y Bnew file
todavía contienen CRLF
- Lleva el maestro de B a A:
git pull <remote> master:master_recv
- A
document.txt
ha cambiado a LF. El archivo agregadonew file
también contiene LF.
El problema no ocurre si B es una máquina con Windows.
core.autocrlf
Siempre ha sido falso? ¿Parece que ya tienes\n
finales de línea en tu repositorio? No hay ninguna configuración para cambiar\n
en su repositorio\r\n
en su directorio de trabajo.Respuestas:
Dentro de su proyecto, debería haber un
.gitattributes
archivo. La mayoría de las veces, debería verse como a continuación (o esta captura de pantalla ):Cambie
* text=auto
a* text=false
para 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=false
no 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* -text
le 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=false
no tiene efecto. ¡Por favor arregle la respuesta!Una solución simple es:
git config --global core.autocrlf false
git add --renormalize .
Si se realizan conversiones automáticamente, eso significa que hay una
.gitattributes
core.eol
directiva dentro del repositorio.Con Git 2.8+ (marzo de 2016) , verifique si todavía hay transformación eol con:
fuente
autocrlf
HOY! unsettedautocrlf
es 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.autocrlf
en el nuevo (1.7.2+) Git no se usa,core.eol
y la configuración correcta | desarmado del atributo de texto se considera una forma más confiablefuente
.gitattributes
embargo, 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 (aunquecrlf
podría no tener ningún efecto).text
y evitar cualquier conversión, debe establecer .gitattributes en* -text
y no en* text=false
.false
no es un valor válido para eltext
atributo; git no lo reconocerá y, en su lugar, volverá a su configuración predeterminada de autocrlf. Además, después de cambiar eltext
valor, 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.