После переезда на новый сервер мне захотелось сменить gitosis на gitolite. Обе утилиты позволяют настроить доступ к git-репозитариям для группы разработчиков без создания для каждого разработчика отдельного системного пользователя.
Два основных повода для переезда с gitosis на gitolite: во-первых gitosis перестал поддерживается разработчиками, в то время как последняя версия gitolite датирована 16 ноябрем 2011 года, во-вторых, gitolite поддерживает разграничение прав на уровне веток, тегов, файлов, директорий, т.е. можно указать кому можно пушить (push) правки в ветку, а кому нет. Еще одним аргументом в сторону gitolite были недавние ротации на kernel.org, после которых было принято решение перейти на gitolite.
Другие возможности gitolite описаны тут.
Про установку и настройку gitosis под ubuntu и centos я как-то писал тут.
Для начала нам нужно создать системного пользователя, который будет администратором всех репозиториев. Следующим этапом будет создание репозиториев и виртуальных пользователей, которые идентифицируются своими публичными ключами.
Скопируем свой публичный ключ на сервер (если еще не копировали)
ssh-copy-id -p 22 -i ~/.ssh/id_rsa.pub proft@192.168.1.3
На сервере выполнить (proft заменить на своего пользователя)
cp ~/.ssh/authorized_keys /tmp/proft.pub chmod a+r /tmp/proft.pub
Создадим пользователя git на сервере и изменим ему пароль
sudo useradd -d /home/git/ -m git sudo passwd git
Склонируем последнюю версию gitolite и установим. Инициализируем gitolite своим клюем (этот пользователь будет администратором репозиториев)
su - git git clone git://github.com/sitaramc/gitolite mkdir ~/bin gitolite/install -ln ~/bin gitolite setup -pk /tmp/proft.pub # sudo rm /tmp/proft.pub
После установки в /home/git/ будут два основных элемента:
Для добавления нового репозитория и пользователей нужно склонировать gitolite-admin репозиторий на локальную машину (категорически противопоказано править настройки напрямую в репозитории).
git clone ssh://git@192.168.1.3:22/gitolite-admin cd gitolite-admin
Перед добавлением нового разработчикам нужен его публичный ключ, инструкцию по созданию смотрим тут. После получения ключа, переименовываем его, что бы имя файла было похоже на имя_пользователя.pub. Скопируем ключ в директорию keydir.
Отредактируем файл conf/gitolite.conf, для добавления нового репозитория, пользователя и прав доступа. Имена пользователей должны совпадать с имена файлов их публичных ключей, без расширения.
# vim conf/gitolite.conf # создадим группу разработчиков @devs = dev1 dev2 repo gitolite-admin RW+ = proft # тестовый репозиторий repo django_project RW+ = @devs
Мы добавили новый репозиторий django_project, для которого группа разработчиков devs имеет полный доступ на чтение и запись.
Для применения правок запушем изменения на сервер.
git add . git commit -m "new reps && users" git push
После коммита будет автоматически создан новый репозиторий на сервере (если такого нет).
Для получение информации о репозиториях на сервере выполним
ssh git@192.168.1.3 info
Для добавления нового репозитория можно проделать обычные действия
git init git add . git commit -m 'init' git remote add origin ssh://git@192.168.1.3:22/django_test git push origin master
Для существующего репозитория выполним
git push --all ssh://git@192.168.1.3:22/django_test git push --tags ssh://git@192.168.1.3:22/django_test
Другие варианты добавления сущесвующих репозиториев описаны тут.