Git Push Error: permiso insuficiente para agregar un objeto a la base de datos del repositorio

8 minutos de lectura

Cuando intento enviar a un control remoto compartido de git, aparece el siguiente error:
insufficient permission for adding an object to repository database

Luego leí sobre una solución aquí: Reparar Esto funcionó para el siguiente impulso, ya que todos los archivos eran del grupo correcto, pero la próxima vez que alguien impulsó un cambio, se creó un nuevo elemento en la carpeta de objetos que tenía su grupo predeterminado como grupo. Lo único que se me ocurre es cambiar todo el grupo predeterminado del desarrollador para los elementos que registran, pero eso parece un truco. ¿Algunas ideas? Gracias.

  • Recibí este error después de accidentalmente git add y git commit-ing como usuario root. Lo arreglé con un git reset y la respuesta de esta pregunta para arreglar el .git permisos de directorio.

    – StockB

    14/06/2016 a las 18:54

  • como puedo saber cual objeto que estaba tratando de crear (al depurar manualmente tales problemas de permisos)? El mensaje de error es demasiado vago.

    – mirabilios

    15/03/2017 a las 14:30

  • Recibí este error al copiar y pegar otro archivo .git primero usando sudo. por lo tanto, los archivos tenían sudo sudo como nombre y grupo.

    – Vicente

    10 de abril de 2020 a las 13:09

Git Push Error permiso insuficiente para agregar un objeto a
Richard Hansen

Permisos de reparación

Una vez que haya identificado y solucionado la causa subyacente (consulte a continuación), querrá reparar los permisos:

cd /path/to/repo.git
sudo chgrp -R groupname .
sudo chmod -R g+rwX .
sudo find . -type d -exec chmod g+s '{}' +

Tenga en cuenta que si desea que todos puedan modificar el repositorio, no necesita el chgrp y querrás cambiar el chmod a sudo chmod -R a+rwX .

Si no soluciona la causa subyacente, el error seguirá apareciendo y tendrá que volver a ejecutar los comandos anteriores una y otra vez.

Causas subyacentes

El error podría ser causado por uno de los siguientes:

  • El repositorio no está configurado para ser un repositorio compartido (ver core.sharedRepository en git help config). Si la salida de:

     git config core.sharedRepository
    

    no es group o true o 1 o alguna máscara, intente ejecutar:

     git config core.sharedRepository group
    

    y luego vuelva a ejecutar el recurso recursivo chmod y chgrp (consulte “Permisos de reparación” más arriba).

  • El sistema operativo no interpreta un bit setgid en los directorios como “todos los archivos y subdirectorios nuevos deben heredar el propietario del grupo”.

    Cuándo core.sharedRepository es true o group, Git se basa en una función de los sistemas operativos GNU (p. ej., todas las distribuciones de Linux) para garantizar que los subdirectorios recién creados sean propiedad del grupo correcto (el grupo en el que se encuentran todos los usuarios del repositorio). Esta función está documentada en el Documentación de GNU coreutils:

    … [If] se establece el bit set-group-ID de un directorio, los subarchivos recién creados heredan el mismo grupo que el directorio y los subdirectorios recién creados heredan el bit set-group-ID del directorio principal. … [This mechanism lets] los usuarios comparten archivos más fácilmente, al disminuir la necesidad de usar chmod o chown para compartir nuevos archivos.

    Sin embargo, no todos los sistemas operativos tienen esta característica (NetBSD es un ejemplo). Para esos sistemas operativos, debe asegurarse de que todos sus usuarios de Git tengan el mismo grupo predeterminado. Alternativamente, puede hacer que el repositorio sea de escritura mundial ejecutando git config core.sharedRepository world (pero tenga cuidado, esto es menos seguro).

  • El sistema de archivos no admite el bit setgid (p. ej., FAT). ext2, ext3, ext4 admiten el bit setgid. Hasta donde yo sé, los sistemas de archivos que no admiten el bit setgid tampoco admiten el concepto de propiedad grupal, por lo que todos los archivos y directorios serán propiedad del mismo grupo de todos modos (cuyo grupo es una opción de montaje). En este caso, asegúrese de que todos los usuarios de Git estén en el grupo propietario de todos los archivos en el sistema de archivos.

  • No todos los usuarios de Git están en el mismo grupo que posee los directorios del repositorio. Asegúrese de que el propietario del grupo en los directorios sea correcto y que todos los usuarios estén en ese grupo.

  • @Richard Hansen: realmente no sé a qué te refieres con forzar la propiedad. Estoy buscando al hombre para chmod, pero no sé lo suficiente sobre esto para que las palabras tengan sentido 🙂 ¿Algún consejo?

    – skaz

    23 de junio de 2011 a las 2:08

  • @GiH: no obtendrá nada si no está configurado (que es lo mismo que false o umask). Ver git help config para más detalles.

    -Richard Hansen

    2 de agosto de 2012 a las 4:22

  • debo haber emitido git push utilizando raíz cuenta en mi directorio de trabajo. Encontré que el propietario de algunos archivos del repositorio de git es raíz (-r--r--r--. 1 root root 6380 5月 25 12:39 9b44bd22f81b9a8d0a244fd16f7787a1b1d424) según esta respuesta.

    – LiuYan 刘研

    6 de junio de 2013 a las 5:09


  • @MattBrowne: Tenga en cuenta que es una capital Xno en minúsculas x. Una capital X significa “establecer S_IXGRP si el archivo es un directorio (o si cualquier otro S_IX* bit está establecido)”, por lo que no hará que todos los archivos sean ejecutables. Puede ser innecesario, pero tal vez no si core.sharedRepository se fijó en 0600 en algún momento del pasado.

    -Richard Hansen

    30 mayo 2014 a las 21:37

  • @francoisromain: Esa línea establece el bit setgid en todos los directorios. Ver gnu.org/software/coreutils/manual/html_node/…

    -Richard Hansen

    11 mayo 2017 a las 21:02

