2012-05-13 16 views
40

Estoy usando Windows. Al organizar archivos obtengo este error.¿Por qué aparece 'Actualizar el índice de Git'?

Updating the Git index failed. A rescan will be automatically started to resynchronize git-gui.

seguido de una lista de archivos que se han convertido de LF a CRLF

Después de mucho leer sobre el tema CRLF/LF con Git multiplataforma uso, yo más o menos entiendo qué está pasando, y estoy tratando de determinar qué configuración de autocrlf es la mejor para mí, pero no puedo entender por qué Git dice que Falló la actualización del índice. Tengo entendido que ha convertido los EOF, cuál es el problema y por qué me dice que la actualización del índice ha fallado. ¿Debo arreglar algo (aparte de elegir una configuración autocrlf adecuada) o puedo simplemente proceder

Tengo dos opciones Continuar y Desbloquear índice, qué significan estos y cuál es el mejor curso de acción.

+0

Posible duplicado de [LF será reemplazado por CRLF en git - ¿Qué es eso y es importante?] (Https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf- in-git-what-is-that-and-is-it-important) –

Respuesta

40
git config --global core.autocrlf false 

Siempre ha sido mi recomendación (ver "Git 1.6.4 beta on Windows (msysgit) - Unix or DOS line termination").

Sin embargo, en su caso, puede "continuar", pero esta advertencia hay de mencionar la conversión de ciertos archivos puede no ser reversible:

core.safecrlf 

Si es verdad, hace cheque git si la conversión CRLF es reversible cuando la conversión al final de la línea está activa. Git verificará si un comando modifica un archivo en el árbol de trabajo directa o indirectamente. Por ejemplo, si se compromete un archivo seguido de la extracción del mismo archivo, se obtendrá el archivo original en el árbol de trabajo. Si este no es el caso para la configuración actual de core.autocrlf, git rechazará el archivo.
La variable se puede establecer en "advertir", en cuyo caso, git solo advertirá sobre una conversión irreversible pero continuará la operación.

Si no desea ver esta advertencia, como se explica en this thread, se puede establecer core.safecrlf a false.

También puede esconder sus archivos a través del menú de herramientas de git gui, y agregar algunas opciones a esas herramientas con, por ejemplo, este git config file.
El interés es que, para cada herramienta, se puede añadir:

guitool.<name>.norescan 

No escanear el directorio de trabajo para los cambios después de la herramienta finaliza la ejecución.


Podría por favor elaborar un poco en Desbloquear Índice

se puede ver que el mensaje en el index.tcl git-gui script: elimina el archivo index.lock el git-gui crea cuando la manipulación de la índice.
Se puede ver más en el "lockfile API" documentation page:

La exclusión mutua.
Cuando escribimos un nuevo archivo de índice, primero creamos un nuevo archivo $GIT_DIR/index.lock, escribimos los contenidos nuevos y lo cambiamos al destino final $GIT_DIR/index.
Intentamos crear el archivo $GIT_DIR/index.lock con O_EXCL para que podamos darnos cuenta y fallar cuando alguien más ya está tratando de actualizar el archivo de índice.

+1

Gracias por su respuesta integral, pero menciona la advertencia un par de veces, pero ese es exactamente mi problema, no implica que sea una advertencia, sino un error. '¿Ha fallado la actualización del índice Git? ... ¿o estoy malinterpretando esto? – byronyasgur

+0

@byronyasgur el hilo que menciono en la respuesta se refiere a este mensaje como una "advertencia", supongo porque no * falla * completamente el comando git. Solo lo interrumpe y le pide que elija (a menos que especifique "norescan'" o "core.safecrlf' to' false') – VonC

+0

Estoy empezando a comprender. ¿Puede explicar la diferencia entre esas dos opciones o señalarme un recurso que sí lo hace? Parece que no puedo descubrir qué se entiende por Desbloquear y Continuar en este contexto. – byronyasgur

1

También me encontré con esto, incluso aunque mi entorno core.autocrlf ya está false y core.safecrlf no está definido. Sospecho que el culpable es la configuración de configuración diff.astextplain.textconv.

Cuando me encontré con git config --list, la siguiente línea se muestra en la salida:

diff.astextplain.textconv=astextplain 

no creo que este ajuste está realmente relacionado con la advertencia/error, sino que me inspiró a mirar en la conversión de texto que podría estar siendo hecho. Después de un poco de espeleología en línea y en mi repo, descubrí la siguiente línea en .gitattributes de mi repo archivo:

* text=auto 

[. Probablemente consiguió el .gitattributes de archivos desde GitHub]

Given que solo la línea anterior no fue comentada en él, y además que lidiar con las conversiones de final de línea 'automágicas' ha sido siempre sido un dolor de cabeza, opté por eliminar ese archivo de mi repositorio. Después de hacerlo, la puesta en escena de los mismos archivos ya no me provocó la advertencia/error "Actualización del índice de Git".

Cuestiones relacionadas