Gitolite

Updated 6 March 2019

Gitolite

Gitolite is a convenient way to manage your Git repositories from a single user account. User access to the repositories is managed with SSH-keys+. Gitolite позволяет гибко настраивать доступ к репозиториям, управляя несколькими репозиториями под одной учетной записью пользователя, с использованием SSH-ключей для идентификации. End-users do not have to have accounts on the server, as they will be logged on via a single shared account, which will prevent them from executing custom commands.

Note

The article was written based on using the Git-client in Windows.

Installing Gitolite

To install Gitolite, run:

emerge -a gitolite

Once the installation is complete, the git+ account will be created, to be accessed without password. The home directory will be /var/lib/gitolite/.

Configuring Gitolite

Create the keys for root:

ssh-keygen -t rsa

Two files will be created:

  • /root/.ssh/id_rsa.pub - public key
  • /root/.ssh/id_rsa - private key

Creating a repository with settings

Copy the public key:

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

Initializing Gitolite

Complete the configuration as user git

su git

cd

gl-setup /tmp/id_rsa.pub -pk

exit

Note

The -pk+ key allows you to delete data from the previous Gitolite configuration if it was available back then.

Delete the temporary copy of the public key:

rm /tmp/id_rsa.pub

Если планируется использовать GitWeb, измените права доступа к директории, чтобы репозиторий с настройками не был виден в Web:

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

Configuring the user repository

Copy the configuration repository to ~/tmp/gitolite-admin~~:

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

Go to the directory where the settings are stored:

cd /tmp/gitolite-admin

Скопируйте открытый ключ пользователя gituser в директорию /tmp/gitolite-admin/keydir любым удобным способом - например, командой для защищенного копирования файлов scp:

scp root@userhostname:/home/gituser/.ssh/id_rsa.pub ./keydir/gituser.pub

Note

При этом имя файла открытого ключа клиента в каталоге /tmp/gitolite-admin/keydir является также именем пользователя в Gitolite.

Configure a new repository, ~project1 belonging to gituser~~:

/tmp/gitolite-admin/conf/gitolite.conf

repo    gitolite-admin
RW+     =    id_rsa

repo    project1
RW+     =    gituser
Permissions, access, and groups

Permissions may be specified as follows:
"R" - read only
"RW" - read and commit allowed, rewind not allowed (push --force)
"RW+" - full access
"RWC" - allowed to create a branch
"RWC" - allowed to remove a branch
"-" - write access denied


Объектами доступа могут быть:
"master@"" - branches
"ref/tags" - tags, or versions
"NAME/file_name" - file or directory names


Use the following syntax to create a group:
"@groupname" = user1 user2 user3


Он же используется для группировки веток:
@importantbranches = master$ developer$ test$
repo testing
RW @importantbranches = @groupname
- @importantbranches = @groupname
RW+ = @groupname

Edit and save the new settings:

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

git push origin master

Creating a new repository

В Gitolite можно предварительно не создавать репозиторий через --bare init - достаточно добавить его в конфигурационный файл. Соответствующий репозиторий будет доступен пользователю на его компьютере по открытому ключу SSH, без ввода пароля:

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

Checking sshd

rc-status | grep sshd
 sshd                                                              [  started  ]

git+ must be allowed SSH access:

/etc/ssh/sshd_config

AllowUsers git

Configuring the Git daemon

/etc/conf.d/git-daemon

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

Note

При проблеме перезапуска измените номер порта --port=9418 на другой номер, перезапустите git-daemon, измените обратно и ещё раз перезапустите демон git-daemon.

Creating a private user key in Linux

When logged in as the user on the user's computer, run the following:

ssh-keygen -t rsa

Two files will be created in the ~/.ssh directory:

  • id_rsa - private key
  • id_rsa.pub - public key

If the public key is stored in the keys+ directory of the Gitolite configuration repository on the server, and if conf/gitolite.conf has been edited to give access to the repositories, the user will be given this access.

Creating a key for users in Windows

Генерация пользовательского RSA-ключа производится с помощью встроенной в MinGW32-окружение утилиты ssh-keygen.exe.

В результате в каталоге C:\Users\имя_пользователя\.ssh будут созданы созданы два файла:

  • id_rsa - private key
  • id_rsa.pub - public key

Important

Не переименовывайте приватный и публичный ключи SSH, так как cборка MinGW32 + Git-2.6.3 (32-bit) умеет работать только с ключом с именем id_rsa.

Configuring access to repository files

When saving repository files, Gitolite assigns them to the git+ user and group. Права же устанавливаются согласно параметру UMASK в файл /var/lib/gitolite/.gitolite.rc. It may be important if the Git daemon is not started under the git+ user.

Examples of repository access permissions

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

conf/gitolite.conf

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

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

conf/gitolite.conf

repo myrep
    RW  master$ = @developers

Allow the developers group to do anything with the repository except for creating tags (only ~maindeveloper can do this):

conf/gitolite.conf

repo myrep
 RW+ refs/tags = maindeveloper
 -   refs/tags = @developers
 RW            = developers