2009-10-21 10 views
46

He configurado Git para que no emita terminaciones de línea inconsistentes. El problema con eso es que una pila completa de archivos aparecen modificados aunque no lo sean. ¿Qué escribo para que estos archivos tengan las terminaciones de línea fijadas en el lado local?Hacer que Git "LF sea reemplazado por CRLF" las advertencias desaparecen

# git checkout dev 
M src/au/policy/dao/EmailQueue.java 
M src/au/policy/dao/EmailQueueFactory.java 
M src/au/policy/dao/PolicyPublisher.java 
Already on 'dev' 

# git diff 
warning: LF will be replaced by CRLF in src/au/policy/dao/EmailQueue.java 
warning: LF will be replaced by CRLF in src/au/policy/dao/EmailQueueFactory.java 
warning: LF will be replaced by CRLF in src/au/policy/dao/PolicyPublisher.java 

Esto es lo que he añadido a mi archivo de configuración de Git, que parece hacer lo que pretendía al margen de este asunto:

autocrlf = true 
+0

¿Sería posible eliminar los archivos ofensivos y volver a verificarlos de alguna manera? – corydoras

+0

Sí, si no hay otra diferencia que la finalización del enlace, simplemente elimine y vuelva a verificar los archivos ofensivos. –

+0

Relacionado, pero no necesariamente, una pregunta duplicada: [git reemplazando LF con CRLF] (http://stackoverflow.com/questions/1967370/git-replacing-lf-with-crlf). –

Respuesta

16

Usted puede simplemente eliminar y volver a partida de los archivos involucrados desde el índice de este tipo:

rm <files> 
git checkout -- <files> 

O, si son los únicos archivos modificados (tener cuidado con este comando), puede crear un script como si fuera esto:

git diff --name-only --diff-filter=M | xargs rm -- 
git checkout -- . 

en un sistema GNU se puede utilizar un tubo de un poco más segura, pero no parecen tener espacios u otros caracteres que delimitan en los nombres de archivo en cualquier caso.

git diff -z --name-only --diff-filter=M | xargs -0 rm -- 
24

Lo único que puedo pensar es comprobar si core.safecrlf se establece en warn.

git config --get core.safecrlf

Yo creo valores posibles son true, false y warn. Creo que la configuración de false resolverá la advertencia, aunque puede que no sea una buena idea.

+0

Al establecerlo en falso lo hizo. ¡Gracias! –

+1

Esto probablemente solo está ocultando el mensaje pero aún conserva el efecto del cambio cr/lf. –

+1

El ajuste 'safecrlf' a' false' puede dañar los archivos binarios, por eso se predetermina a 'warn'. – Walf

60

Esto puede ocurrir si cambia core.autocrlf variable de configuración (si entiendo su problema correctamente).

Si está en estado limpio, es decir, justo después de cometer, y que no tienen cambios uncomitted, obligación de volver a la salida y la eliminación de índice debe hacer el truco:

El comando a continuación se git reset --hard HEAD haga que su rama actual apunte a la última confirmación y se perderá todo el código no asignado. Asegúrese de cometer el código o tomar la copia de seguridad

$ rm .git/index 
$ git reset --hard HEAD 

Eso, creo, sería sincronizar los dos archivos de área de trabajo, y el índice (área de ensayo) para seguir la configuración de CRLF.

+3

Obviamente, sabes que tu git funcionó muy bien para mí. ¡Gracias! ¡De Verdad! ¡Muchas gracias! –

+0

debe considerar esto como una respuesta aceptada. muy bien trabajado @jakub –

2

Prueba de esto, que trabajó para mí:

cd src/au/policy/dao 
dos2unix 

Si hay otros archivos de esa carpeta, a continuación, usted querrá dividirla en los siguientes (de lo contrario, tratar de hacerlo en cada archivo en los subdirectorios, que puede tardar un tiempo):

cd src/au/policy/dao 
dos2unix EmailQueue.java 
dos2unix EmailQueueFactory.java 
dos2unix PolicyPublisher.java 

se corrió muy rápido en mi máquina y se fijaron todos los finales de línea, y es un poco más simple y más fácil que algunas de estas otras correcciones.

+0

no funciona para mí. – luckytaxi

31

Tuve este problema al crear un nuevo proyecto Xcode. Mi solución para este problema:

En escritura terminal de

$: git config --global --edit 

Luego, en git config de modificación del archivo safecrlf a falsa. Mi configuración:

[core] 
    autocrlf = input 
    safecrlf = false 

Sé que git tiene herramientas de línea cmd para esto, pero no funcionan para mí. Y luego Xcode crea repositorios git sin ningún problema.

+2

@Andrei Es probable que use [vim] (http://www.vim.org/) como editor, presione escape para salir del modo de entrada y escriba ': wq' para guardar y salir. – GP89

+0

la única solución que funcionó para mí, todas las demás fallaron, en "git version 1.8.1.msysgit.1" windows 7 (git bash) –

Cuestiones relacionadas