Mettre en place un dépôt central git

Cela peut sembler quelque peu paradoxal étant donné le mode distribué et décentralisé de ce gestionnaire de version qu'est git mais on peut vouloir utiliser git un peu comme subversion et avoir un dépôt qui servirait de dépôt "officiel". Pour ce faire nous allons utiliser gitosis qui va énormément nous faciliter la vie.

L'installation est des plus simples (en supposant que vous utilisez une debian) :

apt-get install gitosis

Cela devrait ramener les packages suivants s'ils ne sont pas déjà installés : git-core, adduser, sudo. 

Première étape : configuration de gitosis

Il faut commencer par créer un utilisateur à qui vont appartenir tous les dépôts présents sur le serveur. On ne va pas être très original et on va appeler cet utilisateur git et on va le mettre dans le groupe git. La commande qui va bien :

adduser --home /home/git git

Mettez le mot de passe que vous voulez. Nous n'utiliserons pas ce compte directement mais tous les accès aux dépôts se feront à travers lui.  Il faut maintenant déposer sur le serveur votre clé publique générée avec

ssh-keygen -t rsa

si jamais vous n'en avez pas. Le fichier à déposer est ~/.ssh/id_rsa.pub. On va maintenant générer un premier dépôt git :

 /tmp/id_rsa.pub

ou si vous faîtes un su - git ,tout simplement :

gitosis-init > /tmp/id_rsa.pub

Si l'opération se passe bien, vous devriez avoir un message de ce genre : Initialized empty Git repository in ./. Vérifiez que le script /home/git/repositories/gitosis-admin.git/hooks/post-update est exécutable sinon donnez lui les droits :

chmod +x /home/git/repositories/gitosis-admin.git/hooks/post-update

Et voilà, nous avons un dépôt git ! Vérifiez vous même en tapant sur votre machine locale :

git clone git@VOTRE_SERVEUR:gitosis-admin.git

Cela créé une copie du dépôt que l'on a créé sur le serveur. Le répertoire gitosis-admin nouvellement créé ne contient que deux fichiers : un fichier de configuration gitosis.conf et un répertoire keydir contenant une copie de votre clé publique. Désormais nous n'avons plus à nous connecter sur le serveur : l'ajout de dépôts, le changement de permissions sur les dépôts et toute la configuration de nos dépôts se fait à partir du dépôt gitosis-admin que l'on a cloné. Pour que les modifications soient effectives sur le serveur, il suffira de les envoyer sur le servuer (git push).

Deuxième étape : création de notre premier dépôt

C'est bien joli gitosis mais nous n'avons toujours pas de dépôt pour créer notre super projet helloWord. Pour créer un nouveau, rien de plus simple. Il faut ouvrir le fichier de configuration gitosis.conf dont le contenu est à l'origine :

[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = VOTRE_NOM@YOUR_HOSTNAME

Ajoutons un groupe hello-group et créons le dépôt hello_world :

[group hello-group]
writable = hello-world
members = VOTRE_NOM@YOUR_HOSTNAME

Sauvegardons le nouveau fichier de configuration et envoyons les modifications sur le serveur (commit et push) :

git commit -m 'ajout du nouveau dépôt hello-world'
git push

Le dépôt n'a pas été créé mais il est déjà géré par gitosis. Créons-le localement et envoyons le sur le serveur :

mkdir hello-world
cd hello-world
git init
git remote add origin git@VOTRE_SERVEUR:hello-world.git

Il faut créer au moins un fichier, l'ajouter (git add) et faire le commit (git commit) avant de l'envoyer sur le serveur :

git push origin master:refs/heads/master

Et vous obtiendrez un message de ce genre :

Counting objects: 3, done.
Writing objects: 100% (3/3), 214 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@VOTRE_SERVEUR:hello-world.git
* [new branch]    master -> master

S'il n'y a aucune révision dans le dépôt local vous aurez cette erreur :

error: src refspec master does not match any.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'git@VOTRE_SERVEUR.net:hello-world.git'

Haut de page