Skip to content

Exercices

Les exercices sont à faire dans l'ordre et uniquement via le terminal.

Les commandes Git à utiliser sont rappelées:

  • la première fois où elles apparaissent
  • lors de l'ajout d'une option

Note

Le texte des modifications à faire dans le fichier README.md est donné à titre d'exemple, l'essentiel est que chaque modification soit unique. Vous pouvez par exemple vous simplifier la vie en ajoutant la date et heure à la fin du fichier, au lieu de l'éditer:

date >> README.md

Avant de commencer, si ce n'est déjà fait, modifier votre configuration Git en renseignant votre nom, email et éditeur préféré.

# Votre prénom et nom
git config --global user.name   "votre nom"
# Votre email
git config --global user.email  "vous@telecom-paris.fr"
# Par exemple nano comme éditeur pour rédiger les messages de commit
git config --global core.editor nano

Votre premier dépôt Git

  1. Ouvrez un terminal et allez dans projets/1A/ue_outils
  2. Créez un répertoire tpgit et accédez-y
  3. Initier le dépôt Git via git init
  4. Faites git status et observez qu'il n'y a aucune modification en cours
  5. Créez un fichier .gitignore contenant la ligne *.txt
  6. Faites git status et observez que ce fichier est non suivi
  7. Ajoutez le fichier .gitignore via git add
  8. Faites git status et observez que ce fichier est prêt à être validé
  9. Validez vos changements git commit -m "oui"
  10. Faites git status et observez
  11. Changer le message avec git commit --amend
  12. Créez un fichier README.txt contenant le texte # Mon Premier Git
  13. Faites git status et observez qu'il n'y a aucune modification en cours
  14. Renommez ce fichier en README.md et observez git status
  15. Ajoutez le fichier README.md et validez les changements (nouveau commit)
  16. Regardez les logs avec git log
    • Comparer avec git log --oneline

Votre première branche, fusion et conflit

Placez-vous dans le dépôt tpgit.

  1. Créez une branche de test montest et basculez dessus avec git switch -c montest
  2. Ajoutez la ligne Première branche au fichier README.md
  3. Regardez les différences avec git diff
  4. Ajoutez et valider ce changement avec le message "Branche 1"
  5. Basculez sur la branche main avec git switch main
  6. Ajoutez la ligne Première étape au fichier README.md
  7. Ajoutez et valider ce changement avec le message "Changement 1"
  8. Fusionnez la branche montest dans main avec git merge montest
    • observez l'état avec git status, les différences avec git diff
  9. Annulez ce merge avec git merge --abort
    • observez l'état avec git status
  10. Fusionnez à nouveau la branche montest dans main
    • éditez les conflits via nano par exemple
    • essayez de terminer le merge avec git commit et observez
    • ajoutez le fichier une fois les conflits résolus
    • terminez le merge
  11. Détruisez la branche inutile avec git branch -D
  12. Regardez les logs et le graph avec git log --graph

Un peu d'histoire

Placez-vous dans le dépôt tpgit.

  1. Regardez les différences pour le fichier README.md entre la version courante et précédente avec git diff HEAD~1 README.md
  2. Avec la version n-2 ? n-3 ? n-4 ?
  3. Entre la version n-1 et n-2 via git diff COMMIT_ID1..COMMIT_ID2 ? n-1 et n-3 ?
  4. Revenez à la version du premier commit git checkout COMMIT_ID
    • lisez attentivement les messages de git
  5. Regardez les fichiers présents via ls, que remarquez-vous ?
  6. Revenir à la dernière version sur la branche principale git switch main
  7. Regardez les différentes sources de modification du fichier README.md avec git blame README.md

Un brouillon

Placez-vous dans le dépôt tpgit.

  1. Ajoutez la ligne En cours au fichier README.md
  2. Placez vos changements dans le brouillon avec git stash
  3. Créez une nouvelle branche test2

Note

Scénario typique: vous commencez des modifications et réalisez qu'une nouvelle branche serait utile. Pour partir sur une branche propre, vous feriez git stash puis git pull avant de créer votre branche

  1. Récupérez votre brouillon avec git stash pop et regardez l'état
  2. Ajoutez et validez le changement
  3. Vérifiez l'état de vos brouillons avec git stash list (à priori vide)
  4. Ajoutez la ligne Test au fichier README.md et regardez l'état
  5. Placez vos changements dans le brouillon en ajoutant un message avec l'option --message
  6. Vérifiez l'état de vos brouillons
  7. Affichez le premier brouillon avec git stash show 0, utilisez -p pour voir les différences par fichier
  8. Supprimez le brouillon avec git stash drop

