Feuille de travaux pratiques - Gestion de version

IUT de Nantes – Département Informatique

LINA - Laboratoire d’Informatique de Nantes Atlantique

Cours de Licence professionnelle 2020-2021

Copyright (C) 2012-2020 Bertrand Florat (contact), licence CC-BY-SA V4

https://cours-git.florat.net/tp.html / Cours

Notes importantes
  • Le travail se fera en binôme. Les présentiels se grouperont en binômes preXY et les alternants en binômes altXY. Chaque binôme est doté d'un dépôt Git dédié. 'A' et 'B' désignent respectivement l'un et l'autre membre du binôme. Si un étudiant est seul, il devra simuler A et B dans deux consoles différentes et avec deux utilisateurs différents, ex : pre12a et pre12b.
  • On utilise souvent Git depuis un IDE. Il vous est ici demandé de n'utiliser que la ligne de commande
  • Inutile d'écrire du vrai code Java pour les exemples
  • Pour répondre aux questions du TP, écrivez dans un fichier ~/tp[no TP].txt (un seul étudiant du binôme)
  • Tous les exercices se feront sous Gnu/Linux avec vi comme éditeur de texte.

    Commandes de base de vim : :i insérer, :o insérer à la ligne, :q! quitter sans enregistrer, :x quitter en enregistrant, shift J (ligne n) : remonte la ligne n+1, y : copier, p : coller, dd : supprimer toute une ligne, u : undo . Voir [6] au besoin.


TP1 Motivations gestion de configuration

Echanges en séance

TP2: Exercice concepts Git

  • Aller sur http://pcottle.github.io/learnGitBranching/?NODEMO
  • Commandes utiles : undo, reset, show commands
  • Créer une branche develop et y faire un commit
  • Fusionner ce commit dans la branche master
  • Poser un tag 1.0.0 sur la branche master
  • Depuis la branche master, créer une branche 1.0, y faire deux commits, tagger ce dernier commit 1.0.1
  • Faire deux commits sur develop
  • Fusionner ces deux commits dans la branche master puis tagger 2.0.0
  • Créer depuis develop une branche bug123, y faire un commit puis fusionner le commit dans la branche develop
  • Supprimer la branche bug123
  • Fusionner develop dans master puis tagger 2.0.1
  • Copier les commandes effectuées dans le simulateur et les coller dans un fichier (selectionner les commandes en laissant CTRL appuyé puis faire CTRL-C) ~/tp2.txt (merci de respecter le nom du fichier)

TP3 Commandes Git de base

Se connecter au serveur (client ssh en javascript)

  • User: votre login (exemple : pre04a, alt10b)
  • Password : fourni par l'enseignant
Exercice 3.1 : Clonage d'un dépot

Chaque binôme dispose d'un dépôt Git (local) et situé à l'URL (remplacer code_binôme par votre code binôme ):

/var/cours/depots_git/[code_binome]/my-app.git
  • Les étudiant(e)s A et B clonent dans leur $HOME le dépôt distant affecté au binôme
  • Afficher les branches avec git branch -a
  • Consultez votre répertoire .git (commande: find .git). Quelles types de données contient-il ?
Exercice 3.2 : Commit d'une modification

Cet exercice se fait simultanément par A et B

  1. Configurer correctement son nom et e-mail Git (voir support de cours)
  2. Forcez vim comme éditeur de Git :
    git config --global core.editor "vim"
  3. Créez quelques alias, au moins ci pour commit et st pour status
  4. Vérifier que vous vous trouvez dans la branche master, s'y positionner si ce n'est pas le cas.
  5. Modifier le source Calcul.java et ajouter un fichier source CalculAlternatif.java dans le même package
  6. Afficher le statut de la copie locale à ce stade
  7. Commiter en un seul commit cette modification et cet ajout de nouveau fichier en utilisant un message de commit dans les règles de l'art.
  8. Afficher le commit dans l'historique et les différences qu'il a introduites (commande git show).
Exercice 3.3.1 : Merge fast-forward

Cet exercice se fait simultanément par A et B

  1. Créer une branche nommée bug42 et s'y positionner
  2. Effectuer des modifications sur Calcul.java et les commiter
  3. Positionnez vous dans la branche master
  4. Fusionner (par merge) les modifications de la branche bug42 dans la branche master. Comment git qualifie ce type de merge ?
  5. Supprimer cette branche
Exercice 3.3.2 : Merge non fast-forward

