Gitolite

Updated 6 Mai 2019

Gitolite

Gitolite permet de gérer facilement vos dépôts Git depuis un seul compte utilisateur. L'accès utilisateur aux dépôts est géré par des clés SSH+. Gitolite permet une grande souplesse d'accès aux dépôts, en en gérant plusieurs associés à un seul compte utilisateur, et en utilisant des clés SSH pour l'authentification. Les utilisateurs finaux ne doivent pas avoir de compte sur le serveur, car ils seront connectés via un seul compte partagé, ce qui leur évitera d'exécuter des commandes non-autorisées.

Note

Le présent article est basé sur l'utilisation du client Git sous Windows.

Installer Gitolite

Pour installer Gitolite, exécutez :

emerge -a dev-vcs/gitolite

Une fois l'installation terminée, le compte git+ sera créé, accessible sans mot de passe. /var/lib/gitolite/ sera son répertoire personnel.

Configurer Gitolite

Créer les clés pour root :

ssh-keygen -t rsa

Deux fichiers seront créés :

  • /root/.ssh/id_rsa.pub clé publique
  • /root/.ssh/id_rsa clé privée

Créer un dépôt contenant les paramètres

Copiez la clé publique :

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

Initialiser Gitolite

Compléter la configuration en tant qu'utilisateur git

su git

cd

gitolite setup -pk /tmp/id_rsa.pub

exit

Note

La touche -pk+ permet d'effacer les données de la configuration précédente de Gitolite, si elles étaient disponibles à l'époque.

Supprimez la copie temporaire de la clé publique :

rm /tmp/id_rsa.pub

Si vous comptez utiliser GitWeb, modifiez les permissions du répertoire, afin que le dépôt de configuration soit invisible en ligne :

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

Configurer le dépôt utilisateur

Copiez le dépôt de configurations dans ~/tmp/gitolite-admin~~ :

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

Accédez au répertoire dans lequel les paramètres sont stockés :

cd /tmp/gitolite-admin

Copiez la clé publique de ~gituser~~ dans /tmp/gitolite-admin/keydir de la manière qui vous convient, par exemple en utilisant la commande scp pour une copie sécurisée des fichiers :

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

Note

Le nom du fichier de clé publique du client dans /tmp/gitolite-admin/keydir est également celui de l'utilisateur sur Gitolite.

Configurez un nouveau dépôt, ~projet1, qui appartient à gituser~~ :

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

repo    gitolite-admin
RW+     =    id_rsa

repo    project1
RW+     =    gituser
Privilèges, accès et groupes

Les droits d'accès peuvent être indiqués comme suit :
"R" - lecture seule
"RW" - lecture et commits autorisés, rewind non autorisé (push --force)
"RW+" - plein accès
"RWC" - autorisé à créer une branche
"RWC" - autorisé à supprimer une branche
"-" - accès en écriture refusé


Accessible :
"master@"" - branches
"ref/tags" - balises ou versions
"NOM/nom_du_fichier" - noms de fichiers ou de répertoires


Pour créer un groupe, utiliser la syntaxe suivante :
" @nom_groupe " = utilisateur1 utilisateur2 utilisateur3


La même syntaxe est utilisée pour faire des groupes de branches :
@branches_importantes = master$ developer$ test$
repo testing
RW @branches_importantes = @nom_de_groupe
- @importantbranches = @groupname
RW+ = @nom_de_groupe

Modifiez et sauvegardez :

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

git push origin master

Créer un nouveau dépôt

Sur Gitolite, il n'est pas nécessaire de créer un dépôt avec --bare init en premier, il suffit de l'indiquer dans le fichier de configuration. Le dépôt sera accessible à l'utilisateur sur son PC avec une clé publique SSH, c'est-à-dire qu'il ne sera pas protégé par un mot de passe :

git clone ssh://git@nom_du_serveur/project1.git

Vérifier sshd

rc-status | grep sshd
 sshd                                                              [  started  ]

git+ doit avoir un accès SSH :

/etc/ssh/sshd_config

AllowUsers git

Configurer le démon Git

/etc/conf.d/git-daemon

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

Note

Si le redémarrage échoue, remplacez le numéro de port --port=9418 par un autre numéro, relancez git-daemon, modifiez-le à nouveau et relancez git-daemon encore une fois.

Créer une clé utilisateur privée sous Linux

Connecté comme utilisateur sur l'ordinateur de ce dernier, exécutez la commande suivante :

ssh-keygen -t rsa

Deux fichiers seront créés dans le répertoire ~/.ssh :

  • id_rsa - clé privée
  • id_rsa.pub - clé publique

Si la clé publique est stockée dans le répertoire keys+ du dépôt de configuration Gitolite sur le serveur, et si conf/gitolite.conf a été modifié afin d'autoriser l'accès aux dépôts, l'utilisateur se verra accorder cet accès.

Créer une clé pour les utilisateurs Windows

Pour créer une clé RSA privée, utilisez ssh-keygen.exe, intégré dans l'environnement MinGW32.

Deux fichiers seront créés en conséquence dans C:\Users\username.ssh :

  • id_rsa - clé privée
  • id_rsa.pub - clé publique

Important

Ne renommez pas les clés privées et publiques SSH, car MinGW32 + Git-2.6.3 (32 bits) ne fonctionnent qu'avec une clé nommée id_rsa.

Configurer l'accès aux fichiers du dépôt

En sauvegardant les fichiers du dépôt, Gitolite les attribue à l'utilisateur et au groupe git+. Les autorisations sont définies par le paramètre UMASK dans /var/lib/gitolite/.gitolite.rc. Cela peut être important si le démon Git ne démarre pas sous l'utilisateur git+.

Exemples de droits d'accès au dépôt

Autorisez le groupe developers à disposer pleinement du dépôt, sauf à modifier la branche master :

conf/gitolite.conf

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

Désactivez le rewind pour master (cette règle signifie que le groupe @developer ne peut faire de commit que sur la branche master) :

conf/gitolite.conf

repo myrep
    RW  master$ = @developers

Autorisez le groupe developers à disposer pleinement du dépôt, sauf à créer des tags (seul maindeveloper peut le faire) :

conf/gitolite.conf

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