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
repodirfuncione para los usuarios del grupofoo:fuente
git init --sharedcomando en un repositorio existente para establecer el valor de configuración. También debe ejecutar elchmodcomando para obtener los permisos correctos de los archivos.git pulletc. como root en lugar de comowww-datao 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 usandofindy-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.sharedRepositorymencionarí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,
groupes una palabra clave real, no se supone que debe reemplazarla con el nombre del grupo.fuente
groupNO está el nombre del grupo :)git config core.sharedRepository deva continuación, escribiendogit configconsigofatal: bad config value for 'core.sharedrepository' in .git/configengit version1.7.0.4(y posiblemente versiones después)git config core.sharedRepository groupgroupno 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.gitcarpeta.<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 longchmod 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 --sharedtambié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