Gitosis - это система управления несколькими git-репозиториями и управления доступом к ним без необходимости создавать под каждого разработчика отдельного пользователя системы. Все все разработчики будут входить через общий аккаунт и индивидуальные ssh ключи. Преимущества такого решения:
- Нет необходимости заведения пользователей под каждого разработчика
- Простая и быстрая настройка доступа к репозиториям
- Работа через SSH-протокол
Установка Gitosis
Т.к. gitosis написан на python, то для его установки необходим python и пакет python-setuptools
sudo apt-get install python python-setuptools
Ставим непосредственно gitosis. В конечном счете все сводится к клонированию репозитория gitosis и установке через setuptools
git clone git://eagain.net/gitosis.git
cd gitosis
python setup.py install
Настройка на сервере
Нам нужен пользователь под которым будет работать gitosis. Как правило такого пользователя называют git. Добавляем пользователя и группу.
sudo adduser --system --group --disabled-password --home /home/git git
Далее необходим ssh ключ с помощью которого можно будет управлять настройками gitosis, можно использовать свой публичный ключ, если есть или сгенерировать новый (не забыв при этом приватную часть перенести на тот компьютер с которого планируется администрирование gitosis).
ssh-keygen -b 2048 -t rsa -f /tmp/gitosis -C "Gitosis admin"
Запускаем gitosis от имени пользователи git
sudo -H -u git gitosis-init < /tmp/gitosis.pub
Т.к. конфиг gitosis хранится в виде репозитория и применяется при git push, то необходимо сделать исполняем post-update хук.
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
Управление репозиториями
Теперь для добавление новых репозиториев и установки доступов к ним необходимо с клиентской машины, на которой есть приватная часть ключа от gitosis’а, клонировать репозиторий конфигурации.
git clone git@АДРЕС_СЕРВЕРА:gitosis-admin.git
cd gitosis-admin
В папке будет локальная версия конфигурации gitosis.conf и папка keydir. Открываем файл gitosis.conf, содержимое будет примерно следующее:
[group gitosis-admin]
writable = gitosis-admin
members = username
Для удобства я рекомендую добавить уровень отладки, который позволит выводить намного больше информации при push’e коммитов в репозитории, для этого надо добавить следующие строки в файл конфигурации:
[gitosis]
loglevel = DEBUG
Для добавления нового репозитория, в конфиг необходимо добавить следующее:
[group projectname]
writable = project_name
members = developer1 developer2
[group projectname-read]
readonly = project_name
members = developer3
Мы добавили две группы projectname и projectname-read. В первой группе мы разрешили разработчикам developer1 и developer2 писать в репозиторий project_name, а во второй группе мы разрешили разработчику developer3 только читать из этого же репозитория.
Можно не создавать секцию с доступом readonly, когда нет необходимости предоставлять доступ только на чтение. Имена групп в конфиг файле не на что не влияют но должны быть уникальны в рамках файла.
Открытые ключи указанных в конфиге пользователей нужно скопировать в каталог gitosis-admin/keydir. Важно чтобы файлы ключей имели имена вида имя_пользователя.pub. В данном примере в папку необходимо добавить публичные ключи developer1.pub, developer2.pub, developer3.pub.
Для сохранения всех настроек надо закоммитить изменения в репозиторий и push’ить на сервер.
git commit -am "Добавлен проект project_name"
git push
Теперь разработчик developer1 может начать работать на проектом. Для этого он просто создает локальный репозиторий project_name и добавляет в качестве удаленного репозитория сервер с gitosis.
mkdir project_name
cd project_name
git init
git remote add origin git@АДРЕС_СЕРВЕРА:project_name.git
Теперь, можно пушить свой репозиторий на сервер с gitosis. Удаленный репозиторий создастся автоматически при первом коммите.
git push origin master
На этом простейшая настройка gitosis закончена.