TP1 : Découvrir Git
Disclaimer
Le tutoriel est en français, mais de nombreux mots-clés sont en anglais. Il est essentiel de vous familiariser avec le langage informatique ainsi qu’avec les documentations techniques, qui sont majoritairement rédigées en anglais.
Objectifs¶
Le but de ce TP est de comprendre les concepts et les commandes suivantes :
Introduction à la gestion des versions¶
Un exemple de travail en solo
Vous cassez votre programme, qui était fonctionnel, la veille du rendu. Vous ne pouvez plus revenir en arrière et vous ne vous souvenez plus des modifications que vous avez effectuées depuis la dernière fois que le programme fonctionnait.
Si seulement il existait un logiciel capable de conserver les différentes versions que vous avez sauvegardées...
Initiation à Git¶
Créez un nouveau répertoire nommé
qualite-dev-s2-<prenom>-<nom>en remplaçant<prenom>et<nom>par votre prénom et votre nom (par exemplequalite-dev-s2-hoang-la).
Rendez-vous dans ce nouveau répertoire et créez un fichier
my-first-file.txten exécutant la commande suivante.
touch my-first-file.txtModifiez
my-first-file.txtgrâce à l’éditeur de votre choix en ajoutant la ligne :Hello World!
Nous voulons maintenant sauvegarder cette première version de notre projet.
Exécutez la commande suivante.
git initgit init
git initLa commande git init indique à Git de commencer à gérer les différentes versions du contenu du répertoire courant (ainsi que de ses éventuels sous-répertoires).
Vous pouvez ouvrir un gestionnaire de fichier et appuyer sur Ctrl + H (comme ‘Hidden’) pour voir les répertoires et fichiers cachés. Vous devez constater qu’un répertoire .git/ a été créé : ce répertoire contient les informations nécessaires à la gestion des versions de votre projet.
Vous ne devez jamais y toucher, au risque de perdre l’historique de votre projet ! Ce répertoire doit toujours rester à la racine du projet (dans qualite-dev-s2-<prenom>-<nom> et non dans un sous-répertoire TP1/ par exemple).
Exécutez les commandes suivantes en remplaçant les informations par les vôtres.
git config --global user.name "<Prénom> <Nom>"
git config --global user.email "<Email universitaire>"Par exemple :
git config --global user.name "Hoang La"Puis :
git config --global user.email "hoang.la@universite-paris-saclay.fr"git config
git configLa commande git config permet de configurer des paramètres de Git.
L’option --global est utilisée pour modifier les paramètres globaux de Git (ils seront également valables lorsque vous gérerez d’autres projets avec Git).
Les options user.name et user.email permettent de configurer votre nom et votre adresse email, afin de vous identifier lorsque vous travaillerez à plusieurs sur des projets collaboratifs.
Trois états du même répertoire¶
Working Tree, Staging Area et Local Repository
Pour bien utiliser un gestionnaire de versions, nous devons adopter un workflow particulier. Comme en cuisine, nous avons besoin de trois zones de travail distinctes :
Notre plan de travail, un espace brouillon où nous pouvons modifier librement ce que nous voulons : Working Tree.
Notre table de dressage, où les assiettes sont dressées, vérifiées et où les dernières erreurs peuvent encore être corrigées : Staging Area.
Notre passe-plat, où le plat est validé et prêt à être servi (sauvegardé) : Local Repository (souvent abrégé en Local Repo).
Exécutez la commande suivante. Que constatez-vous ?
git statusgit status
git statusLa commande git status nous indique l’état de notre répertoire.
Dans ce cas-ci, cette commande devrait signaler la présence de fichiers ou de modifications non suivis (untracked) et suggérer de les suivre (add) à l’aide de la commande git add.
Exécutez la commande suivante.
git add my-first-file.txtgit add
git addLa commande git add indique à Git que nous souhaitons suivre la modification effectuée sur le fichier my-first-file.txt.
Il s’agit de l’ajout de la modification à la Staging Area : une modification réalisée dans le Working Tree (plan de travail) est considérée comme un brouillon, tandis qu’une modification suivie (un plat posé sur la table de dressage) est une modification que nous souhaitons potentiellement sauvegarder dans l’historique des versions.
Exécutez la commande suivante. Que constatez-vous ?
git statusModifications à valider/sauvegarder
Tous les changements dans notre répertoire sont maintenant suivis par Git. Il indique que ces changements sont prêts à être validés (to be committed). Autrement dit, le plat présent sur la table de dressage peut être envoyé au passe-plat pour être servi.
Exécutez la commande suivante.
git commit -m "La première version de mon projet"git commit
git commitLa commande git commit indique à Git que nous souhaitons valider (sauvegarder) les modifications présentes dans la Staging Area et les enregistrer dans le Local Repository. Elles constituent désormais une version de notre projet.
L’option -m permet d’associer un message de commit, qui décrit la version sauvegardée.
Exécutez la commande suivante.
git loggit log
git logLa commande git log affiche l’historique des versions de notre projet. Vous devez y voir votre message de commit, ainsi que votre nom et votre adresse e-mail, qui vous identifient en tant qu’auteur.
Les trois états du même répertoire.
Exécutez la commande suivante et observez le résultat.
git statusSuivre et retirer des modifications¶
Vérifiez git status régulièrement !
git status régulièrement !Il faut régulièrement exécuter git status pour connaître l’état de votre Working Tree et de la Staging Area.
Vous pouvez également utiliser git log pour consulter l’état de votre Local Repo.
Cela ne sera plus rappelé par la suite, sauf lors de l’apprentissage de nouvelles commandes.
Modifiez le contenu de
my-first-file.txten remplaçant la ligneHello World!parHi World!.Créez un deuxième fichier
my-second-file.txtet ajoutez-y la ligneHi there!.Suivez toutes les modifications à l’aide de l’une des commandes suivantes.
git add my-first-file.txt my-second-file.txtou
git add .Suivre plusieurs modifications
La commande git add peut être utilisée pour ajouter plusieurs fichiers en une seule commande.
git add . permet de suivre toutes les modifications présentes dans le répertoire courant.
Imaginons que vous vous soyez trompé et que vous ne souhaitiez finalement pas conserver Hi World! dans my-first-file.txt. Même si la modification est suivie (présente dans la Staging Area), il n’est pas trop tard !
Exécutez la commande suivante.
git restore --staged my-first-file.txtgit restore --staged
git restore --stagedSi vous avez ajouté par erreur une modification ou un fichier, vous pouvez retirer (unstage) la modification suivie en utilisant la commande git restore --staged <nom du fichier>.
Il est maintenant temps de sauvegarder cette deuxième version de votre projet.
Exécutez la commande suivante.
git commitJ’ai oublié de mettre un message de commit...
Vous êtes ici parce que vous avez exécuté git commit sans spécifier de message avec l’option -m (git commit -m "<message>"). Git vous oblige donc à écrire un message en ouvrant la fenêtre suivante.

