Подтвердить что ты не робот

Как правильно использовать права на групповые файлы в репозитории git?

Мы обращаемся к общему репозиторию git через пути к файлам, по разным причинам, которые я сейчас опускаю, созданный с помощью --shared = group.

У нас есть разные группы unix, но у всех есть общая группа. Если я запустил chgrp -R в репозитории git, каждый может прочитать его, но если кто-то пишет ему чаще, чем новые файлы, которые не используют общую группу.

Эта проблема возникает из-за того, что наша основная группа не является общей, и если мы запускаем newgrp, все, кажется, работают хорошо.

Однако существуют проблемы с этим подходом; newgrp медленный, и он порождает новую оболочку, которая заставляет меня думать, что вызов ее в .bash_profile будет плохой идеей, даже не учитывая, хотим ли мы, чтобы все наши новые файлы использовали общую группу. Опираясь на память, чтобы запускать ее перед выполнением любой работы git, похоже, что рецепт для катастрофы тоже.

Итак... любые предложения?

4b9b3361

Ответ 1

Вам нужно установить setgid бит в группе.

chgrp -R GROUP /path/to/repo
find /path/to/repo -type d -print0 | xargs -0 chmod g+s 

Ответ 2

Существующий репозиторий, который не был создан с помощью --shared, может быть передан общим путем использования следующих команд:

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

Ответ 3

Это голый репо? Если его голое репо и вы использовали - поделились, когда вы его создали, это не должно происходить, поэтому я спрашиваю.

Если это голое репо, возможно, некоторые из каталогов были изменены на g-s, если это произошло, вам нужно либо chmod g+x только все каталоги, убедитесь, что вы не делаете это ни с какими файлами. Более простым способом может быть просто git init --bare --shared=group новое репо и отбросить содержимое к нему из клонирования некоторых тел.

Ответ 4

Мне пришлось использовать комбинацию из приведенных выше ответов:

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

Ответ 5

Как только у открытого репозитория будет флаг shared=group, git позаботится об остальном, поэтому следующее нужно сделать только один раз. Кроме того, setgid устарел для этого использования. Здесь я копирую/вставляю мой ответ из serverfault:

Предполагая, что repogroup - ваша группа, и у вас есть cd в каталоге repo:

Сначала измените общий флаг на group:

git config core.sharedRepository group 

Примечание: здесь вы должны использовать ключевое слово group, а не имя группы. Это эквивалентно созданию голого репозитория с опцией --shared=group.

Затем измените группу для всего репозитория:

chgrp -R repogroup .

Чтобы убедиться, что существующие каталоги являются групповыми (g+w), и существующие исполняемые файлы также становятся исполняемыми группами (g+X) вам также необходимо:

chmod -R g+wX .

Как только вы это сделаете, git отметит флаг shared=group и позаботится о групповых разрешениях в следующем, как для существующих, так и для новых файлов, поэтому вам больше не понадобится umask или chgrp.

Я поставлю источник в комментарии, если верну его.