Владение/группа файлов изменяется, когда пользователи нажимают на репозиторий GIT

В течение года у меня были проблемы с GIT и правами на каталог/файл. У меня есть центральный репозиторий, к которому несколько разработчиков используют код, используя ssh (источник настроен как ssh://example/git/repository). Я создал репозиторий следующим образом:

1) Мой конфигурационный файл в центральном репозитории:   [Ядро]     repositoryformatversion = 0     filemode = true     bare = true     sharedrepository = 0660

2) Все разрешения каталога хранилища установлены на 770 (rwxrwx ---) 3) Все файлы в. /objects/XX и./objects/info установлены на 440 (r-r -----) 4) Все остальные файлы установлены на 660 (rw-rw ----) 5) Собственность установлена ​​на root: group_name

(обратите внимание, что это произошло из рекомендуемой настройки в верхнем ответе в этом потоке: Создание GIT push уважения разрешений?)

Все пользователи доступа являются членами группы "имя_группы".

Проблема заключается в том, что если пользователь1 подталкивает к репозиторию, то права собственности на файлы на некоторые файлы устанавливаются на user1: user1 - это означает, что группа изменена. Как только это произойдет, никакие другие пользователи не могут нажать (или вытащить) из репозитория, так как они больше не имеют права на чтение, запись или выполнение из необходимых файлов в репозитории.

Я прочитал каждый поток, который я могу найти относительно вопроса о переполнении стека и почти везде в сети, но я продолжаю работать в этой же проблеме.

Проблема в том, что я не уверен, является ли эта проблема одной из GIT или одной из UNIX, и я не уверен, как ее исправить. Как я могу остановить изменение группы при переходе пользователя в репозиторий?

Ответ 1

Похоже, вы изменили core.sharedRepository после инициализации репозитория, а не с помощью init --shared=group, который должен правильно установить разрешения. Это означает, что бит sgid не будет правильно установлен в каталоге git репозитория. Вам придется исправить это вручную с помощью чего-то вроде (при условии поиска GNU и xargs):

find . -print0 | xargs -0 chgrp group_name

find . -type d -print0 | xargs -0 chmod g+s