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'