Feuille de travaux pratiques -
Gestion de version
Concepts/ Subversion/ Git
IUT de Nantes – Département Informatique
LINA - Laboratoire d’Informatique de Nantes Atlantique
Cours de Licence professionnelle 2016
Copyright (C) 2016 Bertrand
FLORAT (bertrand@florat.net)
Version 1.6 du 17 septembre 2016 / http://florat.net/cours_vcs/tp.html
/ Cours
Naviguer avec les fléches ou la molette de la souris
Notes importantes
- Le travail se fera en binôme. Chaque binôme possède un
dépôt SVN et Git distant et 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
- Il est possible d'utiliser Subversion ou Git dans Eclipse
via des plugins, néanmoins dans le cadre de ce TP, il vous est
demandé de n'utiliser que la ligne de commande
- Vous êtes responsable des données présentes sur vos deux
dépôts. Ne stocker que des données relatives à votre travail à
l’IUT et uniquement des sources
- Veuillez vous référer aux pages 'man' et aux documents
référencés à la fin du support de cours
- Tous les exercices se feront sous Gnu/Linux avec vi (vim)
comme éditeur de texte.
Commandes de base: :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 Commandes SVN de base
Préparation de l'environnement
A faire par A et B
Créer un repertoire ~/dev qui contiendra les projets sur lesquels nous
travaillerons et toutes leurs branches
Si un étudiant est seul, il
devra simuler A et B dans deux consoles différentes et avec deux utilisateurs différents
Exercice 2.1 : Récupération d'une copie locale
Cet exercice est fait par A et B
Récupérer dans le répertoire ~/dev/my-app-trunk
la branche trunk du projet qui vient d'être créé par A et situé à cette adresse :
file:///var/cours/depots_svn/b<code_binôme>/my-app/trunk
Vous pouvez consulter le répertoire .svn à la racine de votre copie locale, que contient-il ?
Exercice 2.2 : Commit d'une modification
Cet exercice est fait par A uniquement
- Modifier le source Calcul.java
et ajouter un nouveau fichier CalculAlternatif.java
dans le même package
- Afficher le statut de la copie locale à ce stade
- Commiter cette modification de fichier et cet ajout
d'un nouveau fichier en un seul commit 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 introduit
Attention : svn doit récupérer l'historique depuis le dépôts même si les commits
ont été faits sur le poste qui a effectué les commits).
Exercice 2.3 : Résolution d'une mise à jour concurrente sans conflit
Cet exercice est fait simultanément par A et B
- A et B modifient simultanément le fichier pom.xml: A modifie le groupId, B modifie
l'artifactId.
- A et B consultent le status de leurs copies locales respectives.
- A commite
- B tente de commiter. Que se passe-t-il ? que faut-il faire
? Une fois le problème résolu, B affiche le statut puis commite à
son tour sa modification.
- A prend en compte la modification de B
Exercice 2.4 : Résolution d'un conflit
Cet exercice est fait simultanément par A et B
Modifier (toujours simultanément) une nouvelle fois le
fichier pom.xml. Cette fois, A et B
modifient la même zone (par exemple la version du projet). A
commite d’abord ces modifications. Puis c’est au tour de B. Que se
passe-t-il ? Résoudre le problème.
Exercice du soir no 1 (SVN)
A faire avant le prochain cours ;
Exercice individuel ;
Expliquer en moins de 200 mots les différences majeures entre Git
et SVN et dans quel cas utiliser l'un ou l'autre ;
Laisser le texte sur le serveur https://cours.florat.net
dans le fichier ~/soir1.txt
TP3 Commandes Git de base
Exercice 3.1 : Clonage d'un dépot
Chaque binôme dispose d'un dépôt Git accessible en ssh et
situé à l'URL
file:///var/cours/depots_git/b<code_binôme>/my-app.git
- A et B clonent dans leur répertoire ~/dev le dépôt distant affecté au binôme
- Afficher les branches avec git
branch -a
- Consultez votre répertoire .git (commande: find .git)
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)
- 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 ensemble 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 bug42 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
bug42 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
Voir cours slide "Merge"
- Refaire l'exercice 3.3.2 mais cette fois en créant un
conflit sur le fichier Calcul.java
entre les branches master et bug42 (modifier de façon différente les mêmes
lignes de code)
- Que vous reporte Git ? Un commit a-t-il été créé ?
afficher le statut de la copie locale.
- Résoudre le conflit manuellement et le commiter
Exercice 3.5 : Manipulation des branches distantes
A sauvegarde (commande mv ~/dev/my-app ~/dev/my-app~) son dépôt local puis le
réinitialise en le clonnant à nouveau (voir ex 3.1) depuis le repertoire
~/dev
- Afficher le détail du dépôt origin
et des branches remote via les commandes suivantes :
$ git branch -r
$ git remote show origin
- B pousse ses commits des exercices précédents dans la
branche origin/master
- A compare sa branche master à
la branche origin/master. Il y-a-t-il
des différences? Pourquoi ?
- A intégre les modifications distantes soit via fetch + merge soit par un pull.
Quelle est la différence ? quel est la méthode la plus prudente ?
TP4 Utilitaires Git
Ce TP a comme prérequis le TP3
Exercice 4.1 : Ignorer des fichiers
- Créer un fichier (fictif) .class
avec les fichier java
- Configurer git pour qu'il ignore recurvivement tous les .class
- Utiliser git status pour
vérifier l'opération avant et après
Exercice 4.2 : Réécrire son historique
- Effectuez trois commits
- Renommez le premier commit
- Fusionnez le second et le troisième
Exercice 4.3 : Rechercher une expression
Recherchez une expression de votre choix dans les différentes
révisions du dépôt avec la commande git
grep <expression> <reference>
Exercice 4.4 : Utilisation de git-flow
- Initialiser git-flow sur votre dépôt local
- Démarrer une release
- Créer puis fermer une branche topic de fonctionnailité
- Créer puis fermer une branche topic hotfix
- Finaliser la release
Exercice du soir no 2 (Git)
Attentation: c'est un travail individuel à faire par chaque étudiant, délai: une semaine
- Aller sur http://pcottle.github.io/learnGitBranching/?NODEMO
- Faire un commit sur master
- Poser un tag V1 sur ce commit
- Créer depuis ce commit une branche maintv1, y faire deux commits, tagger ce dernier commit V1Fix1
- Faire un commit sur master puis tagger V2
- Créer depuis ce commit une branche maintv2, y faire deux commits puis y merger le commit V1Fix1
- Faire un dernier commit dans la branche maintv2, puis le tagger par votre nom de famille
- Faire une capture d'écrans et l'envoyer par mail en piece jointe à http://florat.net/contact