Un dépôt distant

  1. Ouvrez un terminal et allez dans projets/1A/ue_outils.
  2. Faites un clone de votre dépôt tpgit via git clone tpgit tpclone ce qui indiquera de cloner le dépôt dans le répertoire tpclone
  3. Entrez dans tpclone, vérifiez état et logs

    Placez-vous dans le répertoire tpgit
  4. Fusionnez la branche test2 dans main
  5. Tapez la commande git config --bool core.bare true
    (option assez obscure de Git dont vous n'aurez pas besoin en passant via Gitlab/Github)

    Placez-vous dans le répertoire tpclone
  6. Ajouter la ligne Test2 au README.md, ajoutez le fichier et valider
  7. Poussez vos modifications via git push
    • vérifiez que cela est impossible
  8. Récupérez les modifications distantes via git pull
    • Git vous demandera normalement de spécifier comment appliquer les changements, choisissez fusion (merge) et refaite git pull
  9. Vérifiez l'état
  10. Réglez le conflit et validez la fusion
  11. Poussez vos modifications via git push

    Placez-vous dans le répertoire tpgit
  12. Regardez l'état et les logs

    Placez-vous dans le répertoire tpclone
  13. Supprimer la branche test2 - vous devrez faire git push origin -d test2
  14. Regardez la liste des branches sur tpclone et sur tpgit

Une étiquette pour votre première version

Placez-vous dans le dépôt tpclone

  1. Configurez Git pour suivre les étiquettes lors des push
    • git config push.followTags true
  2. Ajoutez une étiquette "1.0" avec comme nom "Première version"
    • git tag -a "1.0" -m "Première version"
  3. Regardez les tags avec git tag et git tag -n
  4. Pousser vos modifications
  5. Regardez les tags dans le dépôt tpgit

Quelques incertitudes

Placez-vous dans le dépôt tpclone

  1. Modifiez le fichier README.mdcomme bon vous semble, ajoutez et validez
  2. Vous avez changé d'avis, revenez d'un commit en arrière via git reset HEAD~1
  3. Regardez l'état
  4. Revenez à la dernière version du fichier README.md via git restore README.md
  5. Revenez d'un commit en arrière via git reset HEAD~1
  6. Revenez à la dernière version du fichier README.md
  7. Poussez vos modifications - que se passe-t-il ?
  8. Revenez à la dernière version sur la branche
  9. Modifiez le fichier README.md comme bon vous semble, ajoutez et validez
  10. Poussez vos modifications et regardez les logs sur le dépôt tpgit
  11. Annulez l'avant-dernier commit poussé avec git revert
    • vous avez des conflits, ne les corrigez pas
    • annulez l'opération de revert avec git revert --abort
  12. Annulez le dernier commit poussé
  13. Poussez vos modifications et regardez les logs sur les dépôts tpclone et tpgit
  14. Modifiez le fichier README.md comme bon vous semble, ajoutez et validez (faite cela deux ou trois fois)
    • ne pousser pas vos modifications
  15. regardez les logs et identifiez le dernier commit poussé sur le dépôt d'origine
  16. Vous décidez que vos modifications n'en valaient pas la peine. Revenez à l'état courant du dépôt origin via git reset --hard COMMIT_ID
    • dans ce cas précis, on pourrait utiliser git reset --hard origin/main puisque COMMIT_ID correspond à la dernière modification sur origin/main
    • Vérifiez via les logs

Ajout d'une branche

Placez-vous dans le dépôt tpclone.

  1. Créez une nouvelle branche mabranche, modifiez le fichier README.md, ajoutez et validez
  2. Poussez vos changements
    • lisez attentivement les messages
    • poussez votre branche en indiquant le dépôt cible
    • vérifiez les branches sur le dépôt tpgit

Ajout d'un dépôt

  1. Ouvrez un terminal et allez dans projets/1A/ue_outils.
  2. Faites un clone de votre dépôt tpgit sous le nom de tpfork
  3. Allez dans le répertoire tpclone
  4. Ajoutez le dépôt de fork via git remote add fork ../tpfork
  5. Vérifiez que vous avez maintenant deux dépôts distants via git remote
  6. Créez une nouvelle branche monpatch et poussez-la sur votre fork
  7. Vérifiez que cette branche est bien dans le dépôt tpfork mais pas dans le dépôt tpgit

A ce stade, si votre dépôt tpfork n'était pas en local, comme ici, mais sur un serveur Gitlab/Github, en vous connectant sur le serveur du fork vous verriez un bouton vous proposant de créer une Merge Request ou Pull Request.

Pour aller plus loin

Vous êtes arrivés au bout de ces manipulations Git, félicitations ! Vous avez maintenant assez de connaissances Git pour aborder sereinement la majeure partie de vos futurs TPs, TDs, projets et usage de Git dans la vie professionnelle.

Info

Pour les plus à l'aise et avancés, il est recommandé de regarder le fonctionnement de git rebase, car c'est une option très utile pour:

  • garder un historique de commit le plus linéaire possible,
  • éviter de nombreux commits uniquement dédiés à la fusion de code et qui ajoutent du "bruit" dans l'historique
  • mettre à jour des Merge/Pull Request lorsque des nouvelles modifications sont ajoutées au code avant l'intégration de la demande.

Il existe de nombreux sites pour vous entraîner encore plus sur Git: