remota rama origin example cambiar git push

rama - git push example



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

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

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


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 . 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á cambiar el chmod por sudo chmod -R a+rwX .

Si no arregla 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 (consulte 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 chmod y chgrp recursivos (consulte "Reparar permisos" 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".

    Cuando core.sharedRepository es true o de group , Git confía en una característica de los sistemas operativos GNU (por ejemplo, cada distribución 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 característica está documentada en la documentación de GNU coreutils :

    ... [Si] se establece un bit de ID de grupo de conjuntos de un directorio, los subarchivos recién creados heredan el mismo grupo que el directorio y los subdirectorios recién creados heredan el bit de ID de grupo de conjuntos del directorio principal. ... [Este mecanismo permite] que los usuarios compartan 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 los 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 (por ejemplo, FAT). ext2, ext3, ext4 son compatibles con el bit setgid. Por lo que sé, los sistemas de archivos que no admiten el bit setgid tampoco son compatibles con el concepto de propiedad del grupo, por lo que todos los archivos y directorios serán propiedad del mismo grupo (el grupo es una opción de montaje). En este caso, asegúrese de que todos los usuarios de Git estén en el grupo que posee 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.

Después de agregar algunas cosas ... confíalas y, después de todo, ¡empújalo! ¡¡EXPLOSIÓN!! Comience todos los problemas ... Como debe notar, hay algunas diferencias en la forma en que se definieron los proyectos nuevos y los existentes. Si otra persona intenta agregar / cometer / empujar los mismos archivos o contenido (git mantener ambos como los mismos objetos), enfrentaremos el siguiente error:

$ git push Counting objects: 31, done. Delta compression using up to 2 threads. Compressing objects: 100% (17/17), done. Writing objects: 100% (21/21), 2.07 KiB | 0 bytes/s, done. Total 21 (delta 12), reused 0 (delta 0) remote: error: insufficient permission for adding an object to repository database ./objects remote: fatal: failed to write object

Para resolver este problema, debe tener en cuenta el sistema de permisos del sistema operativo, ya que está restringido por él en este caso. Para comprender mejor el problema, siga adelante y verifique la carpeta de su objeto git (.git / objetos). Probablemente veas algo así:

<your user_name>@<the machine name> objects]$ ls -la total 200 drwxr-xr-x 25 <your user_name> <group_name> 2048 Feb 10 09:28 . drwxr-xr-x 3 <his user_name> <group_name> 1024 Feb 3 15:06 .. drwxr-xr-x 2 <his user_name> <group_name> 1024 Jan 31 13:39 02 drwxr-xr-x 2 <his user_name> <group_name> 1024 Feb 3 13:24 08

* Tenga en cuenta que los permisos de esos archivos se otorgaron solo para sus usuarios, nadie los cambiará ... *

Level u g o Permission rwx r-x --- Binary 111 101 000 Octal 7 5 0

RESOLVIENDO EL PROBLEMA

Si tiene el permiso de superusuario, puede avanzar y cambiar todos los permisos usted mismo utilizando el paso dos; en cualquier otro caso, deberá preguntar a todos los usuarios con objetos creados con sus usuarios, use el siguiente comando para saber quiénes son :

$ ls -la | awk ''{print $3}'' | sort -u <your user_name> <his user_name>

Ahora usted y los usuarios propietarios de todos los archivos tendrán que cambiar el permiso de esos archivos, haciendo lo siguiente:

$ chmod -R 774 .

Después de eso, deberá agregar una nueva propiedad que sea equivalente a --shared = group hecho para el nuevo repositorio, de acuerdo con la documentación, esto hace que el repositorio sea de escritura en grupo, hágalo ejecutando:

$ git config core.sharedRepository group

https://coderwall.com/p/8b3ksg


Es posible que haya anidado accidentalmente repositorios git


Esto puede suceder fácilmente si ejecutó git init con un usuario diferente del que planea usar al impulsar cambios.

Si sigue ciegamente las instrucciones en [1], esto sucederá, ya que probablemente creó el usuario git como usuario root y luego pasó inmediatamente a git init sin cambiar de usuario.

[1] http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server


Linux, macOS:

cd .git/ sudo chown -R name:group *

donde name es su nombre de usuario y group es el grupo al que pertenece su nombre de usuario.


Me topé con este mismo problema. Al leer por aquí me di cuenta de que eran los permisos de archivo a los que se refería el mensaje. La solución, para mí, estaba en:

/etc/inetd.d/git-gpv

Estaba iniciando git-daemon como usuario '' nadie '', por lo que carecía del permiso de escritura.

# Who When What # GPV 20Nov13 Created this by hand while reading: http://linuxclues.blogspot.co.uk/2013/06>/git-daemon-ssh-create-repository-debian.html # GPV 20Nov13 Changed owner (to user_git) otherise nobody lack permission to update the repository #git stream tcp nowait nobody /usr/bin/git git daemon --inetd --verbose --enable=receive-pack --export-all /gitrepo git stream tcp nowait user_git /usr/bin/git git daemon --inetd --verbose --enable=receive-pack --export-all /gitrepo

(Dudo que otros llamen a su archivo de configuración inetd git-gpv. Comúnmente estaría directamente en /etc/inetd.conf)


Necesita los permisos de escritura suficientes en el directorio al que está presionando.

En mi caso: servidor Windows 2008

Haga clic derecho en el directorio git repo o el directorio padre.

Propiedades> pestaña Compartir> Uso compartido avanzado> Permisos> asegúrese de que el usuario tenga los derechos de acceso adecuados.


Para Ubuntu (o cualquier Linux)

Desde la raíz del proyecto,

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

Puede saber cuál debe ser su nombre y su grupo mirando los permisos en la mayoría de los resultados de ese comando ls -al

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


Para mi caso ninguna de las sugerencias funcionó. Estoy en Windows y esto funcionó para mí:

  • Copia el repositorio remoto en otra carpeta
  • Comparte la carpeta y otorga los permisos apropiados.
  • Asegúrese de que puede acceder a la carpeta desde su máquina local.
  • Agregue este repositorio como otro repositorio remoto en su repositorio local. ( git remote add foo //SERVERNAME/path/to/copied/git )
  • Empuje a foo. git push foo master . ¿Funcionó? ¡Genial! Ahora borre el repositorio que no funciona y cambie el nombre a lo que era antes. Asegúrese de que los permisos y la propiedad compartida sigan siendo los mismos.

Resuelto por mí ... sólo esto:

sudo chmod 777 -R .git/objects


Solo quería añadir mi solución. Tuve un repositorio en OS X que tenía la propiedad de root en algunos directorios y Inicio (que es mi directorio de usuarios) en otros, lo que causó el mismo error mencionado anteriormente.

La solución fue simple afortunadamente. Desde la terminal:

sudo chown -R Home projectdirectory


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 haga un ls -al .

Si ve 2-3 archivos con un usuario diferente: la propiedad del grupo es el problema.

Me ha pasado en el pasado con algunos scripts heredados para acceder a nuestro repositorio de git y, por lo general, significa que un usuario diferente (unix) empujó / modificó los archivos por última vez y su usuario no tiene permisos para sobrescribir esos archivos. Debería crear un grupo de git compartido en el que estén todos los usuarios habilitados para git y, a continuación, chgrp recursiva la carpeta de objects y su contenido para que su propiedad sea del grupo git compartido.

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.


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)


sudo chmod -R ug+w .;

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