time

gitolite: свой git репозитарий

После переезда на новый сервер мне захотелось сменить 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/ будут два основных элемента:

  • каталог repositories – тут лежат все bare-репозитории, т.е. без рабочих копий. Тут же есть репозиторий gitolite-admin.git, через который управляются другие репозитории и доступ к ним;
  • файл .gitolite.rc с системными настройки gitolite

Для добавления нового репозитория и пользователей нужно склонировать 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

Другие варианты добавления сущесвующих репозиториев описаны тут.

blog comments powered by Disqus