Ici, nous avons oublié d’ajouter un message de commit pour la suppression d’un fichier nommé test.txt.
Écrivez votre message de commit sur la première ligne.
Si vous êtes sur l’éditeur Nano (qui ressemble à l’écran au-dessus) :
Appuyez sur Ctrl + X pour quitter.
Appuyez sur
ypour valider les modifications du message de commit.Appuyez sur
Enterpour quitter la fenêtre.
Si vous êtes sur l’éditeur Vim (éditeur par défaut de Debian à l’IUT) :
Appuyez sur
Escpour sortir du mode insertion.Écrivez
:wqpour enregistrer le message et quitter la fenêtre.Appuyez sur
Enterpour exécuter la commande:wq.
Vous disposez maintenant d’une deuxième version de votre projet dans l’historique des versions.
La version présente dans le Local Repo contient donc les fichiers my-first-file.txt et my-second-file.txt avec, respectivement, les lignes Hello World! et Hi There!, tandis que la version “brouillon” dans votre Working Tree contient la ligne Hi World! dans my-first-file.txt.
Pour finir…¶
Terminons ce TP par une petite réorganisation.
Créez un répertoire
TP1/comme sous-répertoire de la racine de votre projet.
La création d’un répertoire vide n’est pas une modification
Si vous vérifiez git status, vous pouvez constater que Git ne signale aucune modification liée à la création de TP1/. Tant qu’un répertoire est vide, il n’est pas pris en compte par Git.
Déplacez tout (sauf
.git/) dans ce répertoireTP1/.
Vous allez maintenir ce projet pendant le reste du cours en créant des sous-répertoires distincts pour chaque TP.
Revenez à la racine du projet et exécutez
git add .
Changement de chemin vers un fichier
Un changement de chemin vers un fichier, par exemple,
qualite-dev-s2-<prenom>-<nom>/my-first-file.txtqui devient
qualite-dev-s2-<prenom>-<nom>/TP1/my-first-file.txtest interprété par Git comme la suppression de l’ancien fichier
qualite-dev-s2-<prenom>-<nom>/my-first-file.txtet la création du nouveau fichier
qualite-dev-s2-<prenom>-<nom>/TP1/my-first-file.txtValidez les modifications suivies avec
git commit.
Garder un historique compréhensible
Il est recommandé de produire des commits structurés, ce qui implique de :
rédiger des messages de commit clairs et précis ;
utiliser des messages succincts, par exemple :
Premier commit,Ajout <fonctionnalité>,Correction <erreur>, etc. ;ajouter davantage de détails si nécessaire.
Il n’est pas nécessaire d’écrire des récits, mais vos messages de commit doivent être suffisamment explicites pour vous permettre de vous repérer facilement dans l’historique. Vous serez évalué sur votre capacité à maintenir un historique structuré et compréhensible de votre travail.
Si vous apportez des modifications distinctes et non liées, effectuez des
git addetgit commitséparés (par groupes de modifications ayant un thème commun), ou utilisezgit add .etgit commitdès que vous avez terminé de travailler sur une partie du projet, avant de passer à une autre.
Revenez aux objectifs et cochez les points que vous avez maîtrisés. Entraînez-vous sur les commandes et les notions que vous n’avez pas encore bien comprises. Faites appel à votre encadrant si besoin.
Quiz !
N’oubliez pas de compléter le quiz du TP sur Moodle !