Git 'fatal: no se puede escribir un nuevo archivo de índice'

128

He visto muchos de los otros hilos sobre esto y no ayudan.

Tengo un repositorio muy simple: dos archivos JavaScript. Tengo más de 100 GB en Macbook. Cuando intento mover los archivos a un subdirectorio y poner en escena localmente los cambios que obtengo ...

fatal: no se puede escribir un nuevo archivo de índice

Esto sucede si hago todas las acciones en la terminal o si uso una GUI como SourceTree. Además, uno de los archivos se bloquea y no puedo eliminar el directorio de trabajo hasta que cierre la sesión y vuelva a iniciarla.

¿Por qué está pasando esto? ¿La cerradura impide que algo se ponga en escena? Si es así, ¿qué / cómo desbloqueo el archivo del problema en OS X? El repositorio remoto es Google Code, si eso marca la diferencia, aunque todavía no lo estoy presionando. Todo es local.

Jeff
fuente
¿No está seguro de si esto debería ir a SuperUser en su lugar?
MMM
probablemente un problema con los derechos de acceso (el usuario que ejecuta git no tiene permiso de escritura para todo el repositorio)
Nevik Rehnel
Hay hilos sobre esto en SO y SU. Creo que la pregunta funciona igualmente bien en cualquiera de los dos. Nevik, los permisos para el repositorio son 777, incluida la ./gitcarpeta.
Jeff
¿Cuándo ves este problema? ¿Es cuando haces un "git mv" o "git add"?
Mayur Nagekar

Respuestas:

221

En mi caso, el disco se quedó sin espacio, por lo que tuve que eliminar archivos del disco duro para hacer espacio.

Alexander Bird
fuente
64

He tenido este mismo problema durante los últimos días. Básicamente, sin mi conocimiento, todo el repositorio se había movido a un nuevo sistema de archivos, cuando intenté ejecutar el estado de git, de repente me informaba que cada archivo en el repositorio había sido actualizado.

Soluciones posibles

Entonces, después de mucho buscar en Google, probé lo siguiente:

  • Cambio de permisos .git (mismo problema)
  • cambio de permisos .git / index (mismo problema)
  • git agregando todos los cambios para confirmar (mismo problema)
  • git rm-ing eliminó archivos, ya que informaban errores de nombre de archivo demasiado largos (mismo problema)
  • git reset (soft | Head | Hard) (mismo problema)
  • git clean (mismo problema)
  • Desactivar Windows Defender (mismo problema)
  • actualización de git (mismo problema)
  • diferentes clientes git (uso gitbash) (mismo problema)
  • beber 2 cafés en lugar de 1 (mismo problema)

tl: dr - solución sucia

Lo único que logró resolver el problema fue copiar el archivo de índice, eliminar el original y cambiar el nombre de la copia.

Sé que no es realmente una 'solución', pero ahora funciona mágicamente> <, con todos los archivos / ramas intactos. Si alguien sabe por qué esto podría funcionar, dígaselo.

sala de teatro
fuente
82
Encontramos otra causa más: puede que se quede sin espacio en disco.
lennartcl
21
En mi caso, Google Drive estaba cargando (copia de seguridad) archivos y se bloquearon durante el proceso. Después de que haya terminado de cargar, la confirmación funcionó.
Kristjan O.
3
Gracias por el consejo sobre Google Drive. Tuve el mismo problema, pero con Dropbox.
hgolov
1
Reiniciar funcionó para mí. Trabajando en una unidad compartida medio vacía de 22 TB, por lo que el espacio no era un problema.
Wayne F. Kaskie
1
su "solución sucia" funcionó para mí (regresó a un archivo de índice anterior, volvió a agregar y volvió a confirmar todos los cambios desde entonces)
trust_words
19

En mi caso, pausar la sincronización de Dropbox resolvió el problema

tonymayoral
fuente
17

