Pansebete

Une note autocollante repositionable sur une tête de bois

Utiliser GIT en local

25/09/2013 ⋅ 1 commentaire

Par bendia

J'ai longtemps essayer de mettre en place un système de synchronisation entre mon portable et mes différents PC fixe, de façon à travailler sur mes petits projets comme ce site ou d'autres projets, sans en être vraiment satisfait. La semaine dernière, une idée m'est venue (oui, ça m'arrive ! ); pourquoi pas GIT.

GIT, c'est quoi


GIT est système de gestion de version (VCS en Anglais pour Version Control System). De tels outils permettent de garder une trace des différentes modifications apportées aux fichiers d'un projet, et de revenir à un état antérieur si besoin. Certains systèmes sont locaux. Les modification sont uniquement enregistré sur le poste de l'utilisateur. Cependant, ils sont très souvent centralisés sur un serveur, dans un dépôt, ce qui permet à différentes personnes de collaborer, chacun apportant ses modifications et les mettant à la disposition de tous.

Pour la petite histoire, GIT a été créé par Linus TORVALDS pour aider au développement du noyau Linux. C'est un VCS distribué, c'est à dire que chaque personne qui collabore à un projet dispose sur son poste d'une copie intégrale du projet (modifications comprises) et non simplement la dernière version. Il peut être également utilisé en local.

L'intérêt de GIT à la maison


La gestion de version


L'utilisation d'un tel système peut paraître disproportionné à la maison mais je suis sûr qu'il vous est arrivé de faire votre carte de vœux pour la nouvelle année avec GIMP, de la modifier, de fermer le logiciel, et de vous dire que finalement, la première version était mieux. Mais, pas moyen de revenir en arrière ...
C'est un peu caricatural, mais dès qu'on se lance dans des projets, même domestique, qui commence à prendre un peu de temps ça peut devenir intéressant.

La sauvegarde


A la maison, je dispose d'un NAS. Le répertoire du NAS est partagé par NFS et monté dans le système de fichier local. GIT permet très facilement de mettre un dépôt dans ce répertoire partagé. Les sauvegardes sont faite en deux commandes. Il s'agit de sauvegardes incrémentielles, c'est à dire que seuls les fichiers modifiés sont sauvegardés. C'est donc rapide. Par ailleurs, si le dépôt est copié sur un autre PC, portable par exemple, on dispose de 3 sauvegardes complète du projet sur 3 disques dur différents.

La synchronisation


Ce système permet par la même occasion de travailler sur le même projet avec des machines différentes. Je peux par exemple travailler sur un projet sur le portable en dehors de chez moi, puis le synchroniser en rentrant et continuer sur le même projet su le PC fixe.

Comment s'y prendre


Installer git


Comme d'habitude sous Debian, très facilement

apt-get install git

Créer le projet GIT


Il suffit de se rendre dans le dossier contenant le projet puis

git init

Cela créé un dossier .git qui contient les données de versions

Ajouter les fichiers


On peut choisir les fichiers et dossiers qui font parti du projet. On peut ainsi ne pas metre, par exemple, les sauvegardes automatiques ou tout autre fichiers qu'on ne veut pas sauvegarder. Pour cela

git add <mon_fichier>

On doit lancer cette commande pour chaque nouveau fichier à suivre.

Point de sauvegarde : le commit


Pour dire à git de prendre une photo de l'état du projet, on fait un commit.

git commit

Un éditeur de texte (nano par défaut) s'ouvre alors, vous demandant de commenter votre modification. Une fois le fichier enregistré (ctrl+o sous nano), la modification est enregistrée.

Si vous n'avez fait que modifier des fichiers déjà suivis

git commit -a

Pour intégrer directement le message sans passer par un éditeur de texte

git commit -m "Message du commit"

Revenir en arrière


Si on veut restaurer le projet à un état antérieur, il suffit d'afficher les différents commit avec

git log

La liste contient la date et l'heure, l'auteur et le commentaire saisi, ainsi qu'un numéro. Il suffit de faire

git revert <numero>

Sauvegarder


A ce stade, GIT est utilisé uniquement en tant que gestion de version. Mais si le disque dur local est défaillant, le projet est perdu !
On va donc créer un dépôt qui va servir de sauvegarde et sur lequel, le cas échéant, les autres machines pourront se synchroniser. Chez moi, c'est sur une partition d'un NAS monté par NFS, mais ça peut tout a fait se faire sur un autre disque dur physique de la même machine.
Pour cela, nous allons créer un clone nu de notre projet.

git clone --bare <dossier-de-votre-projet> <nom-du-clone.git>

Cela créé un dossier votre-projet.git avec toute l'arborescence de GIT ... mais sans les fichiers et dossiers réels. C'est un peu déroutant, mais le contenu et le nom des différents fichiers du projets son stockés dans le dossier .git. En un mot, ce n'est pas parce que vos fichiers de travail n'apparaissent pas dans votre dossier .git que l'opération a échouée.

Vous pouvez ensuite déplacer le dossier votre-projet.git à l'emplacement souhaité.

Il faut ensuite signifier à GIT où se trouve le dépôt. Pour cela, dans le dossier de votre projet initial

git remote add origin <url-du-depot>

url-du-depot est le chemin du dossier votre-projet.git dans le cadre d'une utilisation locale.

Pour indiquer que la branche master est la branche principale

git branch --set-upstream master origin/master

Pour sauvegarder votre travail, il suffira de faire

git push

master est le nom de la branche du projet. Le concept de branches semble offrir plein de possibilités afin de créer plusieurs version d'un même projet qui peuvent être fusionnées.

Synchroniser


Depuis une autre machine, à l'occasion d'une première utilisation, il faut cloner le dépôt

git clone <url-du-depot>

Ensuite, depuis n'importe quelle machine, pour récupérer la version la pus récente du projet

git pull

Pour aller plus loin


La méthode présentée ici est simplement celle utilisée par des petites équipes de développement indiquée dans la traduction en français de la documentation de GIT. Il existe d'autres protocoles de communication comme ssh par exemple, qui permettent de travailler non plus en réseau local, mais à travers internet.

1 commentaire