Проблемы с правами доступа к файлам при совместном использовании GIT Remote Repository - PullRequest
12 голосов
/ 15 марта 2011

У меня есть 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).

В любом случае, просто хочу подтвердить, что мое понимание этого решения верно.

Дополнительные ссылки:

Ответы [ 3 ]

15 голосов
/ 15 марта 2011

git теперь имеет опцию core.sharedRepository именно для этой цели.

Я рекомендую:

git config core.sharedRepository group

Затем, чтобы установить первоначальное владение группой, выполните:

sudo chgrp -R somegroup .
sudo find -type d -exec chmod g+s {} +
sudo chmod -R g+rw .git/objects/

в корне репо.

Для нового репо вы можете сделать:

git init --shared=group

Только если вышеперечисленное не работает:

chgrp git -R repo.git 
find repo.git -type d -exec chmod g+rws {} +

s - флаг setgid. В каталогах это означает, что файлы и каталоги, созданные в этом каталоге, имеют одну и ту же группу (в данном случае git). Вновь созданные подкаталоги также наследуют setgid.

Это похоже на настройку git-репо на моей работе. Тем не менее, я согласен, вы должны рассмотреть фактический процесс сервера git.

3 голосов
/ 10 февраля 2015

Пользователь не должен использовать никакую команду git с разрешениями sudo.

Если она не работает без разрешений sudo, обязательно проверьте разрешение всей папки с 755 и файлы с 644,

Используя следующие команды, вы можете сбросить разрешения, как и ожидалось.

find /path/to/repo_folder -type d -exec chmod 755 {} \;
find /path/to/repo_folder -type f -exec chmod 644 {} \;

В приведенной выше команде может потребоваться разрешение sudo.

После этого действия вы должны commit + push внести все изменения в репо. Это заново создаст разрешения для всех файлов кода в репо.

0 голосов
/ 15 марта 2011

Самый простой способ - использовать Gitolite.У меня был большой успех с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...