У меня есть репозиторий GIT, которым я управляю для своего офиса. Из-за политики компании мы не можем использовать внешних хостинг-провайдеров, таких как GitHub и им подобных. Итак, мне осталось делать то, что я могу, с нашей локальной сетью.
Каждый управляет своими собственными локальными репозиториями, но у нас также есть удаленный репозиторий, который наши пользователи отправляют (и доступны для таких приложений, как Hudson и Fisheye), аналогичные как центральное репо будет работать при подрывной деятельности. У каждого пользователя настроены открытые ключи, поэтому они могут выполнять аутентификацию без пароля в системе, в которой размещен наш удаленный репозиторий.
Для нашего удаленного репозитория я настроил их для совместного использования в «групповом» режиме:
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, но мои потребности довольно простые, и наша среда позволяет автоматически настраивать пользователя и ключи, так что это ' использование не является ключевым. Тем не менее, я хочу убедиться, что имею дело с этим правильно.
Моя структура репозитория включает каталог верхнего уровня (удаленные репозитории) и подкаталоги для каждого из моих репозиториев (app-1.git, app- 2.git, библиотека-1.git и т. Д.). Я должен иметь возможность применить chmod g + rws {} + к каталогу верхнего уровня (удаленные репозитории) вместо каждого отдельного репо, верно? Команда find
find /opt/remote-repos -type d -exec ...
находит все каталоги в расположении / opt / remote-repos и выполняет в них команду. Команда (chmod g + rws) гарантирует, что группа может читать и записывать эти файлы, а также устанавливает фиксированную ставку, чтобы указанная группа всегда использовалась при выполнении. (Я понятия не имею об использовании части {} +, я предполагаю, что это связано с параметром find exec).
В любом случае, просто хочу подтвердить, что я правильно понимаю это решение.
Дополнительные ссылки: