Dépôts git avec Gitolite

Gitolite est un gestionnaire de dépôts git qui fonctionne exclusivement en ligne de commande. La documentation sur https://gitolite.com/gitolite/index.html est bien fournie et très claire pour l’administrateur. La présente page a pour but de donner quelques clés sur l’utilisation de gitolite tel que configuré sur ImmaeEu.

Authentification

L’accès aux dépôts se fait uniquement avec l’aide d’une clé ssh, dont il faudra me communiquer la clé publique. Après cela, gitolite sera accessible via ssh sur gitolite@git.immae.eu

Principes d’utilisation

L’accès à gitolite@git.immae.eu peut se gérer soit via git (push, clone, pull), soit via ssh. Dans ce deuxième cas, on peut en général utiliser la commande help ou le flag --help pour plus d’information. Par exemple pour lister les commandes disponibles (présentées également dans la suite du document):

ssh gitolite@git.immae.eu help

Ou pour doner une aide sur l’utilisation de la commande perms (cf Gestion des permissions du dépôt):

ssh gitolite@git.immae.eu perms --help

Clonage de dépôt

Selon l’accès demandé, vous aurez les droits sur les dépôts à cloner, auquel cas il suffit de les cloner avec la commande git:

git clone gitolite@git.immae.eu:path/to/repository

Si vous avez en plus votre propre espace, vous avez également accès à tout l’espace gitolite@git.immae.eu:perso/user_id/chemin/arbitraire, où user_id est l’identifiant qui vous a été attribué. Dans ce cas, les dépôts sont créés à la volée lorsque vous clonez un nouveau dépôt (qui sera vide) ou pushez votre nouveau code.

Lister les dépôts

Il est possible de lister les dépôts auxquels vous avez accès avec la commande ssh gitolite@git.immae.eu. Cela va lister tous les dépôts ainsi que les accès autorisés (C pour création pour les chemins arbitraires, R pour lecture seule, R W pour lecture et écriture)

Gestion des permissions du dépôt

Il y a quelques paramètres qui sont modifiables pour permettre l’accès aux dépôts à des personnes tièrces. Pour une gestion plus fine, il faudra me consulter.

  • Lister les permissions associées à un dépôt:

    ssh gitolite@git.immae.eu perms path/to/repository -l
    
  • Autoriser un utilisateur à lire le dépôt:

    ssh gitolite@git.immae.eu perms path/to/repository + READERS user_id
    
  • Autoriser un utilisateur à écrire dans le dépôt (mais sans push force):

    ssh gitolite@git.immae.eu perms path/to/repository + WRITERS user_id
    
  • Autoriser un utilisateur à écrire dans le dépôt (y compris push force):

    ssh gitolite@git.immae.eu perms path/to/repository + WRITERSPLUS user_id
    
  • Retirer les droits : même commande avec - au lieu de +

Cas particulier : Afin de faciliter la collaboration, un utilisateur user_id qui a au moins les droits en lecture sur un dépôt aura en plus la possibilité de pousser des branches avec un nom de la forme perso/user_id/nom_arbitraire.

Utilisateurs particuliers :

  • Immae: c’est moi

  • buildbot: si un dépôt est associé à des déploiements automatiques, c’est l’utilisateur qui aura besoin de pouvoir au moins lire le dépôt (voir Intégration continue avec Buildbot).

  • gitweb: c’est l’utilisateur qui permet d’autoriser l’affichage sur https://git.immae.eu (voir Accès public avec cgit)

  • daemon: permet de cloner sans authentification avec git://git.immae.eu/path/to/repository

  • @nixops: Normalement peu utile, il donne accès au dépôt à tous les administrateurs d’ImmaeEu.

  • naemon: Normalement inutile, il donne accès au dépôt à l’outil de monitoring.

Inviter des collaborateurs

Note

Cette section est un ajout spécifique à ImmaeEu.

Il est possible d’inviter des collaborateurs en intégrant leur clé directement. Ces invitations se gèrent avec la commande invite:

  • Ajouter un utilisateur foo avec la clé identifiée par bar:

    cat foo_id_rsa.pub | ssh gitolite@git.immae.eu invite add foo@bar
    
  • Supprimer l’utilisateur:

    ssh gitolite@git.immae.eu invite del foo@bar
    
  • Lister les utilisateurs invités:

    ssh gitolite@git.immae.eu invite
    

