ou comment j’ai déployé git avec mes ouatmille machines pour travailler tout seul sur mes projets.

Principe de fonctionnement

Vu que je suis le seul développeur, je vais à la fois être le développeur et l’intégrateur. Alors, on ne va pas s’embêter : un dépôt accessible en lecture écriture sur le serveur, et une foultitude de comptes autorisés.

Configuration du serveur

Comme l’explique très bien la documentation de git, deux protocoles de communication sont utilisés :

  • le protocole git:// pour les accès en lecture ;
  • le protocole ssh:// pour les accès en écriture.

La machine hôte de votre projet doit donc activer ces services, et autoriser les connections idoines. Ce qui revient à :

  • pour git:// : installer le paquet git-daemon, ouvrir le port 9418 et activer les services git et inetd dont il dépend ;
  • pour ssh:// : installer le paquet openssh-server, ouvrir le port 22 et activer le service sshd.

On va aussi créer un pseudo-utilisateur, qui hébergera les dépôts git sur son compte, qui, par un heureux hasard totalement fortuit, sera également le répertoire système tel que configuré dans /etc/xinet.d/git

# useradd -d /var/lib/git -N -M -s /usr/bin/git-shell git
# mkdir /var/lib/git/.ssh
# chown -R git /var/lib/git

Identification des participants

Chaque machine depuis laquelle je compte éditer le projet doit être identifiée (c’est surtout valable pour les accès en écriture). Le livre « Pro git » explique très bien comment générer une clef pour chaque participant.

host$ ssh-keygen
host$ scp ~/.ssh/id_rsa.pub server:/tmp/host.id_rsa.pub
server# cat /tmp/host.id_rsa.pub >> /var/lib/git/.ssh/authorized_keys

Initialisation du dépôt

Créons donc un projet, à partir de rien.

cd /var/lib/git
git init --bare MonProjet.git

Visibilité du dépôt

Le projet est donc accessible via deux URL :

  • git://server/MonProjet.git pour les accès publics en lecture uniquement (via git clone);
  • git@server:~/MonProjet.git pour les accès privés en lecture (toujours via git clone) et en écriture (via git push).

Tags: ,