Cuando intento pasar a un control remoto git compartido, aparece el siguiente error:
insufficient permission for adding an object to repository database
Luego leí acerca de una solución aquí: Solución Esto funcionó para el siguiente envío, ya que todos los archivos eran del grupo correcto, pero la próxima vez que alguien presionó un cambio, hizo un nuevo elemento en la carpeta de objetos que tenía su grupo predeterminado como el grupo Lo único que se me ocurre es cambiar todo el grupo predeterminado del desarrollador por los elementos que registran, pero eso parece un truco. ¿Algunas ideas? Gracias.
git add
ygit commit
-ing como usuario root. Lo arreglé congit reset
ay la respuesta de esta pregunta para arreglar los.git
permisos del directorio.Respuestas:
Permisos de reparación
Después de haber identificado y corregido la causa subyacente (ver más abajo), querrá reparar los permisos:
Tenga en cuenta que si desea que todos puedan modificar el repositorio, no necesita el
chgrp
y querrá cambiar el chmod asudo 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
engit help config
). Si la salida de:no es
group
otrue
o1
o alguna máscara, intente ejecutar:y luego vuelva a ejecutar el recursivo
chmod
ychgrp
(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".
Cuando
core.sharedRepository
estrue
ogroup
, Git se basa 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 :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 editable en todo el mundo ejecutando
git config core.sharedRepository world
(pero tenga cuidado, esto es menos seguro).fuente
false
oumask
). Vergit help config
para más detalles.git push
usando la cuenta raíz en mi directorio de trabajo. Encontré que el propietario de algunos archivos de repositorio de git es root (-r--r--r--. 1 root root 6380 5月 25 12:39 9b44bd22f81b9a8d0a244fd16f7787a1b1d424
) según esta respuesta.X
, no una minúsculax
. Una letra mayúsculaX
significa "establecerS_IXGRP
si el archivo es un directorio (o siS_IX*
se configura cualquier otro bit)", por lo que no hará que todos los archivos sean ejecutables. Puede ser innecesario, pero tal vez no sicore.sharedRepository
se estableció0600
en algún momento en el pasado.Para Ubuntu (o cualquier Linux)
Desde la raíz del proyecto,
Puede saber cuál debería 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 de sudo
fuente
Sorry, user myuser is not allowed to execute '/bin/chown
*
hizo toda la diferencia. Gracias.ls .git
usa el siguiente comando, funciona como magia
escriba el comando exactamente como está (con espacios adicionales y un punto al final)
fuente
sudo chmod -R ug+w .;
Básicamente, el
.git/objects
archivo no tiene permisos de escritura. La línea anterior otorga permiso a todos los archivos y carpetas en el directorio.fuente
Solo quería agregar mi solución. Tuve un repositorio en OS X que tenía la propiedad de root en algunos directorios y Home (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:
fuente
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 un usuario diferente: la propiedad del grupo 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 git compartido en el que estén todos los usuarios habilitados para git y luego recursivamente
chgrp
laobjects
carpeta y su contenido para que la propiedad del grupo sea elgit
grupo 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
.Actualización: no sabía sobre core.sharedRepository. Es bueno saberlo, aunque probablemente solo haga lo anterior.
fuente
Resuelto para mí ... solo esto:
fuente
Chmod 777
no se recomienda ya que expone todo su archivo al resto del mundo haciendo que su máquina sea vulnerablechmod 777
, 99 de cada 100 veces no comprende el problema y es probable que cause más problemas de los que ayuda a resolver. Como muestra la respuesta aceptada anteriormente, este problema no es diferente.Esto puede suceder fácilmente si se ejecutó
git init
con un usuario diferente del que está planeando usar al empujar los cambios.Si sigue ciegamente las instrucciones en [1], esto sucederá ya que probablemente creó el git-user como root e inmediatamente pasó a git init sin cambiar de usuario.
[1] http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server
fuente
Linux, macOS:
donde
name
está su nombre de usuario ygroup
es el grupo al que pertenece su nombre de usuario.fuente
Después de agregar algunas cosas ... compromételas y, después de todo, ¡presiónalo! ¡¡EXPLOSIÓN!! Comience todos los problemas ... Como debe notar, hay algunas diferencias en la forma en que se definieron los proyectos nuevos y existentes. Si alguna otra persona intenta agregar / confirmar / enviar los mismos archivos o contenido (git mantiene ambos como los mismos objetos), nos enfrentaremos al siguiente error:
Para resolver este problema, debe tener en cuenta el sistema de permisos del sistema operativo, ya que en este caso está restringido. Para comprender mejor el problema, continúe y verifique la carpeta de su objeto git (.git / objects). Probablemente verá algo así:
* Tenga en cuenta que esos permisos de archivo se otorgaron solo para sus usuarios, nadie nunca podrá cambiarlo ... *
RESOLVIENDO EL PROBLEMA
Si tiene permiso de superusuario, puede seguir adelante 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 :
Ahora usted y todos los usuarios propietarios del archivo tendrán que cambiar el permiso de esos archivos, haciendo lo siguiente:
Después de eso, deberá agregar una nueva propiedad que sea equivalente a --shared = group done para el nuevo repositorio, de acuerdo con la documentación, esto hace que el repositorio sea editable en grupo, ejecute:
https://coderwall.com/p/8b3ksg
fuente
username:groupname
para el mío, pero cuando lo intentéchmod -R 774 .
, pude correr congit add --all
éxito.Para mi caso, ninguna de las sugerencias funcionó. Estoy en Windows y esto funcionó para mí:
git remote add foo //SERVERNAME/path/to/copied/git
)git push foo master
. ¿Funcionó? ¡Excelente! Ahora elimine el repositorio que no funciona y cambie el nombre de esto a lo que era antes. Asegúrese de que los permisos y la propiedad compartida sigan siendo los mismos.fuente
Llegué a este mismo problema. Al leer por aquí, me di cuenta de que el mensaje se refería a los permisos de archivo. La solución, para mí, estaba en:
/etc/inetd.d/git-gpv
Estaba iniciando git-daemon ya que el usuario ' nobody ' no tenía permiso de escritura.
(Dudo que otros llamen a su archivo inetd conf git-gpv. Comúnmente estaría directamente en /etc/inetd.conf)
fuente
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 directorio principal
Propiedades> pestaña Compartir> Uso compartido avanzado> Permisos> asegúrese de que el usuario tenga los derechos de acceso adecuados.
fuente
Es posible que haya anidado accidentalmente repositorios git
fuente
También existe la posibilidad de que haya agregado otro repositorio local con el mismo alias. Como ejemplo, ahora tiene 2 carpetas locales a las que se hace referencia
origin
cuando intenta empujar, el repositorio remoto no aceptará sus credenciales.Cambie el nombre de los alias del repositorio local, puede seguir este enlace https://stackoverflow.com/a/26651835/2270348
Tal vez pueda dejar 1 repositorio local de su agrado como
origin
y los demás los renombren, por ejemplo, deorigin
aanotherorigin
. Recuerde que estos son solo alias y todo lo que necesita hacer es recordar los nuevos alias y sus respectivas ramas remotas.fuente
Funciona para mi
fuente
Obtuve esto cuando llegué a un proyecto de Rstudio. Me di cuenta de que olvidé hacer:
en el inicio del programa. De hecho, como hay otro error que tengo, debo hacerlo:
fuente
Use sudo para commit -m
fuente
Estaba teniendo este problema con un repositorio remoto en un recurso compartido de Samba; Salí con éxito de este control remoto, pero fallé al presionarlo.
La causa del error fue credenciales incorrectas en mi
~/.smbcredentials
archivo.fuente