Mesclando as respostas @David Underhill e @kixorz , fiz minha própria solução (definitiva).
É para repositórios básicos e não básicos. Existem apenas pequenas diferenças entre eles, mas desta forma é mais clara.
BARE REPOSITORY
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
Onde:
<repo.git>
é o diretório do repositório vazio, normalmente no servidor (por exemplo my_project.git/
).
<group-name>
é o nome do grupo para usuários git (por exemplo, usuários ).
REPOSITÓRIO 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
Onde:
<project_dir>
é o diretório do projeto que contém a .git
pasta.
<group-name>
é o nome do grupo para usuários git (por exemplo, usuários ).