2010-10-26 7 views
44

tengo este problema cuando trato de empujar en git:git: no se puede empujar (error desencajonadora) en relación con el permiso emite

error: insufficient permission for adding an object to repository database ./objects 

fatal: failed to write object 
error: unpack failed: unpack-objects abnormal exit 
To ssh://<repo url>/<repo dir> 
! [remote rejected] master -> master (n/a (unpacker error)) 
error: failed to push some refs to 'ssh://<repo url>/<repo dir>' 

que he tenido esto antes esporádicamente y siempre hemos tenido que resolverlo por cada usuario sshing al repositorio y el establecimiento de permisos de grupo de todos los archivos en la misma con

chmod -R g+w * 

Esto nunca fue una solución satisfactoria y ahora nos ha mordido en el culo como uno de los chicos es de distancia y no- uno conoce la contraseña de usuario de su repositorio. Por lo tanto, estoy tratando de resolverlo correctamente.

Parece que el error ocurre cuando alguien intenta presionar un cambio que alterará un directorio repo que es propiedad de otro usuario (por lo tanto, estableciendo la opción de escritura de grupo anterior). He hecho un poco de búsqueda en Google y he encontrado un par de soluciones discutidas (ninguna de las cuales me funcionó)

1) asegúrese de que el grupo con el que se comparten los directorios de repos sea el primario de cada usuario grupo (creo que es el caso ya: cada usuario tiene un solo grupo por lo que debe ser su grupo principal, a la derecha)

2) git repo entorno core.sharedRepository, como se detalla aquí: Git: Can't push from one computer me cambió esto, pero no hizo ninguna diferencia. ¿Necesito volver a cargar la configuración o algo para realmente afectar el cambio?

Aquí es lo que mi repo config parece atm:

[core] 
     repositoryformatversion = 0 
     filemode = true 
     bare = true 
     sharedRepository = all 
[receive] 
     denyNonFastForwards = True 

agradecido por cualquier consejo o sugerencias! max

+0

¿Puede dar repo prueba mínima que produce ese problema? Puedo obtenerlo siempre si tengo un directorio '.GIT' (mayúsculas) en el repositorio. –

Respuesta

3

Uso gitosis para gestionar este tipo de cosas. Gitosis tiene un único usuario (generalmente llamado "git") que posee todos los repositorios, y utiliza control de acceso basado en clave pública para cada repositorio. Puede que no sea adecuado para tu configuración, pero probablemente valga la pena echarle un vistazo (sin juego de palabras).

+1

