Solución:
crear un grupo myrepousers
por ejemplo, y agregue sus usuarios de git a ese grupo.
Luego cambie el grupo de todo en / path / a / git / myrepo a myrepousers:
chown -R .myrepousers /path/to/git/myrepo
Luego corrige los permisos:
chmod -R g+w /path/to/git/myrepo
find /path/to/git/myrepo -type d -exec chmod -R {} g+s ;
Debería estar todo listo.
En realidad, ese fue el enfoque equivocado. Después de investigaciones adicionales, descubrí que en mi caso tengo que usar las funciones de compilación de git para manejar el derecho del sistema de archivos en el repositorio.
Básicamente se hace con el shared
opción de git init
, que puede tener (entre otros) los siguientes valores:
-
group
: inicialice el repositorio para que los archivos y directorios tengan acceso de escritura de usuario y grupo, y todos los demás tengan acceso de lectura -
0660
: lo mismo pero sin acceso de lectura para los demás.
Los directorios y archivos recién creados tienen automáticamente los permisos adecuados. También puedes usar git init
en un repositorio existente para reconfigurarlo sin perder su contenido.
Así que al final lo que tuve que hacer:
- Crear un grupo
mygitrepo
- Agregar usuarios
- chmod -R el repositorio de git para
root:mygitrepo
Y ahora todos los usuarios del grupo pueden tirar / empujar, y nadie más puede, y eso sin interferir con los derechos del sistema de archivos.
git init --bare --shared=0660
http://www.kernel.org/pub/software/scm/git/docs/git-init.html para obtener más información.
Si se admiten las ACL, puede hacerlo con las ACL predeterminadas. Tenga en cuenta que es fácil olvidarse de ellos, ya que no aparecen cuando hace un ls -l
.
find /path/to/git/myrepo -type d -exec setfacl -m d:u:john:rwx {} +
Pero sospecho que es posible que desee hacer algo un poco más organizado. La implementación de gitolite puede proporcionar una mejor solución.