Une fois cet utilisateur invité, il aura un compte sous la forme votre_login-invite-foo. Il suffit ensuite d’attribuer un rôle à cet utilisateur (cf Gestion des permissions du dépôt).

L’utilisateur sera ensuite en mesure d’ajouter ou supprimer de lui-même de nouvelles clés ssh en suivant la procédure habituelle (cf Gestion de clés ssh).

Paramètres du dépôt

Certains paramètres du dépôt peuvent être édités, utile principalement pour personnaliser l’apparence du dépôt sur https://git.immae.eu dans le cas où il est public :

  • Définir la section où afficher le dépôt:

    ssh gitolite@git.immae.eu config path/to/repository --add gitweb.category SomeCategory
    
  • Définir le nom du dépôt:

    ssh gitolite@git.immae.eu config path/to/repository --add cgit.name UnNom
    
  • Définir la description du dépôt:

    ssh gitolite@git.immae.eu desc path/to/repository "Nouvelle description"
    
  • Définir le readme du dépôt:

    cat nouveau_readme.html | ssh gitolite@git.immae.eu readme path/to/repository set
    

    Il doit contenir du html qui sera « contenu » dans un <div>

Configuration d’événements

Il est possible de configurer les paramètres d’événements en mettant les informations dans un fichier .immae_config.yaml Les informations de la branche principale (HEAD, souvent master) seront utilisées pour configurer les actions lors des événements.

Chaque hook doit être activé par moi-même pour être utilisable. Sinon le fichier sera ignoré:

hooks:
  xmpp:
    # XMPP handles to push information to
    dest:
      - user1@example.com
      - user2@example.com
  buildbot:
    # Url to push the information to
    url: https://git.immae.eu/buildbot/test/change_hook/base
    # branches for which to push the change to buildbot
    # Default: every reference
    refs:
      - refs/heads/master
      - refs/heads/dev
    # Project name in buildbot configuration
    projectname: TestProject
  apprise:
    # Apprise URL to push events to
    # Can be replaced with a keyword to transmit to me for
    # confidentiality
    # See https://github.com/caronc/apprise/ for supported methods
    urls:
      - someKeyWord
      - matrixs://some.url/
    refs:
      # branches for which to push the change via Apprise
      # Default: every reference
      - refs/heads/master
      - refs/heads/dev
  mantisbt:
    # Project Source ID to push to on mantisbt (!= project id)
    projectSourceId: 11
meta:
  # Additional information used by hooks
  issueurl: "https://git.immae.eu/mantisbt/view_all_bug_page.php?project_id=7"
  repourl: "https://git.immae.eu/cgit/perso/Immae/TestProject.git/"
  commiturl: "https://git.immae.eu/cgit/perso/Immae/TestProject.git/commit/?id=%s"
  compareurl: "https://git.immae.eu/cgit/perso/Immae/TestProject.git/diff/?id2=%s&id=%s"
  branchurl: "https://git.immae.eu/cgit/perso/Immae/TestProject.git/log/?h=%s"

Automatisation

Il est possible d’effectuer des tâches automatiquement lors d’un push. Parmi les actions déjà implémentées, il y a:

La configuration de ces paramètres passe pour le moment par moi.

Gestion de clés ssh

Il est possible d’ajouter des clés ssh par deux moyens :

  • En me communiquant une nouvelle clé

  • De façon autonome en utilisant la commande gitolite associée:

    ssh gitolite@git.immae.eu sskm help
    

La suite de ce paragraphe détaille cette seconde méthode (dont la documentation en anglais est disponible aussi sur https://gitolite.com/gitolite/contrib/sskm.html ).

L’ajout d’une clé se fait en deux étapes :

  1. D’abord ajouter la clé:

    cat .ssh/id_rsa.pub | ssh gitolite@git.immae.eu sskm add @identifiant
    

@identifiant peut être remplacé par un nom au choix. (la commande prend du temps, il faut être patient)

  1. Puis la confirmer en se connectant avec cette nouvelle clé:

    ssh -i .ssh/id_rsa gitolite@git.immae.eu sskm confirm-add @identifiant
    

La suppression fonctionne de façon similaire avec del au lieu de add. À noter qu’il faut utiliser une autre clé que celle supprimée pour confirmer.