Git: Créer des dépôts privés sur du mutualisé

Si vous lisez régulièrement mon blog, vous devriez savoir que j'ai rompu avec 1&1 et que je suis désormais chez OVH.

Etant donné que je me suis encore un peu plus intéressé à Git ces derniers temps, je me suis dit qu'il serait vraiment cool d'avoir des dépôts privés parce qu'entre nous, les prix sont un peu trop reuch sur Github.. ahem. Du coup, j'ai tenté le truc : pourquoi ne pas avoir des dépôts Git sur mon hébergement mutualisé ?

Finalement, en cherchant à droite à gauche sur Web, je me suis rendu compte que c'était assez simple et qu'en quelques lignes de commandes (côté client par contre), on peut arriver à nos fins.

Pré-requis

  • Un accès SSH
  • Git

Organisation du serveur

Avant de créer des dépôts, le mieux est quand même de préparer un peu la chose. Rien de bien méchant mais afin d'éviter de nous compliquer la tâche, on va essayer de faire cela comme il faut.

Personnellement, je suis à la recherche d'une interface Web pour explorer mes dépôts Git (à la Github) écrit soit en PHP, soit en C, soit en Perl mais pouvant fonctionner avec des versions un peu vieillottes et surtout dans un environnement mutualisé !

Mon but est donc d'arriver à créer un sous-domaine du genre http://git.eexit.net donc je vais naturellement organiser mes répertoires de cette manière :

~
├── git -> net/eexit/git/repos
├── net
│   └── eexit
│       ├── git
│       │   └── repos
│       └── www
└── www -> net/eexit/www

Donc on a bien notre arborescence bien propre avec notre sous-domaine www dans net/eexit/www et notre sous-domaine git dans net/eexit/git mais à quoi servent les liens symboliques ?

Le lien symbolique www est obligatoire à l'hébergement mutualisé car c'est le point d'entré du domaine associé à notre offre d'hébergement ; quant au second, il nous servira de raccourcis pour l'accès SSH par la suite.

Création d'un dépôt vide

La seconde étape consiste donc à créer un dépôt vide en local sur notre machine client (car la version de Git présente sur OVH ne permet pas de faire cela) :

mkdir MonProjet.git
cd !$
git init --bare
mv hooks/post-update.sample hooks/post-update

Hop, c'est chose faite. Maintenant, on le balance sur notre espace Web :

scp -r MonProjet.git user@ssh.clusterXXX.ovh.net:git
user@ssh.clusterXXX.ovh.net s password: 
config                                           
description                                    
HEAD                                             
applypatch-msg.sample                            
commit-msg.sample                                
post-commit.sample                               
post-receive.sample                              
post-update                                      
pre-applypatch.sample                          
pre-commit.sample                                
pre-rebase.sample                                
prepare-commit-msg.sample                        
update.sample                                    
exclude                                        
rm -rf MonProjet.git

Remarque : voyez ici l'utilisation du lien symbolique au lieu de se taper toute l'arborescence jusqu'au répertoire des dépôts.

Ok, vous venez tout juste de créer et de mettre en ligne sur votre serveur privé un nouveau dépôt Git pour le projet MonProjet. Facile non ?

Maintenant, comment bosser avec ?

Récupération de notre working copy

Aussi simplement que sur les autres sites proposant d'héberger vos dépots, on le récupère avec un clone :

git clone user@ssh.clusterXXX.ovh.net:git/MonProjet.git
Cloning into MonProjet...
user@ssh.clusterXXX.ovh.net s password: 
warning: You appear to have cloned an empty repository.
cd MonProjet
ls -1A
.git

Le top, ce serait de créer des alias SSH pour faire un truc du genre mais je ne sais pas du tout si c'est possible...

git clone user@git.eexit.net:MonProjet.git

Terminé !

Vous pouvez maintenant arrêter de banquer pour vos dépôts privés et faire quelques économies pour vos projets personnels.