У меня есть GIT-репозиторий, которым я управляю для своего офиса. Из-за политики компании мы не можем использовать внешних хостинг-провайдеров, таких как GitHub и тому подобное. Итак, мне осталось сделать то, что я могу с нашей локальной сетью.
Каждый управляет своими собственными локальными репозиториями, но у нас также есть удаленный репозиторий, к которому наши пользователи обращаются (и который доступен для таких приложений, как Hudson и Fisheye), аналогично тому, как центральное репо работает в subversion. У каждого пользователя есть открытые ключи, поэтому они могут выполнять проверку подлинности без пароля для ящика с нашим удаленным хранилищем.
Для нашего удаленного репозитория они настроены для совместного использования в «групповом» режиме:
git config core.sharedRepository group
Все наши пользователи также являются членами группы git, но это не основная группа для многих пользователей. Кажется, когда git создает или обновляет какие-либо объекты «push», он использует основную группу пользователя. Вместо этого мне нужно использовать общую группу «git», членом которой является каждый пользователь. Я видел в сети документацию, в которой ранее обсуждалось, как установить бит закрепления, но, похоже, он различается в зависимости от источника и на самом деле не решает проблему создания общей группы (если я просто делаю файлы произвольно доступными для записи, Я мог бы также сделать их 777).
Обновление:
Использование ответа Мэтью Флэшена ниже
chgrp -R git repo.git
find repo.git -type d -exec chmod g+rws {} +
Мне удалось создать хранилище, из которого каждый мог толкать и извлекать вместе. Я также посмотрю на gitolite, но мои потребности довольно просты, и наша среда позволяет автоматически настраивать пользователя и ключи, поэтому их использование не является ключевым. Тем не менее, я хочу убедиться, что я имею дело с этим правильно.
Моя структура репозитория включает каталог верхнего уровня (remote-repos) и подкаталоги для каждого из моих репозиториев (app-1.git, app-2.git, library-1.git и т. Д.). Я должен иметь возможность применять chmod g + rws {} + к каталогу верхнего уровня (remote-repos) вместо каждого отдельного репо, правильно? Команда поиска
find /opt/remote-repos -type d -exec ...
Находит все каталоги в каталоге / opt / remote-repos и выполняет для них команду. Команда (chmod g + rws) гарантирует, что группа может читать и записывать эти файлы, а также устанавливает фиксированную ставку, чтобы указанная группа всегда использовалась при выполнении. (Я понятия не имею, как использовать часть {} +, я предполагаю, что это связано с опцией find exec).
В любом случае, просто хочу подтвердить, что мое понимание этого решения верно.
Дополнительные ссылки: