Tengo un repositorio de git existente (uno simple) que hasta este momento solo he podido escribir. Quiero abrirlo a algún grupo de usuarios de UNIX, foo, para que todos los miembros de foo puedan acceder a él. Soy consciente de que puedo configurar fácilmente un nuevo repositorio de git con:
git init --bare --shared=group repodir
chgrp -R foo repodir
Pero necesito la operación equivalente para un directorio de repositorio existente .
git
permissions
share
shared
Pistos
fuente
fuente
Respuestas:
Intente esto para hacer que un repositorio existente
repodir
funcione para los usuarios del grupofoo
:fuente
git init --shared
comando en un repositorio existente para establecer el valor de configuración. También debe ejecutar elchmod
comando para obtener los permisos correctos de los archivos.git pull
etc. como root en lugar de comowww-data
o lo que sea que sea el propietario y como resultado obtieneserror: insufficient permission for adding an object to repository database .git/objects
. Pensé que había arreglado la propiedad de todos los archivos / directorios que estaban mal usandofind
y-type d
/type -f
, pero solo este método eliminó el error (problema porque un archivo en algún subdirectorio no se puede escribir en grupo)core.sharedRepository
mencionaría esto: parece inútil sin que los usuarios hagan que todos sus grupos de archivos se puedan escribir.En el directorio de repositorios, ejecute los siguientes comandos:
Editar: para abordar la confusión frecuente,
group
es una palabra clave real, no se supone que debe reemplazarla con el nombre del grupo.fuente
group
NO está el nombre del grupo :)git config core.sharedRepository dev
a continuación, escribiendogit config
consigofatal: bad config value for 'core.sharedrepository' in .git/config
engit version
1.7.0.4
(y posiblemente versiones después)git config core.sharedRepository group
group
no es el nombre del grupo, ¡sino el valor real!Combinando las respuestas de @David Underhill y @kixorz , hice mi propia solución (definitiva).
Es para repositorios básicos y repositorios no básicos. Solo hay pequeñas diferencias entre ellos, pero de esta manera es más claro.
REPOSITORIO DESNUDO
dónde:
<repo.git>
es el directorio del repositorio básico, normalmente en el servidor (por ejemplomy_project.git/
).<group-name>
es el nombre del grupo para los usuarios de git (por ejemplo, usuarios ).REPOSITORIO NO DESCUBIERTO
dónde:
<project_dir>
es el directorio del proyecto que contiene la.git
carpeta.<group-name>
es el nombre del grupo para los usuarios de git (por ejemplo, usuarios ).fuente
chmod g-w objects/pack/*
(si no es un repositorio desnudo, anteponer.git/
)find . -type d
' genera un errorunable to execute /bin/chmod: Argument list too long
chmod g+s `find . -type d`
no escala. Usofind -type d -exec chmod g+s {} +
chmod g-w objects/*/*
. Sin embargo, no estoy seguro del subdirectorio de información, ya que está vacío para este repositorio.Probablemente esto no sea necesario, pero vale la pena señalar que
git init --bare --shared
también establece la opción denyNonFastForwards .El significado de esta opción es el siguiente:
(de http://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration )
fuente
Además de las respuestas anteriores de permitir que un grupo lea / escriba, también necesita agregar el usuario al grupo (diga "foo").
Nota: primero tendrá que crear un usuario si no existe
fuente