Cet exercice se fait simultanément par A et B

  1. Créer une branche nommée bug43 et s'y positionner
  2. Effectuer des modifications au début du fichier Calcul.java et les commiter
  3. Positionnez vous dans la branche master
  4. Effectuer des modifications à la fin du fichier Calcul.java et les commiter
  5. Fusionner (par merge) les modifications de la branche bug43 dans la branche master. Comment git qualifie ce type de merge ?
  6. Supprimer cette branche
Exercice 3.4 : Gestion d'un conflit

Cet exercice se fait simultanément par A et B

  1. Créer une branche nommée bug44 et s'y positionner
  2. Effectuer des modifications dans le fichier Calcul.java et les commiter
  3. Positionnez vous dans la branche master
  4. Effectuer des modifications (differentes) sur les mêmes lignes du fichier Calcul.java et les commiter
  5. Fusionner (par merge) les modifications de la branche bug44 dans la branche master. Que se produit-il ?
  6. Ouvrir le fichier, que remarquez vous à l'emplacement des modifications ?
  7. Afficher le statut de la copie locale.
  8. Resoudre le problème en ne gardant que les modifications de la branche master
  9. Supprimer cette branche
Exercice 3.5 : Manipulation des branches distantes
  1. L'étudiant(e) A sauvegarde ses exercices précedents par la commande (ne pas oublier !) : mv ~/my-app ~/my-app~
  2. L'étudiant(e) A réinitialise son dépot en le clonnant à nouveau (il refait l'ex 3.1). Attention : se positionner dans $HOME avant de cloner.
  3. Les étudiant(e)s A et B affichent le détail du dépôt origin et des branches remote via les commandes suivantes :
    $ git branch -r
    $ git remote show origin
  4. L'étudiant(e) B pousse ses commits des exercices précédents dans la branche origin/master
  5. L'étudiant(e) A compare sa branche master à la branche origin/master. Il y-a-t-il des différences? Pourquoi ? Que faut-il faire pour voir les modifications des autres dans sa branche remote origin/master?
  6. L'étudiant(e) A intégre les modifications distantes via pull.
  7. L'étudiant(e) A fait un commit dans sa branche master puis le pousse vers son origin
Exercice du soir no 1 (concepts)

A faire avant le prochain cours ;

Exercice individuel ;

Faire ce QCM

Laisser le texte sur le serveur https://cours.florat.net dans le fichier ~/soir1.txt

(merci de respecter le nom du fichier)

TP4 Utilitaires Git

Cet exercice se fait simultanément par A et B

Exercice 4.1 : Ignorer des fichiers
  1. Créer un fichier (fictif) .class dans src/main/java/com/mycompany/app
  2. Configurer git pour qu'il ignore recurvivement tous les .class
  3. Utiliser git status pour vérifier l'opération avant et après
  4. Commiter le fichier .gitignore pour que le reste de l'équipe en profite
Exercice 4.2 : Réécrire son historique

Cet exercice se fait simultanément par A et B

  1. Effectuez trois commits
  2. Renommez le dernier commit
  3. Fusionnez le premier et le second
Exercice 4.3 : Rechercher une expression

Cet exercice se fait simultanément par A et B

Recherchez une expression de votre choix dans les différentes révisions du dépôt (Voir commande dans le cours, page "Historique")
Exercice 4.4 : Utilisation de git-flow

Cet exercice se fait simultanément par A et B

  1. Initialiser git-flow sur votre dépôt local
  2. Créer une branche de fonctionnalité et y faire un commit
  3. Finaliser la branche de fonctionnalité
  4. Démarrer une release et y faire un commit, la publier
  5. Finaliser la release en version 1.0.0
  6. Créer, faire un commit puis fermer une branche hotfix
  7. Créer une branche de maintenance 1.x

Aide:

                  git flow init
                  git flow feature [start|finish|publish|pull] panierachat
                  git flow release [start|finish|publish|pull] 1.2.0
                  git flow hotfix [start|finish|publish|pull] bug123
Exercice du soir no 2 (Git)

Attentation: c'est un travail individuel à faire par chaque étudiant

  • Aller sur http://pcottle.github.io/learnGitBranching/?NODEMO
  • Créer une branche develop et y faire un commit
  • Créer une branche evol1 depuis develop et y faire deux commits
  • Créer une branche evol2 depuis develop et y faire deux commits
  • Dans la branche develop, ne récupérer que le premier commit de la branche evol1
  • Dans la branche develop, récupérer les deux commits de la branche evol2 mais en les inversant
  • Poser un tag 1.0.0 sur la branche develop

Pour vérification, résultat correct ici

Copier les commandes effectuées dans le simulateur et les coller dans un fichier ~/soir2.txt (merci de respecter le nom du fichier)

Note : en cas de difficulté, faire les exercices d'entrainement à http://pcottle.github.io/learnGitBranching