TP : Les branches

Mise en place et instructions

Pour ce TP, vous aurez besoin de Git et Git Bash.

À la fin de la séance du 10/10/2018, merci de déposer un fichier .zip/.rar (ou équivalent) à cette adresse, au format NOM_prenom_TP02.zip, contenant : - L'intégralité de votre dossier de travail (le dossier masqué .git doit être présent) - Un fichier (txt, pdf, docx, ...) contenant les commandes jouées lors de ce TP

Vous êtes libre d'ajouter à votre rapport les difficultés rencontrées.

Enrichir le projet de nouvelles fonctionnalités

Créer des "feature-branches"

On souhaite effectuer deux évolutions sur notre projet. On va pour cela créer deux branches :

  • ajout-styles

  • modification-textes

Créez la première branche, et sur celle-ci, ajoutez le fichier styles.css, contenant le code suivant :

styles.css
p .blue {
color: "blue"
}

Ajoutez ensuite la classe blue au paragraphe dans le fichier index.html.

index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>This is a Heading</h1>
<p class="blue">This is a paragraph</p>
</body>
</html>

Commitez ces changements en indiquant un message approprié.

En parallèle, on souhaite changer le texte de notre fichier. Placez-vous alors sur la branche master.

Si vous consultez l'historique des commits depuis la branche master, vous ne devez pas voir le dernier commit concernant l'ajout des styles, puisque celui-ci appartient à une branche différente.

Créez la seconde branche, et sur celle-ci, remplacer le texte du paragraphe par le message suivante : "Git c'est merveilleux". Le fichier index.html doit alors ressembler à :

index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>This is a Heading</h1>
<p>Git c'est merveilleux</p>
</body>
</html>

Commitez ce changement, puis modifiez le titre de la page : "TP Git". Cette fois, le fichier se présente comme suit :

index.html
<!DOCTYPE html>
<html>
<head>
<title>TP Git</title>
</head>
<body>
<h1>This is a Heading</h1>
<p>Git c'est merveilleux</p>
</body>
</html>

Commitez également ces changements. Sur cette branche, l'historique devrait ressembler à :

commit 43330ba53e6859da860cd9ecb932c5d39bdd84c5 (HEAD -> modification-textes)
Author: Corentin Desfarges <cᴏrentin.desfarges@gmail.com>
Date: Sun Sep 23 23:29:39 2018 +0200
Modification du titre de la page
commit ce5bbaa05924fc7371b93e31740a388fb9ff38ee
Author: Corentin Desfarges <cᴏrentin.desfarges@gmail.com>
Date: Sun Sep 23 23:29:17 2018 +0200
Modification du paragraphe
commit 8ce658a80f605415a3104614874d8497132a6ec5 (master)
Author: Corentin Desfarges <cᴏrentin.desfarges@gmail.com>
Date: Sun Sep 23 11:39:51 2018 +0200
Ajout du fichier index.html

Rapatrier le travail sur la branche master

Une fois le travail sur chaque branche terminée, on souhaite naturellement le voir rapatrié sur la branche principale, à savoir la branche master.

Placez-vous sur la branche master. L'historique des commits ne présente qu'un seul résultat à ce moment de l'exercice. Nous allons tout d'abord rapatrier les changements de la branche modifications-textes.

Utiliser la commande appropriée pour fusionner cette branche dans la branche master. Le résultat de cette commande est le suivant :

Updating 8ce658a..43330ba
Fast-forward
index.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Si je consulte l'historique de la branche master, je constate désormais que des commits ont bien été ajoutés à la branche principale. Si j'ouvre le fichier index.html, les textes sont bien à jour.

Tentez ensuite de rapatrier le commit de la branche ajout-styles. Le message apparaît alors :

Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

Observez ce message d'erreur, ainsi que l'état de mon dépôt :

On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: index.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
styles.css
no changes added to commit (use "git add" and/or "git commit -a")

Un conflit s'est produit lors de la fusion des branches. Ouvrez le fichier index.html afin de pouvoir observer les parties du code que Git n'a pas réussi à fusionner.

Le conflit se présente comme suit :

index.html
<!DOCTYPE html>
<html>
<head>
<title>TP Git</title>
</head>
<body>
<h1>This is a Heading</h1>
<<<<<<< HEAD
<p>Git c'est merveilleux</p>
=======
<p class="blue">This is a paragraph</p>
>>>>>>> ajout-styles
</body>
</html>

HEAD correspond à l'état du dépôt lors du dernier commit valide de la branche. On retrouve donc le texte original, puisque la branche modifications-texte a déjà été mergée dans master.

La partie sous les symboles ======= correspond à l'état de la branche que l'on tente de fusionner.

Résolvez le conflit de manière intelligente : on souhaite conserver le nouveau texte, mais également la classe ajoutée. En utilisant la commande git log --graph, vous devriez observer un résultat très similaire à celui-ci :

* commit f8f53f4d023fed26acf6dae999beea433448f4da (HEAD -> master)
|\ Merge: 43330ba db77cf5
| | Author: Corentin Desfarges <cᴏrentin.desfarges@gmail.com>
| | Date: Sun Sep 23 23:47:46 2018 +0200
| |
| | Commit de fusion de la branche ajout-styles dans master
| |
| * commit db77cf58b91adcaf6e175615b3b8afb4506cda9e (ajout-styles)
| | Author: Corentin Desfarges <cᴏrentin.desfarges@gmail.com>
| | Date: Sun Sep 23 23:27:39 2018 +0200
| |
| | Ajout des styles
| |
* | commit 43330ba53e6859da860cd9ecb932c5d39bdd84c5 (modification-textes)
| | Author: Corentin Desfarges <cᴏrentin.desfarges@gmail.com>
| | Date: Sun Sep 23 23:29:39 2018 +0200
| |
| | Modification du titre de la page
| |
* | commit ce5bbaa05924fc7371b93e31740a388fb9ff38ee
|/ Author: Corentin Desfarges <cᴏrentin.desfarges@gmail.com>
| Date: Sun Sep 23 23:29:17 2018 +0200
|
| Modification du paragraphe
|
* commit 8ce658a80f605415a3104614874d8497132a6ec5
Author: Corentin Desfarges <cᴏrentin.desfarges@gmail.com>
Date: Sun Sep 23 11:39:51 2018 +0200
Ajout du fichier index.html

Vous savez désormais travailler avec les branches, et êtes en mesure de rapatrier les changements sur la branche principale !

Nettoyer votre dépôt

Les branches de travail ayant été mergées sur master, elles ne devraient plus vous êtes utiles. Supprimez-les. La commande git branch ne devrait alors plus vous affichez que la branche master.