03 juin 2009

Dépôt Git privé et personnel sur serveur mutualisé OVH

L'architecture et la philosophie de Git n'imposent pas l'usage d'un serveur central. Malgré cela, pour un développeur, il est pratique et confortable d'avoir un dépôt de référence donc d'avoir un dépôt central.
Si l'on travaille sur un projet public seul ou à plusieurs, des plateformes comme github ou gitorious sont parfaitement adaptées. Si par contre, on souhaite utiliser git pour un usage personnel et strictement privé, ces plateformes le sont beaucoup moins (options payantes pour github notamment). D'autant plus que si on loue déjà un serveur autant essayer de le réutiliser.

L'offre de serveur mutualisé chez OVH propose à partir de la gamme 90 Plan un accès ssh. On a donc un accès en ligne de commande dans son espace et on peut utiliser les outils installés sur le système.

Depuis quelques temps (ça n'a pas toujours été le cas), on peut utiliser la commande git. Il devient donc possible de transformer son compte en serveur de dépôt git privé. Démonstration :

Création d'un projet GIT

% mkdir ~/mon_projet
% cd ~/mon_projet 
% touch .gitignore
% git init
% git add .
% git commit -an

Création du dépôt de référence

% cd ~/mon_projet 
% git clone --bare . ~/mon_projet.git
% cd ~/mon_projet.git
% git --bare update-server-info
% cd hooks/
% mv post-update.sample post-update
% chmod a+x post-update

Un dépôt de référence et plus précisément un dépôt nu a par convention l'extension git. Dans notre exemple : mon_projet.git

Copie sur le serveur

% scp -r ~/mon_projet.git moi@ovh:~/
% rm -Rf ~/mon_projet*

Utilisation du dépôt de référence

% git clone ssh://moi@ovh/~/mon_projet.git
% touch readme
% git add readme
% git commit -an
% git push

5 commentaires:

  1. je me permet de laisser un petit mot de remerciement pour ce post qui me confirme que mon 90Plan me permettra d'avoir un repo git "central" ;)

    Si jamais vous avez poussé le vis plus loin jusqu'à trouver une solution de se faire un clone de github complet sur un 90Plan (histoire d'avoir un projet privé avec quelques collègues...), je suis preneur ;)

    RépondreSupprimer
  2. Merci pour le tip; à noter que pour mon cas sur un hébergement mutualisé "pro", Git est dans une ancienne assez ancienne : 1.4.4.4.

    J'ai un petit soucis pour ma part. J'ai procédé différemment :
    J'avais déjà un dossier sur le serveur OVH j'ai initialisé un dépot Git dans ce dossier.
    moi@ssh1:~/www/mon-dossier git init-db

    puis j'ai inséré les fichiers initiaux
    moi@ssh1:~/www/mon-dossier git add.
    moi@ssh1:~/www/mon-dossier git commit -m "initial commit"

    j'ai ensuite cloné sur mon PC local le dépot
    MonLocal@monPC:/mon/dossier/de/travail git clone ssh://moi@OVH/~/www/mon-dossier

    Fait mes modifs que j'ai commité en local puis poussé ainsi ;
    MonLocal@monPC:/mon/dossier/de/travail git push origin
    Je rentre mon mdp ssh et l'opération semble se dérouler bien; mais mais...

    lorsque je regarde mon fichier modifié qui a été poussé, il est inchangé...
    moi@ssh1:~/www/mon-dossier more monFichierModifiéPuisPousse.txt
    il est dans son état d'origine !!
    Je regarde alors l'état du dépot
    moi@ssh1:~/www/mon-dossier git status
    j'ai mon fichier "updated" mais "not checked in" !! et lorque je regarde l'historique,
    moi@ssh1:~/www/mon-dossier git log
    Je vois que mon commit est bien entré dans la branch master avec mon pseudo local...

    J'en conclue que mon fichier a été écrasé instantanément après sa mise à jour... peut etre une question de droits ...

    RépondreSupprimer
  3. En fait il s'agit d'une méconnaissance de GIT de ma part... J'avais omis la fameuse option --bare pour la creation du dépot qui ne génère pas de répertoire d'usage des fichiers (puisque je souhaitais justement avoir mes fichiers lisibles par le serveur web, le dépot étant dans mon www/).

    J'ai résolu mon problème en créant un simple ("--bare") dépot dans un répertoire du serveur hors www/ puis un clone dans le www/ . Pour le travail sur mon poste local, j'ai un autre clone du dépot "bare" réalisé via le ssh comme indiqué dans le post.

    RépondreSupprimer
  4. Oui mais quel intérêt de ne pas synchroniser les deux environnement dev et prod ?

    en faisant un git reset -hard etrangement mes fichiers sont mis à jour sur la prod..

    Quelque chose m' échappe la..

    RépondreSupprimer
  5. Perso j'ai fini par installer mon repository GIT directement sur mon mutualisé OVH :
    http://xenetis.org/a_34_creer_un_depot_git_prive_sur_un_hebergement_mutualise_ovh.html

    RépondreSupprimer