También hay gitolita (http://github.com/sitaramc/gitolite), que es una especie de versión actualizada y mejorada de gitosis. – ebneter

+0

Gracias chicos. Pero, ¿necesito reconstruir mi repositorio desde cero utilizando gitosis/gitolita? –

+1

No. Solo inserta tu cabeza existente en el repositorio de gitosis, o copia tu directorio de repositorio en el creado por gitosis. –

24

Una forma más sencilla de hacerlo es agregar un script posterior a la recepción que ejecuta el comando chmod después de cada inserción en el repositorio 'hub' en el servidor. Añadir la siguiente línea de ganchos/post-recepción dentro de la carpeta git en el servidor:

chmod -Rf u+w /path/to/git/repo/objects 
+0

Gracias por esta respuesta, he estado lidiando con el mismo problema y simplemente no estaba dispuesto a configurar todo un paquete de gestión de repos para lidiar con el problema. – Kelly

+2

Este script post-recepción funcionó para mí: chown -R git: git /home/git/repositories/myrepo.git/objects/ – fjsj

+3

podría ser también un problema del propietario, si algunas carpetas/archivos en el repositorio remoto fueron modificados/creados por un otro usuario remoto, diferente de pusher –

1

yo estaba teniendo problemas con esto también, pensando en mi control remoto gitolite-admin se corrompe o algo malo.

Mi configuración es Mac OS X (10.6.6) portátil con servidor remoto Ubuntu 10 con gitolite.

Resultó que el problema fue con mi local pago y envío de gitolite-admin.

A pesar del error "desempaquetar fallido", resultó que el problema era local.

Me di cuenta de esto revisándolo de nuevo como gitolite-admin2, haciendo un cambio y empujando.

Voila! ¡Funcionó!

+0

Para mí, el problema también estaba en el repositorio local (probablemente porque utilicé una versión anterior de git en las estructuras .git de una versión más nueva). git push no funcionaba, pero git clone sí, así que cloné mi repositorio local y luego trasplanté el nuevo .git en el repositorio local. ¡Gracias por la pista! –

5

En caso de que alguien más esté atascado en esto: significa que los permisos de escritura son incorrectos en el repositorio al que está presionando.Vaya a chmod -R para que el usuario al que está accediendo al servidor git tenga acceso de escritura.

http://blog.shamess.info/2011/05/06/remote-rejected-na-unpacker-error/

Simplemente funciona.

+1

Publique el contenido de las respuestas externas en stackoverflow: para el caso en que la url externa caiga. – ThorSummoner

+0

@ThorSummoner Hecho. – sjas

8

Es un error de permiso. La forma más apropiada y segura para mí fue adding users to a supplementary group que el repositorio. es propiedad de (o viceversa):

groupadd git 
chgrp -R git .git 
chgrp -R git ./ 
usermod -G -a git $(whoami) 
+3

¿No debería ser 'usermod -G -a ...' para evitar que el usuario sea eliminado de todos los grupos excepto 'git'? – chris

+1

Woah ... No puedo creer que me haya perdido eso y tengo la esperanza de que no hubo repercusiones confusas para los votantes de más. Gracias, @chris – Alastair

1

Este problema también puede ocurrir después de las actualizaciones de Ubuntu que requieren un reinicio.

Si existe el archivo /var/run/reboot-required, realice o programe un reinicio.

13

Tuve este error durante dos semanas, y la mayoría de las soluciones indicaron 'chmod -R' como la respuesta, desafortunadamente para mí mis repositorios git (local/remoto/compartido - con el equipo) estaban todos en Windows OS , y aunque chmod -Rv mostró todos los archivos cambiados a 'rwxrwxrwx', una 'ls -l' posterior aún mostraba todos los archivos como 'rwxr-xr-x' y el error se repitió. Eventualmente vi this solution por Ariejan de Vroom. Funcionó y todos pudimos tirar y empujar nuevamente.

Por tanto local (el local que está teniendo problemas de empuje) y repositorios remotos, ejecute los siguientes comandos:

$ git fsck 
$ git prune 
$ git repack 
$ git fsck 

En una nota lateral, he intentado usar los permisos de Windows' de archivos nativos/ACL y recurrió incluso para elevar al usuario problemático a Administrador, pero nada de eso parecía ayudar. No estoy seguro si el entorno es importante, pero puede ayudar a alguien con una configuración similar: miembro del equipo problemático y remoto (Windows Server 2008 R2 Standard), mi local (Windows 7 VM).

+0

Hay un caso para este error cuando hay una corrupción del sistema de archivos git y estas instrucciones ayudaron a corregirlo. Gracias – nkadwa

+0

@nkadwa Me alegro de que esto podría ayudarle –

+0

Gracias! Me ayuda en mi caso. 1 voto por ti! – Hatjhie

0

Recibo un error similar y vea a continuación cómo lo resolví.

Mi estructura de directorios: /opt/git/project.git y el usuario es git git

$ cd /opt/git/project.git 
$ sudo chown -R git:git . 

chown -R con opción cambia de forma recursiva la propiedad y el y el grupo (ya he escrito git: git en comando superior) del directorio actual. chown -R es necesario ya que git cambia muchos archivos dentro de su directorio git cuando ingresa al repositorio.

0

Donde trabajo que hemos estado utilizando este método en todos nuestros repositorios de unos años sin ningún problema (excepto cuando se crea un nuevo repositorio y olvidar que configurarlo de esta manera):

  1. Conjunto 'sharedRepository = true' en la sección '[core]' del archivo de configuración.
  2. cambiar el ID de grupo del repositorio a un grupo compartido por todos los usuarios que tienen permiso para empujar a ella:

    chgrp -R shared_group /git/our_repos 
    chmod -R g+w /git/our_repos 
    
  3. Establecer el bit setgid en todos los directorios en el repositorio para que los nuevos archivos/directorios mantener el mismo grupo:

    find /git/our_repos -type d -exec chmod g+s {} + 
    
  4. añadir esta línea a la pre-recepción de gancho en el repositorio para asegurar que los nuevos permisos de archivos permiten grupo de lectura/escritura:

    umask 007 
    
1

Por lo que vale, tuve el mismo problema con mi propio VPS y fue causado por mi bajo espacio en el disco duro en VPS. Confirmado por el comando df -h y después de limpiar el disco duro de mi VPS; el problema desapareció

Saludos.

+0

Sí, esto también solucionó mi problema. – jax

1

Para mí su edición de unos permisos:

En la ejecución del servidor git este comando en el directorio de recompra

sudo chmod -R 777 theDirectory/ 
2

Para mí, este error se produjo cuando estaba fuera del espacio en mi control remoto.

justo lo que necesitaba para leer el resto del mensaje de error:

error: file write error (No space left on device) 
fatal: unable to write sha1 file 
error: unpack failed: unpack-objects abnormal exit 
Cuestiones relacionadas