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 закончена.