git: no se puede indexar el file – permiso denegado

Solo para un file, recibo el siguiente error:

error: unable to write sha1 filename /opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47: Permission denied error: wp/wp-admin/css/theme-install.dev.css: failed to insert into database fatal: unable to index file wp/wp-admin/css/theme-install.dev.css 

Revisé mis permissions en el file en cuestión, el directory de objects .git en cuestión y .git en sí mismo. Puedo agregar cualquier otro file excepto este. Pude stat/r/w/touch el file, y tocarlo no ayudó. Los permissions son todos correctos.

¿Es esto un error loco?

Mirando el código fuente de Git ( sha1_file.c , function move_temp_to_file() ) parece que Git no puede cambiar el nombre de un file temporal llamado /opt/www/.git/objects/3f/tmp_obj_XXXXXX (donde XXXXXX tiene seis caracteres aleatorios) para /opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47 . Esto puede suceder si no tiene permiso para eliminar files en /opt/www/.git/objects/3f .

Algunas cosas para probar:

  • Si varios usuarios acceden al repository de Git, es posible que deba ejecutar algo como git config core.shanetworkingRepository 0664 (consulte la git help config para get más información) para asegurarse de que los directorys y files creados recientemente tengan los permissions adecuados para todos los usuarios del repository.
  • Intente ejecutar rm -f /opt/www/.git/objects/3f/tmp_obj_* y vea si eso hace que el problema desaparezca.
  • Vea si puede reproducir el problema fuera de Git haciendo lo siguiente:

     mkdir -p /opt/www/.git/objects/3f cd /opt/www/.git/objects/3f rm -f tmp_obj_* ce3587c54a8be14c69b08c6b01f94949b11b47 echo "testing" >tmp_obj_abcdefg mv tmp_obj_abcdef ce3587c54a8be14c69b08c6b01f94949b11b47 rm -f tmp_obj_abcdefg 

    Asegúrese de ejecutar los commands anteriores al mismo usuario que experimentó el error.

  • Pruebe de forma recurrente y chmod el directory de objects.

Si estás usando Visual Studio o algo similar que está generando el file mdf, simplemente cierra VS y vuelve a intentar tu command git. Esta vez debería funcionar.

No tiene permiso para escribir en /opt/www/.git/objects/3f .

La solución más rápida es usar el command sudo para ejecutar su command con privilegios de administrador.

sudo <Your git command>

Lo resolvió para mí.