¿Cómo fuerzo git para usar en lugar de LF CR + LF debajo de las ventanas?
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
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 conLF
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
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
- quieren obligar a todos los usuarios finales de líneas LF para archivos de texto y
- 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.