Мы только что столкнулись с той же проблемой. Вот как мы справились с этим, в дополнение к бегу
git repo-config core.sharedRepository true
.
Примечание: это было на сервере Ubuntu Linux - вам могут понадобиться разные команды в вашей ОС, но подход должен быть в целом схожим. Обратите внимание, что многие из этих команд нужно будет запускать с правами root или с правами sudo
.
Шаг 1. Создайте новую общую группу
Например, разработчики . Добавьте к этому своих разработчиков.
groupadd developers
usermod -aG developers <username>
Шаг 2. Смена владельца группы в существующем хранилище
chgrp -R developers /path/to/repo
Также сделайте файлы для групповой записи:
chmod -R g+w /path/to/repo
Шаг 3. Убедитесь, что новые каталоги созданы с группой, для которой задано новое имя группы
В некоторых * nix ОС (например, FreeBSD, OS X) группа вновь создаваемых файлов наследуется из родительского каталога. В других ОС (например, Ubuntu) это определяется группой процесса создания. В последнем случае вы можете изменить это поведение, установив флаг setgid в родительском каталоге. Таким образом, один из способов убедиться, что новые каталоги созданы, например, git pull
иметь ту же группу, что и их родитель, периодически запускать что-то вроде этого:
find /path/to/repo -type d -exec chmod g+s {} \;
(т.е. найти все файлы в / path / to / repo каталога типа и запустить на них команду chmod g + s, чтобы установить флаг setgid.)
Еще один способ сделать это - сделать разработчиков основной группой входа для всех разработчиков:
usermod -g developers <username>
(Обратите внимание, что это может привести к тому, что пользователь больше не будет членом своей предыдущей основной группы входа, обычно это группа с тем же именем, что и имя пользователя. Используйте usermod -aG old_group usernanme
для восстановления этого членства.)
Использование usermod -g developers
означает, что когда пользователь создает новые файлы, они по умолчанию будут принадлежать пользователю: username , group: developers. Тем не менее, новые файлы обычно создаются так, что они доступны только для записи пользователем, а не для записи в группе. (т. е. если вы запустите touch foo; ls -l foo
, вы увидите маску разрешений как -rw-r--r--
.) Чтобы новые файлы, которые вы создаете, были доступны для групповой записи по умолчанию, добавьте umask 0002
в конец вашего .profile
или .bash_profile
файл.
echo umask 0002 >> ~/.profile
Уф! Надеюсь это поможет. Я уверен, что этот процесс не идеален, и он определенно не универсален, но, надеюсь, даст вам несколько советов. Я сделал это вики-сообществом, чтобы другие могли к нему добавить.