¿Cómo usar los permissions de files de grupo correctamente en un repository de git?

Estamos accediendo a un repository git compartido a través de routes de files, por varias razones que omito por ahora, creado con –shanetworking = group.

Tenemos varios grupos Unix pero todos comparten un grupo común. Si ejecuto un chgrp -R en el repository de git, todos pueden leer de él, pero si alguien escribe más a menudo, se crean nuevos files que no usan el grupo común.

Parece que este problema se debe a que nuestro grupo primario no es el compartido y si ejecutamos un nuevo grp todo parece funcionar bien.

Sin embargo, hay problemas con este enfoque; newgrp es lento y genera un nuevo shell, lo que me hace pensar que llamarlo en .bash_profile sería una mala idea, sin siquiera considerar si desearíamos que todos nuestros files nuevos usen el grupo común. Sin embargo, confiar en la memory para ejecutarlo antes de hacer cualquier trabajo de git parece una receta para el desastre.

Entonces … alguna sugerencia?

También debe establecer el bit setgid en el grupo.

 chgrp -R GRUPO / ruta / a / repos
 search / ruta / a / repo -type d -print0 |  xargs -0 chmod g + s 

Un repository existente que no se ha creado con --shanetworking se puede convertir compartido mediante los siguientes commands:

 # make the repository shanetworking git config core.shanetworkingRepository group # or whatever other sharing option # fix the setgid bit find . -type d | xargs chmod g+s # repair the permissions chmod -R g+r * 

¿Es esto un repository desnudo? Si es un repository simple y usted usó – compartió cuando lo creó, entonces esto no debería estar sucediendo y es por eso que estoy preguntando.

Si se trata de un informe simple, tal vez algunos de los directorys se cambiaron a gs, si eso sucedió, necesitas chmod g+x todos los directorys, asegúrate de no hacerlo en ningún file. Una forma más fácil que eso podría ser simplemente git init --bare --shanetworking=group un nuevo repository y volver a insert el contenido desde alguna persona clonar.

Tuve que usar una combinación de las respuestas anteriores:

 git config core.shanetworkingRepository group chgrp -R GROUP /path/to/repo find /path/to/repo -type d -exec chmod g+rwxs {} \; 

Una vez que el repository desnudo tiene la bandera shanetworking=group , git se ocupará del rest, por lo que lo siguiente debe hacerse solo una vez. También setgid está en desuso para este uso. Aquí copio / pego mi respuesta de serverfault :

Suponiendo que repogroup es su grupo, y tiene un cd para el directory repo:

Primero cambie el indicador compartido al group :

 git config core.shanetworkingRepository group 

Nota: aquí debe usar el group palabras key, no el nombre del grupo. Esto es equivalente a crear el repository vacío con la opción --shanetworking=group .

Luego cambie el grupo para todo el repository:

 chgrp -R repogroup . 

Para asegurarse de que los directorys existentes sean de escritura grupal ( g+w ), y los ejecutables existentes también se conviertan en ejecutables de grupo ( g+X ), también debe:

 chmod -R g+wX . 

Una vez hecho esto, git respetará el indicador de shanetworking=group y se encargará de los permissions de grupo en los siguientes, tanto para los files existentes como para los nuevos, por lo que nunca más necesitará umask o chgrp .

Pondré la fuente en un comentario si lo encuentro de return.