20. Gitolite + git настройка

Gitolite — удобное средство, позволяющее управлять Git репозиториями, используя один пользовательский аккаунт, управляя доступом пользователей к репозиториям на основе ssh-ключей, в отличии от gitosis позволяет более гибко настраивать доступ к репозиториям.

Gitolite управляет несколькими репозиториями под одной учетной записью пользователя, с использованием SSH ключей для идентификации пользователей. Конечным пользователям не нужны учетные записи на сервере, они будут входить через один общий аккаунт, который не позволит им запускать произвольные команды.

Установка gitolite

Если пакет замаскирован, размаскируйте его.

emerge dev-vcs/gitolite

После установки будет создан пользователь git (пароль отсутствует, домашняя директория /var/lib/gitolite/)

Настройка gitolite

Создаем ключ для root

su
ssh-keygen -t rsa

Будут созданы два файла:

/root/.ssh/id_rsa.pub 
/root/.ssh/id_rsa

Публичный и закрытый rsa ключи

Создаем репозиторий с настройками

Копируем открытый ключ

cp /root/.ssh/id_rsa.pub /tmp/id_rsa.pub

Инициируем gitolite

su git
cd
gitolite setup -pk /tmp/id_rsa.pub

Удаляем из /tmp открытый ключ

rm /tmp/id_rsa.pub

Если планируется использовать git-web, для того чтобы, репозиторий с настройками был не виден в web изменим права на директорию

chmod 700 /var/lib/gitolite/repositories/gitolite-admin.git

Настраиваем репозиторий для пользователя

Переходим в /tmp

cd /tmp

Клонируем директорию с настройками

git clone git@имя_сервера:gitolite-admin.git

Переходим в директорию с настройками

cd gitolite-admin

Копируем пользовательский открытый ключ в директорию /tmp/gitolite-admin/keydir

scp root@имя_клиентского_компьютера:/home/имя_пользователя/.ssh/id_rsa.pub ./keydir/имя_пользователя@имя_клиентского_компьютера.pub

Настраиваем новый репозиторий для пользователя имя_пользователя

vi conf/gitolite.conf

repo     gitolite-admin
         RW+     =     id_rsa

repo     project1
         RW+     =     testuser@remotehost
Права могут быть указаны следующим образом:
  • R - только чтение
  • RW - чтение добавление коммитов, запрещен rewind (push --force)
  • RW+ - полный доступ
  • RWC - возможность создавать ветку
  • RWD - возможность удалять ветку
  • - запретить запись
объекты доступа могут быть:
  • master@ - ветки
  • ref/tags - теги (версии)
  • NAME/имя_файла - имена файлов/каталогов

Для создания группы используется следующий синтаксис

@groupname = user1 user2 user3

Также этот синтаксис используется для группировки веток

@importantbranches = master$ developer$ test$

repo testing
    RW @importantbranches = @groupname
    -  @importantbranches = @groupname
    RW+                   = @groupname

Делаем commit для настроек

git commit -am "Granted full access for testuser@remotehost to project1" 

Записываем репозиторий с настройками

git push origin master

Создаем новый репозиторий

В отличии от gitosis в gitolite можно предварительно не создавать репозиторий через --bare init, достаточно добавить его в конфигурационный файл.

Этот репозиторий будет доступен пользователю на его компьютере через ssh

git clone ssh://git@имя_сервера/project1.git

без ввода пароля (по открытому ключу)

Проверка sshd

Демон sshd должен быть запущен.

Должен быть разрешен доступ по ssh пользователю git файл /etc/ssh/sshd_config

AllowUsers git

Настройка git-daemon

vi /etc/conf.d/git-daemon

GITDAEMON_OPTS="--syslog --port=9418 --base-path=/var/lib/gitolite/repositories/ --export-all" 
GIT_USER="apache" 

Если будут проблемы при перезапуске меняем номер порта --port=9418 на другой номер перезапускаем демона git, меняем обратно перезапускаем демона git.

/etc/init.d/git-daemon restart

Проблема перезапуска git-daemon

При перезапуске демона может возникнуть проблема повторного открытия порта, в /var/log/message она записывает как

git-daemon[pid]: unable to allocate any listen sockets on host (null) port 9418

Чтобы ее избежать необходимо добавить в GITDAEMON_OPTS параметр --reuseaddr

Настройка прав на файлы репозиториев

При сохранение файлов репозиториев gitolite присваивает их пользователю и группе git. Права же устанавливаются
согласно параметру UMASK в файл /var/lib/gitolite/.gitolite.rc. Это может быть важно, если git-daemon запускается не под пользователем git.

Создание пользовательского ключа

В сеансе пользователя, на пользовательском компьютере.

ssh-keygen -t rsa

В пользоваетельской директории .ssh будут созданы два ключа

id_rsa
id_rsa.pub

закрытый и публичный (pub)

Если публичный ключ записан в директорию keys репозитория настроек gitolite на сервере, а также в файле conf/gitolite.conf настроены права к репозиториям то пользователь получит доступ к репозиториям на сервере.

Примеры прав доступа к репозиториям

Разрешить группе developers производить любые действия с репозиторием кроме модификации ветки master

repo myrep
    -    master$ = @developers
    RW+          = @developers

Запретить rewind для ветки master, (в целом это правило означает что группа @developer может добавлять коммиты и только в ветку master).

repo myrep
     RW  master$ = @developers

Разрешить группе developers выполнять любые действия с репозиторием, кроме создание тегов, теги может создавать только maindeveloper.

repo myrep
     RW+ refs/tags = maindeveloper
     -   refs/tags = @developers
     RW            = developers
Спасибо!