Git Push Error permiso insuficiente para agregar un objeto a
TerryS

Para Ubuntu (o cualquier Linux)

Desde la raíz del proyecto,

cd .git/objects
ls -al
sudo chown -R yourname:yourgroup *

Puedes decir tu nombre y tu grupo de la siguiente manera:

# for yourname
whoami
# for yourgroup
id -g -n <yourname>

Nota: recuerda la estrella al final de la línea sudo

  • ¡Funcionó muy bien! Sí, por alguna razón, a algunas de las carpetas se les asignó un nombre y grupo diferente (raíz).

    – Peter Arandorenko

    17 de junio de 2014 a las 18:57

  • Yo obtengo: Sorry, user myuser is not allowed to execute '/bin/chown

    –Francisco Corrales Morales

    23 de junio de 2014 a las 22:03

  • Mi problema fue que una vez hice un “git pull” como root, lo que creo que arruinó los permisos… puedes comprobarlo haciendo un ls .git

    – rogerdpack

    23 de julio de 2015 a las 13:46

  • ¿Dónde puedo encontrar tu nombre: tu grupo?

    – Grad

    25 de diciembre de 2016 a las 2:29

  • Buena adición sobre cómo encontrar su nombre: su grupo, @zois – gracias: apreciado

    – TerryS

    12 mayo 2021 a las 22:26

usa el siguiente comando, funciona como magia

sudo chown -R "${USER:-$(id -un)}" .

escriba el comando exactamente como está (con espacios adicionales y un punto al final)

  • ¡Funciona de maravilla!

    – doncadavona

    12 de octubre de 2018 a las 3:19

  • ¡Esto también me ayudó! Gracias.

    -Horvath Adam

    24 de enero de 2020 a las 11:32

  • @Aisuko feliz codificación 🙂

    – Código_Gusano

    24 de febrero de 2021 a las 11:35

  • ¿Puede explicar qué hace esta parte: “${USER:-$(id -un)}” .

    – Neerkoli

    10 de marzo de 2021 a las 5:30

  • ¡Funciona como una navaja suiza! Gracias

    – BZKN

    17 de junio de 2021 a las 13:27

1646961131 487 Git Push Error permiso insuficiente para agregar un objeto a
Rajendra Kumar Vankadari

sudo chmod -R ug+w .;

Básicamente, .git/objects El archivo no tiene permisos de escritura. La línea anterior otorga permiso para todos los archivos y carpetas en el directorio.

Solo quería agregar mi solución. Tenía un repositorio en OS X que tenía la propiedad de root en algunos directorios y Home (que es mi directorio de usuario) en otros, lo que provocó el mismo error mencionado anteriormente.

La solución fue simple afortunadamente. Desde terminales:

sudo chown -R Home projectdirectory

  • A mi me pasó lo mismo. No puedo entender cómo algunos de los objetos obtuvieron la propiedad raíz, pero lo hicieron.

    – vy32

    9 de junio de 2014 a las 2:05

1646961131 782 Git Push Error permiso insuficiente para agregar un objeto a
arnaud

Resuelto para mí … solo esto:

sudo chmod 777 -R .git/objects

  • A mi me pasó lo mismo. No puedo entender cómo algunos de los objetos obtuvieron la propiedad raíz, pero lo hicieron.

    – vy32

    9 de junio de 2014 a las 2:05

Una buena manera de depurar esto es la próxima vez que suceda, SSH en el repositorio remoto, cd en la carpeta de objetos y hacer un ls -al.

Si ve 2-3 archivos con diferente propiedad de usuario: grupo, este es el problema.

Me sucedió en el pasado con algunos scripts heredados que acceden a nuestro repositorio de git y generalmente significa que un usuario diferente (Unix) empujó/modificó los archivos al final y su usuario no tiene permisos para sobrescribir esos archivos. Debe crear un grupo de git compartido en el que estén todos los usuarios habilitados para git y luego recursivamente chgrp los objects carpeta y su contenido para que la propiedad del grupo sea compartida git grupo.

También debe agregar un bit adhesivo en la carpeta para que todos los archivos creados en la carpeta siempre tengan el grupo de git.

chmod g+s nombre-directorio

Actualización: no sabía sobre core.sharedRepository. Es bueno saberlo, aunque probablemente solo haga lo anterior.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad