У меня есть репозиторий GIT, который я управляю для своего офиса. Из-за политики компании мы не можем использовать внешних хостинг-провайдеров, таких как GitHub и т.п. Итак, я остался делать все, что в моих локальных сетях.
Каждый управляет своими собственными локальными репозиториями, но у нас также есть удаленный репозиторий, который наши пользователи нажимают (и доступны для таких приложений, как Hudson и Fisheye), подобно тому, как центральное репо будет работать в подрывной деятельности. Каждый пользователь имеет настройку открытых ключей, поэтому они могут выполнять аутентификацию без пароля на ящике, где находится наш удаленный репозиторий.
В нашем удаленном репозитории я настроил их для совместного использования в режиме "group":
git config core.sharedRepository group
Все наши пользователи также являются членами группы GIT, но это не основная группа для многих пользователей. Кажется, что когда GIT создает или обновляет любые объекты на "push", он использует основную группу пользователя. Вместо этого мне нужно использовать общую группу "git", в которой каждый пользователь является членом. Я видел документацию в Интернете, которая ранее обсуждала установку липкого бита, но, похоже, она отличалась в зависимости от источника и на самом деле не затрагивала проблему создания общей группы (если я просто делаю файлы произвольно записываемыми, Я мог бы также сделать их 777).
Update:
Использование Matthew Flaschen ответ ниже
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
find /opt/remote-repos -type d -exec ...
Находит все каталоги в местоположении /opt/remote -repos и выполняет на них команду. Команда (chmod g + rws) гарантирует, что группа может читать и записывать эти файлы, а также устанавливает липкую ставку, чтобы указанная группа всегда использовалась при выполнении. (Я не знаю, как использовать часть {} +, я предполагаю, что это связано с опцией find exec).
В любом случае, просто хочу подтвердить, что мое понимание этого решения верное.
Другие ссылки:
- chmod из Википедии
- SetGID (или SetUID) из Википедии
- Git Обсуждение SharedRepository