Tuve el mismo problema en una Mac. Parece ser causado por las ACL del sistema de archivos. Intente chmod -RN /path/to/repoborrar las ACL. Después de hacer esto pude cometer cambios. Usando el truco para copiar el archivo de índice, eliminar el original y mover la copia hacia atrás logró el mismo resultado.

usuario2465454
fuente
Si su cuenta de usuario tuvo problemas de permisos recientemente, podría causarle problemas. En mi caso, fue un problema de integración de Active Directory lo que me dejó con las ACL problemáticas.
kris
17

Si tiene su configuración de github en algún tipo de servicio de sincronización en línea, como google drive o dropbox, intente deshabilitar la sincronización ya que el servicio de sincronización intenta leer / escribir en el archivo ya que github intenta hacer lo mismo, lo que hace que github no funcione correctamente.

Chip de maíz
fuente
Esta es la solución que funcionó para mí. ¡Gracias!
Macondo
7

Me sucedió que el archivo .git / index estaba siendo utilizado por otro proceso (mi servidor web de desarrollo local). Cerré el proceso y luego funcionó.

gls123
fuente
6

El cierre del código de Visual Studio (que en mi caso tiene un trabajo en segundo plano de carga automática que se ejecuta en guardar archivos) resolvió el problema por mí.

Crédito por la solución: mi amigo y colega Arnel.

Spyryto
fuente
Cerré el servidor de nodeJs donde se estaba ejecutando mi aplicación angularJs y se desbloqueó el índice
Radu Linu
6

Esto funcionó para mí:

rm -f ./.git/index.lock
Por la victoria
fuente
6

En mi caso, la solución solo agregaba permiso al nuevo usuario.

Cuando instalé un nuevo sistema operativo, moví mis repositorios y estaba mostrando este error exacto. Seleccioné la carpeta raíz y luego agregué al usuario autenticado para verificar todo ingrese la descripción de la imagen aquí

MD Alim Ul Karim
fuente
3

Tenía ACL (de alguna manera) adjunto a todos los archivos en la carpeta .git.

Compruébalo ls -leen la carpeta .git.

Puede eliminar la ACL con chmod -N(para una carpeta / archivo) o chmod -RN(recursivo)

Tim
fuente
3

Creo que algunas soluciones de respaldo en segundo plano como Google Backup y Sync bloquean el acceso al archivo de índice. Cerré la aplicación y Sourcetree no tuvo ningún problema. Parece que Dropbox hace lo mismo (@tonymayoral).

J-Schaefer
fuente
2

En mi caso fue un EGit concurrente. Después de reiniciar eclipse, funciona como de costumbre.

Phil R.
fuente
la pregunta es "¿por qué está ocurriendo el mensaje de error?" y esta respuesta describe otra causa potencial.
robar
2

Si está en un cuadro de Windows, asegúrese de que el programa que está utilizando, ya sea Source Tree o un terminal git, se esté ejecutando como administrador. Recibía el mismo mensaje de error exacto. Puede hacer clic derecho en el programa para ejecutarlo como administrador o cambiar sus propiedades para que siempre se ejecute como administrador.

wonster
fuente
2

No tener suficiente espacio es un problema. Limpieza e intente nuevamente

Vijay SB
fuente
2

Yo tuve el mismo problema. Reinicié mi computadora y el problema se resolvió.

Enayat
fuente
1

¿Intentaste 'git add'? . ¿serán todos los cambios? (puede eliminar archivos añadidos innecesarios mediante git reset HEAD)

Usuario123456
fuente
1

El mensaje de error fatal: Unable to write new index filesignifica que no pudimos escribir el nuevo contenido en el archivo de índice git .git\index(consulte aquí para obtener más información sobre el índice git). Después de revisar todas las respuestas a esta pregunta, resumo las siguientes causas raíz:

  • El tamaño del nuevo contenido excede la capacidad disponible del disco. ( Solución : limpie los espacios en disco)
  • Los usuarios no tienen derecho de acceso a este archivo. ( Solución : conceder el permiso)
  • Los usuarios tienen permiso pero .git\indexestán bloqueados por otros usuarios o procesos. ( Solución : desbloquee el archivo)

