Git != Github

Posté le 16 février 2015 - Astuces pour développeurs - Par leknoppix - Proposer une correction

Lorsque l'on parle de git, on l'associe trop à Github, au point parfois de mélanger les deux. Github n'est là que pour servir de dépôt distant pour votre versionning mais il est tout à fait possible d'utiliser git sans ce genre de service.

L'avantage de git par rapport à d'autres systèmes de versionning c'est qu'il n'a pas besoin de beaucoup de prérequis pour son dépôt distant. En effet n'importe quel espace de stockage peut servir de dépôt distant. Par exemple, il est tout à fait possible d'utiliser une clef USB ou un disque dur externe comme remote.

git remote add origin E:/versioning/monSuperProjet

Le problème ici c'est que si vous souhaitez travailler à plusieurs ce n'est pas idéal (on se voit mal passer la clef usb à chaque push / pull). Même si on dispose d'un disque dur sur le réseau ce n'est pas pratique si on souhaite travailler depuis l'extérieur. Une solution est alors d'utiliser des outils comme Dropbox, Hubic, Google Drive ou autre. Ces outils vous premettent de synchroniser toutes sortes de fichiers (photos, vidéos, musiques, documents ....) , ce qui permet d'y avoir accès de n'importe où, tout en gardant de multiples sauvegardes physiques en cas de problèmes.

Ne travaillez pas directement dessus !

Une erreur que l'on est tenté de faire, c'est de se dire

Cool, maintenant, je travaille sur mon dossier dropbox et tout est stocké en ligne !

Oui, mais NON. Certe, il va y avoir une synchronisation automatique mais cela va créer des conflits et des impossibilités de travailler pendant la synchronisation. En plus à chaque modification de fichier l'outil va lancer une synchronisation, ce qui peut être assez lourd pour le réseau. Alors, comment résoudre cette situation ?

L'astuce consiste à se servir de ce dossier "distribué" comme un dépôt distant. Ce dépôt ne contiendra pas le répertoire de travail mais seulement les informations concernant le versioning. On utilise pour cela l'argument --bare.

cd Dropbox #Positionnez vous dans votre dossier Dropbox, Hubic, Drive ou autre
mkdir NOM_DU_PROJET #Création d'un dossier pour stocker le repertory
cd NOM_DU_PROJET
git init --bare

Ensuite, tout se fait dans votre dossier de travail habituel. Il va falloir rajouter, cette nouvelle destination à notre projet en cours. Positionnez vous en ligne de commande dans votre dossier de travail:

cd /var/www/NOM_DU_PROJET
git remote add origin ~/Dropbox/NOM_DU_PROJET

Cette seconde instruction permet d'ajouter la destination appelé dans mon cas origin.
Ensuite, il suffit, quand on le souhaite, d'envoyer notre dépôt local vers cette destination

git push origin master

Et voila, le tour est joué.

Récupérer le projet depuis un autre poste

Pour récupérer le projet sur une autre machine, il suffit de lancer un clone depuis le dossier dropbox

cd LA_OU_VOUS_VOULEZ_TRAVAILLER
git clone ~/Dropbox/NOM_DU_PROJET #récupère le projet stocker

Et c'est tout, vous pouvez travailler et faire des pull / push.

Tout n'est pas rose !

Attention cependant, comme stipulé au démarrage, ces solutions de synchronisation ne sont pas forcément à l'aise avec les conflits. Si vous travaillez à plusieurs sur un dossier partagé et que vous poussez vos modifications en même temps il y a de fortes chances de corrompre le dossier partagé. Heureusement, git étant distribué chaque utilisateur à l'ensemble de l'historique et on pourra reconstruire le dépôt distant au besoin. Mais sachez que cela peut arriver.

Cette solution n'est pas idéale mais permet de se créer un certains nombre de dépôts privées sans avoir à payer un service tiers ou sans avoir à configurer (et sécuriser) un serveur. Je pense que c'est une bonne solution pour ceux qui veulent commencer et se lancer dans le versionning sans forcément avoir de compétences en administrations serveur.