TP 5 - Git avancé

TP 5 - Git avancé

Exercice 1 : plusieurs remotes (upstream + origin)

Dans cet exercice, vous êtes un contributeur qui doit cloner un dépôt public, créer une branche de travail, et pousser cette branche sur votre propre dépôt distant.

Exécutez les commandes suivantes dans l’ordre, en adaptant NOMDEFAMILLE à votre nom de famille :

  1. Clonez le dépôt public : git clone --origin upstream https://gitlab.telecom-paris.fr/3tc37/tp-git
  2. cd tp-git
  3. Vérifiez l’état du dépôt : ls, git status, git log
  4. Ajoutez votre dépôt distant (sur lequel vous allez pousser vos changements) :
    • version avec SSH : git remote add origin git@gitlab.enst.fr:3tc37/3tc37-2026
    • version avec HTTPS : git remote add origin https://gitlab.telecom-paris.fr/3tc37/3tc37-2026 (si vous n’avez pas de clé SSH configurée sur GitLab)
  5. Vérifiez les remotes : git remote -v
  6. Créez et basculez sur une nouvelle branche (en prenant soin de remplacer NOMDEFAMILLE par votre nom de famille) : git switch -c tp-git-NOMDEFAMILLE
  7. Poussez votre branche sur le remote auquel vous avez accès en écriture : git push -u origin + le nom de votre branche
  8. Vérifiez à quelles branches distantes sont associées chaque branche locale : git branch -vv

Exercice 2 : historique propre (rebase -i)

Dans cet exercice, vous êtes un contributeur qui doit repasser sur une branche pour nettoyer l’historique avant de la fusionner.

Exécutez les commandes suivantes dans l’ordre :

  1. Basculez sur la branche feature : git switch feature
  2. Comparez l’historique de feature avec main : git log main, git log feature
  3. Mettez à jour votre branche feature avec les derniers changements de main : git rebase main
  4. Comparez à nouveau les historiques.
  5. Identifiez les commits à nettoyer (commits à supprimer, à fusionner, ou à réécrire pour clarifier les messages).
  6. Réécrivez l’historique via git rebase -i main.
    • Marquez les commits à supprimer avec drop (ou en commentant la ligne)
    • Marquez les commits à fusionner avec squash (s) ou fixup (f)
    • Marquez les commits à réécrire avec reword (r)
    • Enregistrez et quittez l’éditeur pour appliquer les changements.
  7. Étudiez à nouveau l’historique pour vérifier le résultat.
  8. Basculez sur la branche tp-git-NOMDEFAMILLE : git switch + le nom de votre branche
  9. Fusionnez feature dans tp-git-NOMDEFAMILLE : git merge feature. Quel type de merge est utilisé ? Pourquoi ?
  10. Poussez tp-git-NOMDEFAMILLE sur le remote origin : git push

Exercice 3 : résolution de conflit

Dans cet exercice, vous devez résoudre un conflit de fusion entre une branche bugfix qui corrige un bug, mais qui a été créée à partir d’une ancienne version de main, et la version actuelle de main qui a évolué depuis.

Exécutez les commandes suivantes dans l’ordre :

  1. Basculez sur la branche bugfix : git switch bugfix
  2. Comparez l’historique de bugfix avec main : git log main, git log bugfix
  3. Analysez le changement introduit par bugfix (git show bugfix) et les changements récents dans main (git log -p main) pour comprendre les sources potentielles de conflit.
  4. Mettez à jour votre branche bugfix avec les derniers changements de main : git rebase main
  5. Des conflits de fusion apparaissent. Identifiez les fichiers en conflit : git status
  6. Ouvrez les fichiers en conflit et résolvez les conflits manuellement.
  7. Vérifiez que les conflits sont résolus : git status
  8. Vérifiez que vous avez correctement résolu les conflits en lançant les tests : make test
  9. Terminez le rebase : git add ., git rebase --continue
  10. Comparez à nouveau les historiques pour vérifier que le rebase a réussi.
  11. Fusionnez bugfix dans tp-git-NOMDEFAMILLE : git switch + le nom de votre branche, git merge bugfix et poussez : git push

Exercice 4 : récupération (stash/pop + reset --hard)

Dans cet exercice, vous avez commencé à travailler sur une nouvelle modification dans une branche basée sur main, mais vous réalisez que vous devez d’abord mettre à jour votre branche avec un refactoring important qui sera fusionné dans main avant que vous ne puissiez terminer votre travail. Vous devez donc temporairement mettre de côté vos changements en cours, mettre à jour votre branche, puis reprendre votre travail.

Exécutez les commandes suivantes dans l’ordre :

  1. Basculez sur une nouvelle branche de travail basée sur main : git switch main -c wip
  2. Ajoutez un test vérifiant que 15/3=5, sans le commiter. Vérifiez que vous avez des changements non committés : git status
  3. C’est le moment où vous réalisez que vous devez d’abord mettre à jour votre branche avec les changements de refactor qui seront bientôt fusionnés dans main. Mettez de côté vos changements en cours : git stash
  4. Tirez les changements de refactor : git pull upstream refactor
  5. Vérifiez que les changements de refactor sont bien présents : git log
  6. Reprenez vos changements en cours : git stash pop
  7. Vérifiez que vos changements sont bien appliqués : git status, git diff

Heureusement il n’y a pas de conflit entre vos changements et ceux de refactor. S’il y avait eu des conflits, vous auriez dû les résoudre manuellement, comme dans l’exercice précédent.

Trending Tags