Feuille de travaux pratiques - Gestion de version
IUT de Nantes – Département Informatique
LINA - Laboratoire d’Informatique de Nantes Atlantique
Cours de Licence professionnelle 2022-2023
Notes importantes
- Le travail se fera en binôme. Les étudiants se grouperont 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 :
alt12a et
alt12b.
- 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
main
- Poser un tag
1.0.0 sur la branche main
- Depuis la branche
main, 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
main 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 main puis tagger
2.0.1
Se connecter au serveur, 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 :
alt04a,
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
En condition rééelle, les URL sont en https://....
Pour des raisons pratiques, nous utilisons ici une URL locale (sur le même serveur) mais qui reste tout à fait valide.
- 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). A quoi sert son contenu  ?
Exercice 3.2 : Commit d'une modification
Cet exercice se fait simultanément par A et B
- Configurer correctement son nom et e-mail Git (voir support de cours)
- Forcez vim comme éditeur de Git :
git config --global core.editor "vim"
- Créez quelques alias, au moins ci pour commit et st pour status
- Vérifier que vous vous trouvez dans la branche
master, s'y positionner si ce n'est pas le cas.
- Modifier le source
Calcul.java
et ajouter un fichier source
CalculAlternatif.java
dans le même package
- Afficher le statut de la copie locale à ce stade
- 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.
- 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
- Créer une branche nommée
bug42 et s'y positionner
- Effectuer des modifications sur
Calcul.java et les commiter
- Positionnez vous dans la branche
master
- Fusionner (par merge) les modifications de la branche
bug42 dans la branche master.
Comment git qualifie ce type de merge ?
- Supprimer cette branche
Exercice 3.3.2 : Merge non fast-forward
Cet exercice se fait simultanément par A et B. Le but des modifications
de cet exercice est de ne pas créer de conflit.
- Créer une branche nommée
bug43 et s'y positionner
- Effectuer des modifications
au début du fichier
Calcul.java et les commiter
- Positionnez vous dans la branche
master
- Effectuer des modifications
à la fin du fichier
Calcul.java et les commiter
- Fusionner (par merge) les modifications de la branche
bug43 dans la branche master. Comment git qualifie ce type de merge ?
- Supprimer cette branche
Exercice 3.4 : Gestion d'un conflit
Cet exercice se fait simultanément par A et B
- Créer une branche nommée
bug44 et s'y positionner
- Effectuer des modifications dans le fichier
Calcul.java et les commiter
- Positionnez vous dans la branche
master
- Effectuer des modifications (differentes)
sur les mêmes lignes du fichier
Calcul.java et les commiter
- Fusionner (par merge) les modifications de la branche
bug44 dans la branche master. Que se produit-il ?
- Ouvrir le fichier, que remarquez vous à l'emplacement des modifications ?
- Afficher le statut de la copie locale.
- Resoudre le problème en ne gardant que les modifications de la branche
master
- Supprimer cette branche
Exercice 3.5 : Manipulation des branches distantes
-
L'étudiant(e) A sauvegarde ses exercices précedents par la commande :
mv ~/my-app ~/my-app~
- 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.
- 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
- L'étudiant(e) B pousse ses commits des exercices précédents dans la branche
origin/master
- 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?
- L'étudiant(e) A intégre les modifications distantes via
pull.
- L'étudiant(e) A fait des modifications puis les 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
- Créer un fichier (fictif)
.class
dans
src/main/java/com/mycompany/app
- Configurer git pour qu'il ignore recursivement tous les
.class
- Utiliser
git status pour vérifier l'opération avant et après
- Commiter et pousser 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.
Notez les commandes effectuées dans le fichier tp4.txt
- Effectuez trois commits
- Renommez le dernier commit
- Fusionnez le premier et le second
Exercice 4.3 : Rechercher une expression
Cet exercice se fait simultanément par A et B.
Notez les commandes effectuées dans le fichier tp4.txt
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.
Notez les commandes effectuées dans le fichier tp4.txt
- Initialiser git-flow sur votre dépôt local
- Créer une branche de fonctionnalité et y faire un commit
- Finaliser la branche de fonctionnalité
- Démarrer une release et y faire un commit, la publier
- Finaliser la release en version 1.0.0
- Créer, faire un commit puis fermer une branche hotfix
- 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)
Attention: 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