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
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
- 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
- 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 (ne pas oublier !) :
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 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
- Créer un fichier (fictif)
.class
dans
src/main/java/com/mycompany/app
- Configurer git pour qu'il ignore recurvivement tous les
.class
- Utiliser
git status pour vérifier l'opération avant et après
- 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
- 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
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
- 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)
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