2010-07-13 9 views
75

Tengo un repositorio git existente (uno solo) que hasta ahora solo he podido escribirlo. Quiero abrirlo a algún grupo de usuarios de UNIX, foo, para que todos los miembros de foo puedan presionarlo. Soy consciente de que puedo configurar fácilmente una nueva operación git con:Cómo configurar un repositorio git existente para que lo comparta un grupo UNIX

git init --bare --shared=group repodir 
chgrp -R foo repodir 

Pero necesito la operación equivalente para una existente dir de recompra.

+2

Hay ** [una excelente respuesta a esta pregunta] (http://serverfault.com/questions/26954/how -do-i-share-a-git-repository-with-multiple-users-on-a-machine) ** en ServerFault (otro sitio de StackOverflow). – Zearin

Respuesta

88

Pruebe lo siguiente para hacer un repositorio existente en repodir trabajo para los usuarios del grupo foo:

chgrp -R foo repodir     # set the group 
chmod -R g+rw repodir    # allow the group to read/write 
chmod g+s `find repodir -type d`  # new files get group id of directory 
git init --bare --shared=all repodir # sets some important variables in repodir/config ("core.sharedRepository=2" and "receive.denyNonFastforwards=true") 
+13

Yo agregaría que probablemente también deba configurar config.sharedRepository = true en la configuración del repositorio. http://www.kernel.org/pub/software/scm/git/docs/git-config.html – Pistos

+0

Sí, buen punto. Gracias por señalar eso a Pistos! –

+1

Esto es muy parecido a lo que estaba haciendo yo solo, pero quería obtener una confirmación externa. Gracias. :) También esperaba que hubiera una clonación de git --shared = group, pero la opción de clonación compartida hace algo completamente diferente. – Pistos

34

En el directorio de recompra ejecutar comandos siguientes:

git config core.sharedRepository group 
chgrp -R foo repodir 
chmod -R g+w repodir 

Editar: Para hacer frente a la confusión frecuente, group es una palabra clave real, no se supone que debes reemplazar esto con el nombre del grupo.

+17

Donde 'group' NO es el nombre del grupo :) –

+0

g + w is wrong permission ... !!! – Nizzy

+0

¿Por qué está mal el permiso? – kixorz

2

Esto probablemente no sea necesario, pero vale la pena señalar que git init --bare --shared también establece la opción denyNonFastForwards.

git config receive.denyNonFastForwards true 

El significado de esta opción es la siguiente:

receive.denyNonFastForwards

If you rebase commits that you’ve already pushed and then try to push again, or otherwise try to push a commit to a remote branch that doesn’t contain the commit that the remote branch currently points to, you’ll be denied. This is generally good policy; but in the case of the rebase, you may determine that you know what you’re doing and can force-update the remote branch with a -f flag to your push command.

(desde http://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration)

29

La fusión de @David Underhill y @kixorz respuestas, hice mi propia solución (definitiva).

es para descubierto repos y no descubierto repos. Solo hay pequeñas diferencias entre ellos, pero de esta manera es más claro.

GUARDAMUEBLES BARE

cd <repo.git>/       # Enter inside the git repo 
git config core.sharedRepository group # Update the git's config 
chgrp -R <group-name> .     # Change files and directories' group 
chmod -R g+w .       # Change permissions 
chmod g-w objects/pack/*     # Git pack files should be immutable 
find -type d -exec chmod g+s {} +   # New files get directory's group id 

donde:

  • <repo.git> es el directorio de repositorio desnudo, típicamente en el servidor (por ejemplo my_project.git/).
  • <group-name> es el nombre del grupo para usuarios de git (por ejemplo, usuarios).

repositorio non-Bare

cd <project_dir>/       # Enter inside the project directory 
git config core.sharedRepository group # Update the git's config 
chgrp -R <group-name> .     # Change files and directories' group 
chmod -R g+w .       # Change permissions 
chmod g-w .git/objects/pack/*    # Git pack files should be immutable 
find -type d -exec chmod g+s {} +   # New files get directory's group id 

donde:

  • <project_dir> es el directorio de proyecto que contiene la carpeta .git.
  • <group-name> es el nombre del grupo para usuarios de git (por ejemplo, usuarios).
+0

Como dijo Charles, también haga lo siguiente: 'chmod gw objects/pack/*' (si no es un repositorio desnudo) , anteponer '.git /') – Wernight

+0

@Wernight Ok, gracias, actualicé la respuesta también – Andrea

+0

aquí ¿cómo podemos encontrar el nombre del grupo o cómo crear el nombre del grupo? – Sujithrao

0

Además de las respuestas anteriores de permitirle a un grupo leer/escribir, también necesita agregar al usuario al grupo (digamos "foo").

sudo usermod -a -G [groupname] [username] 

Nota: usted tendrá que crear primero el usuario si no existe

Cuestiones relacionadas