¿Cómo fuerzo git para usar en lugar de LF CR + LF debajo de las ventanas?

StackOverflow https://stackoverflow.com/questions/2517190

  •  22-09-2019
  •  | 
  •  

Pregunta

Quiero forzar a git checkout archivos en Windows utilizando simplemente no LF CR+LF. Revisé las dos opciones de configuración, pero yo no era capaz de encontrar la combinación correcta de configuración.

Quiero que convertir todos los archivos a LF y mantener el LF en los archivos.

Nota: He utilizado autocrlf = input pero es algo que repara los archivos cuando los cometí. Quiero forzarlo para conseguir que el uso de LF.

Probablemente no era tan clara: el repositorio ya está utilizando LF pero los archivos desprotegido usando msysgit están utilizando CR+LF y quiero forzar msysgit a conseguir con LF: obligando a los finales de línea Unix .

>git config --list | grep crlf
core.autocrlf=input
¿Fue útil?

Solución

El PO añadido en su pregunta:

  

los archivos extraídos utilizando msysgit están utilizando CR+LF y quiero forjar msysgit a conseguir con LF

Un primer paso simple todavía estaría en un archivo .gitattributes:

*.txt -crlf

, para evitar cualquier conversión CRLF para los archivos con eol correcta.

Las mejores prácticas para multiplataforma git config ?


Pero un segundo más potente paso implica una gitattribute filtro controlador y añadir un paso mancha

controlador de filtro

Cada vez que usted actualice su árbol de trabajo, un guión podría, sólo para los archivos que se han especificado en el .gitattributes, forzar el LF eol y cualquier otra opción de formato que desea aplicar.
Si el guión "clear" no hace nada, tendrá que (después de cometer) transformaron sus archivos, aplicando exactamente el formato que los necesita para seguir.

Otros consejos

La forma más adecuada para obtener terminaciones LF en Windows es a primera core.autocrlf conjunto de false:

git config --global core.autocrlf false

Es necesario hacer esto si está utilizando msysgit, ya que establece que a true en la configuración del sistema.

Ahora Git no hará ninguna línea que termine la normalización. Si desea que los archivos del registro de entrada a ser normalizado, hacer esto: Conjunto text=auto en su .gitattributes para todos los archivos:

* text=auto

Y conjunto core.eol a lf:

git config --global core.eol lf

Ahora se puede también cambiar repositorios individuales a CRLF (en el directorio de trabajo!) Ejecutando

git config core.eol crlf

Después de haber hecho la configuración, es posible que desee git para normalizar todos los archivos en el repo . Para ello, vaya a la raíz de la cesión temporal y ejecutar estos comandos:

git rm --cached -rf .
git diff --cached --name-only -z | xargs -n 50 -0 git add -f

Si ahora quieres que Git también normalizar los archivos en el directorio de trabajo , ejecute estos comandos:

git ls-files -z | xargs -0 rm
git checkout .

vuelvo a esta respuesta con bastante frecuencia, aunque ninguno de estos son del todo bien para mí. Dicho esto, la respuesta correcta para mí es una mezcla de los otros.

Lo que encuentro obras es la siguiente:

 git config --global core.eol lf
 git config --global core.autocrlf input

Para las cesiones temporales que han sido analizados a cabo después de que se establecen los valores globales, todo va a ser desprotegido como lo es en la repo - esperemos LF (\n). Cualquier CRLF se convertirá a solo LF en el registro.

Con una cesión temporal existente que ya ha desprotegido - que tiene los finales de línea correctos en el repositorio pero no su copia de trabajo - puede ejecutar los siguientes comandos para solucionarlo:

git rm -rf --cached .
git reset --hard HEAD

Esto eliminará (rm) de forma recursiva (r) sin preguntar (-f), todos los archivos excepto los que ha editado (--cached), desde el directorio actual (.). El reset vuelve entonces todos esos archivos a un estado en el que tienen sus verdaderos finales de línea (que coinciden con lo que hay en el repositorio).

Si necesita fijar los finales de línea de los archivos de una cesión temporal, recomiendo agarrar un editor que le permitirá hacer que, en mayor o igual que IntelliJ sublime texto, pero estoy seguro de que cualquier buena probable que apoyar esto.

Contexto

Si

  1. quieren obligar a todos los usuarios finales de líneas LF para archivos de texto y
  2. no se puede garantizar que todos los usuarios cambien su git config,

Puede hacer que a partir de git 2.10. se requiere 2,10 o más tarde, porque 2,10 fijado el comportamiento de texto = auto junto con eol = LF . Fuente .

Solución

Ponga un archivo .gitattributes en la raíz de su repositorio Git que tiene la siguiente contenido:

* text=auto eol=lf

cometerlo.

Opcional ajustes

También puede agregar un .editorconfig en la raíz de su repositorio para asegurar que las herramientas modernas crea nuevos archivos con los finales de línea deseada.

# EditorConfig is awesome: http://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

core.autocrlf=input es la configuración correcta para lo que quiere, pero es posible que tenga que hacer un git update-index --refresh y / o una git reset --hard para que el cambio tenga efecto.

Con el conjunto core.autocrlf a input, Git no se aplicará nueva línea de conversión a la salida (por lo que si usted tiene LF en el repositorio, obtendrá LF), pero se asegurará de que en caso de que desordenar e introducir algunos CRLFs en la copia de trabajo de alguna manera, no van a hacer su camino en el repositorio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top