Hier, nous avons expliqué à Franck comment se servir de Git. C’était sa première approche avec un système de gestion de version, et il me paraît intéressant de partager ici les notes que j’ai prises pendant cette mini-formation.

Documentation complète : https://git-scm.com/book/fr/v2

Fonctionnement

Git permet de suivre les modifications apportées à un projet (un ensemble de fichiers), et de travailler à plusieurs sur un même projet en gérant les conflits (si deux utilisateurs modifient le même fichier au même moment). On peut ensuite suivre l’historique du projet, savoir qui a écrit telle ligne, quand telle fonctionnalité a été ajoutée, etc… En cas de problème, il est possible de revenir en arrière et d’annuler des modifications, très finement (sur quelques lignes d’un fichier, modifiées plusieurs années en arrière).

Pour cela, un utilisateur clone le projet depuis un serveur. Cela lui fait une copie de travail sur son PC. L’utilisateur modifie la copie de travail en éditant les fichiers, en ajoutant des fichiers et des sous-dossiers, etc…

À chaque fois que l’utilisateur finit de coder une fonctionnalité, d’ajouter un chapitre, ou tout autre partie de travail cohérente, il l’enregistre sous forme d’un ‘paquet’ : un commit. Il indique pour cela les fichiers à ajouter au paquet, puis sauvegarde le paquet avec un commentaire expliquant son travail.

Lorsque l’utilisateur a une connexion à Internet, il pousse (push) les commits préparés sur le serveur, où les autres utilisateurs pourront y avoir accès. Avant de pousser, ou régulièrement, l’utilisateur fait des retraits (pull) des commits des autres utilisateurs pour mettre sa copie de travail à jour. S’il y a conflit, c’est lors du pull qu’il apparaîtra.

En cas de conflit, c’est à l’utilisateur qui va pousser de le corriger. Il doit éditer le fichier et le modifier pour que les différentes modifications fonctionnent ensemble. Il fait ensuite un commit spécialement pour la résolution de conflit (un merge), puis il peut pousser ses propres commits.

Voici un résumé des étapes :

-# clone ou pull (depuis le serveur) -# modification de la copie de travail -# commit(s) (locaux) -# push (vers le serveur)

Configuration

Passer les commandes suivantes après l’installation : git config –global user.name “User Name” git config –global user.email “user@mail.net

Ajoutez dans votre .bashrc : export EDITOR=vim (ou nano, ou emacs, ou ce que vous voulez)

Enregistrer les identifiants de connexion

Note : utilise le keyring, donc fonctionne avec Gnome seulement.

Sur Arch :

Sur Ubuntu : sudo apt-get install libsecret-1-0 libsecret-1-dev cd /usr/share/doc/git/contrib/credential/libsecret sudo make git config –global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Commandes de base :

git init Créer un sous-dossier .git pour commencer à suivre le dossier courant (en local) git clone Télécharger et suivre un projet distant git status Status de la copie de travail git log -p Voir l’historique (p : avec les modifications détaillées) git add Ajouter un fichier au prochain commit git reset – Enlever un fichier du prochain commit (ne supprime pas les modifications) git diff Voir les modifications apportées à la copie de travail git commit Faire le commit. -m “…” permet d’ajouter un message, sinon l’éditeur $EDITOR s’ouvre pour taper le message. git checkout – Annuler les modifs de fichier et revenir au dernier commit git pull Récupérer du dépôt central git push Pousser dans le dépôt central git remote -v Obtenir les infos sur le dépôt distant

Commandes avancées

git checkout <sha1|branche> Passer le dossier local sur un commit précédant ou une autre branche git log –oneline –decorate –graph –all Autre sortie du log, avec les merges et les branches sous forme de graphique git reset –hard HEAD~3 Annuler les 3 derniers commits (seulement si pas encore poussés, si quelqu’un d’autre les a déjà pris, ça va être la misère).

La bonne méthode pour revenir en arrière n’est pas de supprimer des commits, c’est de faire un checkout du commit auquel on veut revenir et de faire un nouveau commit.