El enlace Averiguar qué proceso está bloqueando un archivo o carpeta en Windows especifica el siguiente enfoque para descubrir el proceso que está bloqueando un archivo específico:

SysInternals Process Explorer: vaya a Buscar> Buscar controlador o DLL. En el cuadro de texto "Identificador o subcadena de DLL:", escriba la ruta al archivo (por ejemplo, "C: \ ruta \ a \ archivo.txt") y haga clic en "Buscar". Se deben enumerar todos los procesos que tienen un identificador abierto para ese archivo.

Use el enfoque anterior para encontrar qué proceso bloqueó .git\indexy luego detenga el ejecutable de bloqueo. Esto se desbloquea .git\index.

Por ejemplo, Process Explorer Search muestra que .git\indexestá bloqueado por vmware-vmx.exe. La suspensión de la máquina virtual VMWare Player (que accedió al repositorio de git a través de una carpeta compartida) resolvió el problema.

Ventilador
fuente
Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia. - De la opinión
Al Sweigart
@Al, actualicé mi respuesta de acuerdo a su sugerencia.
Fan
0

SI TIENE ESTO DURANTE UNA REEMBOLSO:

Esto es probablemente causado por algún software que bloquea el archivo de índice de su repositorio, como software de respaldo, antivirus, IDEs u otros clientes git.

En la mayoría de los casos, el bloqueo es solo por un breve momento y, por lo tanto, se produce por falta de tiempo y mala suerte.

Sin embargo, git rebase --continuese quejará de que el siguiente comando es una confirmación vacía:

The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Para solucionar esto, simplemente ejecute git resete intente git rebase --continuenuevamente.

qwertzguy
fuente
0

Problema: cuando estaba revisando algunos archivos modificados en git, recibí este error. Estaba teniendo dos usuarios ABC y XYZ. los archivos tienen uid: gid de ABC pero no tiene acceso git y está tratando de pagar los archivos con el mismo.

La solución que probé: XYZ es tener acceso git, intenté revisar archivos con sudo y funcionó ... !!

Dilip Kumar K
fuente
0

Esto es lo que funcionó para mí:

Contexto:

  1. Construyendo un proyecto en un servidor

  2. git status devuelve un HEAD detached at <commit-SHA>

  3. Cualquier operación que hice localmente, tuve este error. Más específicamente:

    • git checkout
    • git reset HEAD --hard

Solución

  1. Simplemente eliminó el archivo <work-dir>/.git/index.
  2. A git statusindicaría que no se realiza un seguimiento de todos los archivos en el proyecto (no sorprende aquí).
  3. git reset HEAD --hard
  4. Volver a HEAD detached at <commit-SHA>cuando hacer un git status, pero entonces deberías poder
  5. git checkout <some-branch>

y vuelves a la pista!

!! IMPORTANTE !!

Esto funciona solo porque estoy construyendo "merly". No se ha realizado ninguna modificación preciosa en el código. Si realmente está en "tiempo de desarrollo", entonces recomendaría guardar su trabajo primero o elegir otro método.

Espero que ayude :).

avi.elkharrat
fuente
0

Tuve este problema al usar GitExtensions en Windows. Se solucionó otorgando un permiso completo para el usuario actual (yo) en la carpeta que contenía el repositorio.

En otra ocasión, aunque recibí el error de Git Extensions, pude confirmar los mismos archivos de Visual Studio 2015.

En otra ocasión tuve que eliminar el archivo "índice" de la carpeta .git

Rob Bowman
fuente
0

Mi caso es un poco interesante:

Ejecuto git log para verificar un cierto commit, luego no lo dejé correctamente, presiono ctrl + c para salir.

Entonces el índice parece bloqueado. Entonces ejecuto git log nuevamente, luego presiono Q para salir.

Problema fijo. :)

Jim Yu
fuente
0

En mi caso, fue una nodemoninstancia que observaba el sistema de archivos en busca de cambios.

Stephan Ahlf
fuente