• Aucun résultat trouvé

Conduite et Gestion de Projet Systèmes de gestion de version

N/A
N/A
Protected

Academic year: 2022

Partager "Conduite et Gestion de Projet Systèmes de gestion de version"

Copied!
91
0
0

Texte intégral

(1)

Conduite et Gestion de Projet Syst` emes de gestion de version

Thierry Hamon

Bureau H202 Institut Galil´ee - Universit´e Paris 13

&

LISN - Universit´e Paris-Saclay hamon@limsi.fr

https://perso.limsi.fr/hamon/Teaching/P13/CGP-2021- 2022/

(2)

Introduction

Gestion de version :

Maintenance d’un ensemble de fichiers et de leurs versions Utilisation importante dans le d´eveloppement logiciel (gestion du code source) :

Nombreuses fonctionnalit´es n´ecessaires au d´eveloppement logiciel :

Sauvegarde r´eguli`ere des modifications

Historique des modifications (date, nom du d´eveloppeur, zone de code modifi´e)

Partage des fichiers entre plusieurs d´eveloppeurs eveloppement en parall`ele sur le mˆeme fichier efinition de distribution

Maintenance et correction (d´efinition de patch)

(3)

Syst` eme optimiste

Plusieurs utilisateurs peuvent travailler sur le mˆeme fichier en mˆeme temps

le syst`eme fait l’hypoth`ese que les conflits (dus `a des modifications) sont rares : les utilisateurs ne travaillent pas sur la mˆeme partie du fichier

le syst`eme n’a qu’`a fusionner les modifications (au niveau des lignes)

les conflits sont r´egl´es manuellement par les utilisateurs Autre solution : r´eserver le fichier `a modifier, de mani`ere `a travailler en exclusivit´e

(4)

Syst` eme optimiste

Mode de fonctionnement optimiste : avantages importants un d´eveloppeur voulant faire modifier un fichier n’est pas empˆech´e par quelqu’un qui a r´eserv´e ce mˆeme fichier pas de cassure dans le rythme de d´eveloppement

(5)

D´ epˆ ot / R´ ef´ erentiel

Centralisation des fichiers et des informations associ´ees : Stockage dans une base de donn´ees

Acc`es local et distant partag´e par tous les utilisateurs Sauvegarde des diff´erentes versions des fichiers

Sauvegarde des informations associ´ees aux fichiers et au d´epˆot Chaque utilisateur travaille sur une copie locale et envoie ses modifications sur le d´epˆot

(6)

Principe de la gestion de version

Chaque ´el´ement (fichier, r´epertoire, etc.)

est contrˆol´e par le syst`eme de gestion de version se voit associer un num´ero de version (r´evision)

L’enregistrement d’une modification d’un ´el´ement de la copie locale provoque une incr´ementation du num´ero de r´evision D´efinition d’une arborescence des versions (organis´ee suivant un tronc et des branches)

(7)

Principe de num´ erotation des versions

format : m.n.p

voir par exemple la num´erotation des noyaux Linux m: num´ero de r´evision majeure

Incr´ementation lors d’ajout de fonctionnalit´es incompatibles avec la version pr´ec´edente

n: num´ero de r´evision mineure

Incr´ementation lors d’ajout de fonctionnalit´es compatibles avec la version courante (maintenance ´evolutive)

La parit´e peut ˆetre utilis´ee pour indiquer la stabilit´e : pair : version stable

impair : version de d´eveloppement p: num´ero de patch

Incr´ementation lors de la correction de bugs (maintenance corrective)

(8)

Rˆ oles des diff´ erentes arborescences

Distribution :

Identifier des rep`eres dans le d´eveloppement (phase de eveloppement, version, etc.)

Faciliter le support en figeant des versions Branches :

Correction de bugs

Tester de nouvelles fonctionnalit´esrisqu´ees sur des versions ant´erieures ou en parall`ele `a la version principale

(9)

Op´ erations principales

import: Initialisation/importation d’un projet dans un d´epˆot

`

a partir d’une arborescence non g´er´ees par un syst`eme de gestion de version

checkout: r´ecup´eration d’un projet dans un d´epˆot pour obtenir une copie locale

commit: mise `a jour du d´epˆot avec la copie locale update: mise `a jour de la copie locale avec le d´epˆot Synchronisation avec des modifications des autres d´eveloppeurs

(10)

Terminologie

esum´e

epˆot : ensemble des fichiers sous le syst`eme de gestion de version Copie locale : ensemble des fichiers sur la machine locale du d´eveloppeur evision : version d’un ´el´ement (fichier, r´epertoire, projet, etc.) du d´epˆot Tronc : arborescence principale d’un projet

Distribution (tags) : arborescence fig´ee d’un projet

Branches : arborescences secondaires, zones de travail utilis´ees pour des eveloppements ou des corrections en parall`ele `a l’arborescence principale Checkout : r´ecup´eration des fichiers du d´epˆot dans leur version courante Commit : soumision des modifications et/ou des ajouts de la copie locale Update : Mise `a jour de la copie locale par rapport aux fichiers sur le epˆot

(11)

Git

https://git-scm.com

Syst`eme de gestion de version distribu´e (DVCS) rappel : SVN est un syst`eme centralis´e

Syst`eme optimiste, rapide et efficace pour de grands projets Permet le d´eveloppement collaboratif, non lin´eaire (branches parall`eles)

Commande utilisateur : git

Aide : git helpougit help commande GUI :gitk,qgit, ...

Documentation : https://git-scm.com/doc

D´evelopp´e par Linus Torvalds pour la gestion du noyau Linux, premi`ere version en d´ecembre 2005

(12)

Git

Syst`eme de gestion de version tr`es complet

difficile `a maˆıtriser compl`etement Principes de base simples `a apprendre si le mod`ele sous-jacent est compris

(http://xkcd.com/1597/)

(13)

Principes

Conception similaire `a un syst`eme de fichiers (adressage, etc.) Commit: instantan´e (snapshot) du projet (r´epertoire de travail), d´esign´e par une r´ef´erence

Fichiers non modifi´es : r´ef´erence au fichier d´ej`a enregistr´e Utilisation de r´esum´es (cl´es de hachage) et la compression pour ´eviter la duplication des donn´ees

Identification des r´evisions avec des cl´es de hachage (SHA1)

(14)

Principe de stockage des modifications

Principe de stockage classique (SVN) :

Principe de stockage dans Git :

(15)

Principes

Deux niveaux de d´epˆot :

epˆot local utilis´e la plupart de op´erations courantes

(historique d’un projet, diff´erence sur un fichier, commit, etc.) Rapidit´e de r´eponse puisqu’on ne passe pas par un serveur distant

Utilisation de Git possible mˆeme sans connectivit´e Internet epˆot distant (remote) utilis´e pour le travail collaboratif Partage des modifications en

poussant (push), int´egrant/tirant (pull)

les modifications sur le serveur Git distant epˆot pr´ef´er´e : origin

(16)

Architecture Git

Index Copie de travail Index Copie de travail

modification différence ...

édition

modification différence ...

édition Dépot Git

distant

Dépot Git local

Dépot Git local (commande git)

Développeur

Développeur (commande git) Administrateur

pull push

clone push

add

commit reset −−hard reset −−hard

clone pull

commit

add

(17)

Principes

Cycle de vie d’un fichier (git status)

untracked: fichier non g´er´e par git unmodified/committed: copie de travail correspondant `a la version dans le d´epˆot

Modified: copie de travail ne correspondant par `a la version dans le epˆot

Staged(index´e) : copie de travail marqu´ee pour ˆetre incluse dans le prochaincommit

(18)

Flux des donn´ ees dans Git

(19)

Configuration initiale

D´efinition des valeurs par d´efaut pour les commits Stockage dans le fichier$HOME/.gitconfig

$ git config --global --add user.name "Thierry Hamon"

$ git config --global user.email hamon@limsi.fr

$ git config --global core.editor emacs

(20)

Initialisation d’un d´ epˆ ot local

+ Initialisation d’un d´epˆot

Dépot Git distant

Dépot Git local

Dépot Git local 1b Utilisateur

(git init) Administrateur 1 (git −−bare init)

1b Utilisateur (git init) (commande git)

Développeur

Développeur (commande git)

(21)

Initialisation d’un d´ epˆ ot local

Utilisation de la commandegit initdans le r´epertoire d´edi´e au d´epˆot (icigit-cgp)

Cr´eation de la branche principale (master)

$ mkdir git-cgp

$ cd git-cgp

$ git init

ep^ot Git vide initialis´e dans /home/thierry/git-cgp/.git/

$ ls -a ./ ../ .git/

$ ls -a .git

./ ../ branches/ config description HEAD hooks/

info/ objects/ refs/

ou

git init git-cgp;cd git-cgp

(22)

Consultation de l’´ etat de la copie de travail

1cstatus, log 1cstatus, log

Dépot Git distant

Dépot Git local

Dépot Git local (commande git)

Développeur

Développeur (commande git)

(23)

Consultation de l’´ etat de la copie de travail

$ git status Sur la branche master Validation initiale

rien `a valider (cr´eez/copiez des fichiers et utilisez "git add" pour les suivre)

$ echo "Hello world" > fichier.txt

$ git status Sur la branche master Validation initiale Fichiers non suivis:

(utilisez "git add <fichier>..." pour inclure dans ce qui sera valid´e) fichier.txt

aucune modification ajout´ee `a la validation mais des fichiers non suivis sont pr´esents (utilisez "git add" pour les suivre)

Le fichierfichier1.txt est inconnu pour le d´epˆot git local.

(24)

Ajout de fichiers

1dadd 1dadd

Index Copie de travail Index Copie de travail

modification différence ...

édition

modification différence ...

édition Dépot Git

distant

Dépot Git local

Dépot Git local (commande git)

Développeur

Développeur (commande git)

(25)

Ajout de fichiers

Utilisation degit add

$ git add fichier.txt

$ git status

Sur la branche master Validation initiale

Modifications qui seront valid´ees :

(utilisez "git rm --cached <fichier>..." pour d´esindexer) nouveau fichier: fichier.txt

Le fichierfichier1.txt est maintenant traqu´e/index´e.

(26)

Envoi de fichiers au d´ epˆ ot local

1ecommit

1ecommit

Index Copie de travail Index Copie de travail

modification différence ...

édition

modification différence ...

édition Dépot Git

distant

Dépot Git local

Dépot Git local (commande git)

Développeur

Développeur (commande git)

(27)

Envoi de fichiers au d´ epˆ ot local (1)

Utilisation degit commit -m "Message"

$ git commit -m ’Version initiale du projet’

[master (commit racine) 0fed1bf] Version initiale du projet 1 file changed, 1 insertion(+)

create mode 100644 fichier.txt

Envoi des fichiers ajout´es `a la liste des fichiers `acommitter

(28)

Envoi de fichiers au d´ epˆ ot local (2)

Tout fichier `acommitter doit d’abord ˆetre ajout´e `a la liste

$ echo "Hello world" >> fichier.txt

$ git commit -m ’Version modifi´ee 1 du projet’

Sur la branche master

Modifications qui ne seront pas valid´ees : modifi´e: fichier.txt

aucune modification ajout´ee `a la validation Utilisation de l’option-a(ou r´ealisation degit add)

$ git commit -a -m ’Version modifi´ee 1 du projet’

[master 6606d3d] Version modifi´ee 1 du projet 1 file changed, 1 insertion(+)

(29)

Historique des modifications

git log,git log --stat,git log -p

$ git log

commit 6606d3dd255f9c27447706a79f8d315346e0bd27 Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 13:59:40 2016 +0200 Version modifi´ee 1 du projet

commit 0fed1bfe1fbc4453e98954282caf5a16f219ee37 Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 13:41:18 2016 +0200 Version initiale du projet

(30)

Examen des modifications (1)

Affichage des modifications entre la copie de travail et la version index´ee (pas forc´ement committ´ee)

$ echo "Hello world" >> fichier.txt

$ git diff

diff --git a/fichier.txt b/fichier.txt index 57bf5a7..7780f02 100644

--- a/fichier.txt +++ b/fichier.txt

@@ -1,2 +1,3 @@

Hello world Hello world +Hello world

(31)

Examen des modifications (2)

Affichage des modifications entre la version index´ee et la version committ´ee

$ git add fichier.txt

$ git diff

$ git diff --cached

diff --git a/fichier.txt b/fichier.txt index 57bf5a7..7780f02 100644

--- a/fichier.txt +++ b/fichier.txt

@@ -1,2 +1,3 @@

Hello world Hello world +Hello world

(32)

D´ etail d’un commit

git show <HASHKEY>

$ git show 93f467b557

commit 93f467b5575964cd8fd266e105c065a1c214948e Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 15:00:19 2016 +0200 suppression fichier2

diff --git a/fichier2.txt b/fichier2.txt deleted file mode 100644

index e69de29..0000000

$ git show df0888da

commit df0888daa575bc283fa470a23c7ac01114066b46 Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 14:55:43 2016 +0200 Version modifi´ee 2 du projet diff --git a/fichier.txt b/fichier.txt index 95cb3b3..04d3bea 100644 --- a/fichier.txt

+++ b/fichier.txt

@@ -1,2 +1,3 @@

Hello world

(33)

Revenir en arri` ere (1)

Retirer un fichier de la liste des fichiers `acommitter (fichier index´e) avec git reset HEAD

$ git reset HEAD

Modifications non index´ees apr`es reset :

M fichier.txt

(34)

Revenir en arri` ere (2)

Suppression des modifications r´ealis´ees sur la copie de travail : git checkout -- FICHIER

$ git checkout -- fichier.txt

$ git status

Sur la branche master

rien `a valider, la copie de travail est propre

(35)

Revenir en arri` ere (3)

Restauration de la copie de travail `a partir de la derni`ere version committ´ee

$ echo "Hello world" >> fichier.txt

$ git add fichier.txt

$ git reset --hard

HEAD est maintenant `a 581337e Version modifi´ee 1 du projet

(36)

Suppression de la derni` ere version committ´ ee

Utilisation degit revert <HASHKEY>

$ cat fichier.txt Hello world Hello world 1 Hello world 4

$ git log

commit bd98a589871fbdc28f904630a5b27de38b0ff9fd Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 14:49:54 2016 +0200 Version modifi´ee 2 du projet

commit 82c980fea261f79030ad888dabbca53d372d74cb Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 14:49:50 2016 +0200 Version modifi´ee 1 du projet

commit 90f8ee3f9090f66c6dafe9817e41ac40cfd3eaf7 Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 14:49:50 2016 +0200 Version initiale du projet

$ git revert bd98a

(37)

Suppression de la derni` ere version committ´ ee

$ cat fichier.txt Hello world Hello world 1

$ git log

commit a57b23231e32304067034e0d8dc78889bba6dfb3 Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 14:51:48 2016 +0200 Revert "Version modifi´ee 2 du projet"

This reverts commit bd98a589871fbdc28f904630a5b27de38b0ff9fd.

commit bd98a589871fbdc28f904630a5b27de38b0ff9fd Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 14:49:54 2016 +0200 Version modifi´ee 2 du projet

commit 82c980fea261f79030ad888dabbca53d372d74cb Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 14:49:50 2016 +0200 Version modifi´ee 1 du projet ...

(38)

Suppression de la derni` ere version committ´ ee

...

commit 90f8ee3f9090f66c6dafe9817e41ac40cfd3eaf7 Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 14:49:50 2016 +0200 Version initiale du projet

(39)

Suppression d’un fichier

Utilisation degit rm FICHIER

$ touch fichier2.txt

$ git add fichier2.txt

$ git commit -m "ajout fichier2"

[master f312e5c] ajout fichier2

1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 fichier2.txt

$ git rm fichier2.txt rm ’fichier2.txt’

$ ls fichier.txt

$ git status Sur la branche master

Modifications qui seront valid´ees :

(utilisez "git reset HEAD <fichier>..." pour d´esindexer) supprim´e: fichier2.txt

$ git commit -m "suppression fichier2"

[master 93f467b] suppression fichier2

1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 fichier2.txt

$ ls fichier.txt

(40)

D´ eplacement/renommage d’un fichier (1)

Utilisation degit mv SOURCE CIBLE

$ git mv fichier.txt fichier1.txt

$ git status

Sur la branche master

Modifications qui seront valid´ees :

(utilisez "git reset HEAD <fichier>..." pour d´esindexer) renomm´e: fichier.txt -> fichier1.txt

$ ls

DIR1/ fichier1.txt

$ git commit -m "renommage de fichier en fichier1"

[master 71f2f4d] renommage de fichier en fichier1 1 file changed, 0 insertions(+), 0 deletions(-) rename fichier.txt => fichier1.txt (100%)

$ ls

DIR1/ fichier1.txt

(41)

D´ eplacement/renommage d’un fichier (2)

$ git mv fichier1.txt DIR1

$ git status

Sur la branche master

Modifications qui seront valid´ees :

(utilisez "git reset HEAD <fichier>..." pour d´esindexer) renomm´e: fichier1.txt -> DIR1/fichier1.txt

$ git commit -m "d´eplacement de fichier1 dans DIR1"

[master 7ace76a] d´eplacement de fichier1 dans DIR1 1 file changed, 0 insertions(+), 0 deletions(-) rename fichier1.txt => DIR1/fichier1.txt (100%)

$ ls -R .:

DIR1/

./DIR1:

fichier1.txt

(42)

Cr´ eation d’un r´ epertoire

NB : Pas d’ajout de r´epertoire vide dans un d´epˆot Git

$ mkdir DIR1

$ git add DIR1

$ git status

Sur la branche master

rien `a valider, la copie de travail est propre

$ git commit -m "cr´eation r´epertoire"

Sur la branche master

rien `a valider, la copie de travail est propre

$ git log

commit 93f467b5575964cd8fd266e105c065a1c214948e Author: Thierry Hamon <hamon@limsi.fr>

Date: Mon Sep 5 15:00:19 2016 +0200 suppression fichier2

....

(43)

Cr´ eation d’un r´ epertoire

Git ne g`ere que les fichiers (et indirectement les r´epertoires contenant des fichiers)

$ touch DIR1/.gitkeep

$ git add DIR1

$ git status

Sur la branche master

Modifications qui seront valid´ees :

(utilisez "git reset HEAD <fichier>..." pour d´esindexer) nouveau fichier: DIR1/.gitkeep

$ git commit -m "cr´eation r´epertoire"

[master b364b1f] cr´eation r´epertoire

1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 DIR1/.gitkeep

(44)

Identification d’une version

Marquage d’une version avec une ´etiquette explicite : git tag -a ETIQUETTE

$ git tag -a RELEASE-1.0 -m "Premi`ere version potable du projet"

$ git tag -l RELEASE-1.0

Suppression de l’´etiquette avec l’option-d ETIQUETTE

$ git tag -d RELEASE-1.0

´Etiquette ’RELEASE-1.0’ supprim´ee (elle ´etait sur 824801a)

(45)

Gestion des branches

Possibilit´e de d´eveloppement parall`ele Cr´eation d’une branche :

$ git checkout -b branch1

Basculement sur la nouvelle branche ’branch1’

Liste des branches :

$ git branch

* branch1 master

S´election d’une branche :

$ git checkout master

Basculement sur la branche ’master’

(46)

Modification d’une branche

$ git branch

* branch1 master

$ echo "Bonjour tout le monde 1" >> DIR1/fichier1.txt

$ git commit -a -m ’Version modifi´ee 5 du projet’

[branch1 47450ea] Version modifi´ee 5 du projet 1 file changed, 1 insertion(+)

$ more DIR1/fichier1.txt Hello world

Hello world 1 Hello world 4 Bonjour tout le monde 1

$ git checkout master

Basculement sur la branche ’master’

$ more DIR1/fichier1.txt Hello world

Hello world 1 Hello world 4

(47)

Fusion de branches

Utilisationgit merge BRANCHE_ORIGINE

Fusion des modifications deBRANCHE_ORIGINEavec la branche courante

thierry@brest:~/git-cgp$ git branch branch1

* master

thierry@brest:~/git-cgp$ git merge branch1 Mise `a jour b1360f3..04c6fc8

Fast-forward

DIR1/fichier1.txt | 1 + 1 file changed, 1 insertion(+)

thierry@brest:~/git-cgp$ more DIR1/fichier1.txt Hello world

Hello world 1 Hello world 4 Bonjour tout le monde 1

NB : Les modifications sont imm´ediatementcommit´ees

(48)

Utilisation d’un d´ epˆ ot distant

Index Copie de travail Index Copie de travail

modification différence ...

édition

modification différence ...

édition Dépot Git

distant

Dépot Git local

Dépot Git local (commande git)

Développeur

Développeur (commande git)

(49)

Utilisation d’un d´ epˆ ot distant

2 clone

Index Copie de travail Index Copie de travail

modification différence ...

édition

modification différence ...

édition Dépot Git

distant

Dépot Git local

Dépot Git local (commande git)

Développeur

Développeur (commande git)

(50)

Utilisation d’un d´ epˆ ot distant (1)

R´ecup´eration d’une copie locale du d´epˆot avec git clone ADRESSE_DEPOT

$ git clone thierry@brest:git-cgp Clonage dans ’git-cgp’...

thierry@brest’s password:

remote: Counting objects: 25, done.

remote: Compressing objects: 100% (15/15), done.

remote: Total 25 (delta 2), reused 0 (delta 0) eception d’objets: 100% (25/25), done.

esolution des deltas: 100% (2/2), done.

erification de la connectivit´e... fait.

$ cd git-cgp/

$ ls -R .:

DIR1/

./DIR1:

fichier1.txt

(51)

Utilisation d’un d´ epˆ ot distant

1ecommit

1dadd

Index Copie de travail Index Copie de travail

modification différence ...

édition

modification différence ...

édition Dépot Git

distant

Dépot Git local

Dépot Git local (commande git)

Développeur

Développeur (commande git)

(52)

Utilisation d’un d´ epˆ ot distant

3 pull

Index Copie de travail Index Copie de travail

modification différence ...

édition

modification différence ...

édition Dépot Git

distant

Dépot Git local

Dépot Git local (commande git)

Développeur

Développeur (commande git)

(53)

Utilisation d’un d´ epˆ ot distant

3bpush

Index Copie de travail Index Copie de travail

modification différence ...

édition

modification différence ...

édition Dépot Git

distant

Dépot Git local

Dépot Git local (commande git)

Développeur

Développeur (commande git)

(54)

Utilisation d’un d´ epˆ ot distant (2)

R´ecup´erer/tirer des branches distantes : git pull

Fusion de la branche distante dans la branche courante puis commit du r´esultat

Attention : possibilit´e de conflit `a r´esoudre puis committer le r´esultat

Machine 1 :

$ echo "Bonjour tout le monde 2" >> DIR1/fichier1.txt

$ git commit -a -m ’Version modifi´ee 6 du projet’

[master 81e872d] Version modifi´ee 6 du projet 1 file changed, 1 insertion(+)

$ git pull Already up to date.

$ git push

Counting objects: 7, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (3/3), done.

Writing objects: 100% (4/4), 383 bytes | 0 bytes/s, done.

Total 4 (delta 0), reused 0 (delta 0) To thierry@brest:git-cgp

Machine 2 :

$ git pull

thierry@brest’s password:

remote: Counting objects: 7, done.

remote: Compressing objects: 100% (3/3), done.

remote: Total 4 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (4/4), done.

Depuis brest:git-cgp

04c6fc8..81e872d master -> origin/master Mise `a jour 04c6fc8..81e872d

Fast-forward

(55)

Utilisation d’un d´ epˆ ot distant

4bpush 4apull

Index Copie de travail Index Copie de travail

modification différence ...

édition

modification différence ...

édition Dépot Git

distant

Dépot Git local

Dépot Git local (commande git)

Développeur

Développeur (commande git)

(56)

Utilisation d’un d´ epˆ ot distant (3)

Envoyer/pousser une branche locale : git push Machine 2 :

$ echo "Bonjour tout le monde 3" >> DIR1/fichier1.txt

$ git commit -a -m ’Version modifi´ee 7 du projet’

[master 39256f5] Version modifi´ee 7 du projet 1 file changed, 1 insertion(+)

$ git push

thierry@brest’s password:

Counting objects: 7, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (3/3), done.

Writing objects: 100% (4/4), 383 bytes | 0 bytes/s, done.

Total 4 (delta 0), reused 0 (delta 0) To thierry@brest:git-cgp

eee01f8..39256f5 master -> master

NB : Modification du d´epˆot sur la machine 1 pour ˆetre une simple d´epˆot (pas de possibilit´e de modification en locale)

(57)

Identification de l’auteur des commits

git blame -- FICHIER

$ git blame -- DIR1/fichier1.txt

^5f6bc29 fichier.txt (Thierry Hamon 2016-09-05 18:12:10 +0200 1) Hello world 1a1d0990 fichier.txt (Thierry Hamon 2016-09-05 18:12:10 +0200 2) Hello world 1 785210f2 fichier.txt (Thierry Hamon 2016-09-05 18:12:10 +0200 3) Hello world 4 eee01f87 DIR1/fichier1.txt (Thierry Hamon 2016-09-05 18:12:10 +0200 4) Bonjour tout le monde 1 39256f53 DIR1/fichier1.txt (Thierry Hamon 2016-09-05 18:12:53 +0200 5) Bonjour tout le monde 3

(58)

R´ esolution des conflits

Conflit : incompatibilit´e de modifications `a fusionner Processus :

Marqueurs de conflits associ´es aux fichiers sur lesquels portent les conflits

Pas d’ajout `a l’index (liste des fichiers `a committer) esolution du conflit par le d´eveloppeur

Ajouter des fichiers `a l’index Committer le r´esultat

(59)

Conclusion

Git :

Outil complexe mais puissant pour la gestion de version de fichiers (code ou autre)

Tr`es souvent utilis´e en milieu professionnel Nombreuses autres possibilit´es non pr´esent´ees ici

(60)

Sources des transparents

Matthieu Herrb (LAAS)

https://git-scm.com/book/en/v2 Christopher Simpkins (Georgia Tech) Anthony Baire (Rennes 1/IRISA)

http://ben-denham.github.io/git-advanced/pages/

git-cheatsheet.html

(61)
(62)

Subversion (SVN)

http://subversion.apache.org/

Syst`eme de gestion de version permettant le d´eveloppement collaboratif

le partage de fichiers et de r´epertoire dans un d´epˆot la num´erotation des version des fichiers et r´epertoires la r´ecup´eration des anciennes versions des fichiers la gestion des conflits sur un fichier

la diffusion des mises `a jour du d´epˆot

Centralisation du d´epˆot (mod`ele client-serveur) Disponible ind´ependamment de tout IDE

mais accessible sous forme d’un module dans Eclipse Commande utilisateur (client) : svn

Aide : svn helpousvn help commande

(63)

Fonctionnalit´ es de Subversion

Syst`eme optimiste

(mais possibilit´e de verrouillage si c’est vraiment n´ecessaire) D´efinition de m´eta-donn´ees (informations associ´ees) sur les fichiers et les r´epertoires

R´evision des fichiers, r´epertoires et m´eta-donn´ees

Manipulation de l’arborescence du d´epˆot (ajout, suppression et d´eplacement des fichiers et r´epertoires)

Op´erations de r´evision (commit/update/import) regroup´ees sur plusieurs fichiers

atomiques (travail au niveau de la ligne et non du fichier) Gestion des branches et des distributions

(64)

Caract´ eristiques techniques

Stockage diff´erentiel des fichiers

Seules les modifications par rapport `a la r´evision pr´ec´edente sont enregistr´ees

Gestion particuli`ere des fichiers binaires

Fonctionnementoffline pour certaines op´erations :

Etat des fichiers de la copie locale (svn status), diff´erences entre deux r´evisions (svn diff), annulation des modifications locales (svn revert)

Utilisation des informations se trouvant dans les r´epertoires .svn

Diff´erents protocoles de communication (SGF, HTTP, SVN, SVN+SSH)

(65)

Architecture SVN

svn commit svn commit

svn update svn update

svn checkout svn checkout

modification différence

...

édition modification

différence ...

édition

Développeur (commande svn) Copie de travail

Développeur (commande svn) Copie de travail svn import

Arborescence initiale

Dépot SVN

Administrateur (commande svnadmin)

(66)

Cr´ eation du d´ epˆ ot

En tant qu’administrateur de Subversion Utilisation de la commande svnadmin

Cr´eation du d´epˆot : svnadmin create <depot>

Aide pour svadmin : svnadmin help

(67)

Sauvegarde/restauration du d´ epˆ ot

svnadmin dump <depot> > fichier

Sauvegarde l’ensemble du d´epˆot : fichiers, r´epertoires, m´eta-donn´ees, etc.

Le fichier en sortie permet la restauration du d´epˆot svnadmin load <depot> < fichier

Restauration du d´epˆot `a partir d’un fichier sauvegard´e

(68)

Cr´ eation d’un projet

Importation d’une arborescence initiale dans le d´epˆot Arborescence UNIX contenant et organisation les fichiers `a ajouter au d´epˆot SVN

Organisation sur le d´epˆot, dans le r´epertoire contenant le projet :

un r´epertoiretrunkcontenant la branche principale o`u sera import´ee l’arborescence principale

un r´epertoirebrancheso`u seront stock´es plus tard les arborescences secondaires

un r´epertoiretags o`u seront stock´ees les distributions Remarques :

Organisation purement conventionnelle

(69)

Quels fichiers placer sur le d´ epˆ ot ?

Tous les fichiers modifi´es par les d´eveloppeurs : Fichiers sources

s’assurer qu’il est possible de reconstituer le produit `a partir de ces fichiers

Fichiers de documentation et de construction du logiciel (makefile, etc.)

Ne surtout pas mettre : les fichiers temporaires

les fichiers compil´es ou g´en´er´es `a partir des fichiers sources (fichiers objets, ex´ecutables, librairies, archives)

(70)

Importation initiale

svn import -m "Message" <arborescence initiale> <depot>

Int´egration de l’arborescence initiale (fichiers et r´epertoire dans le d´epˆot)

Tous les fichiers et r´epertoires sont g´er´es sous SVN Cr´eation de la version 1 du d´epˆot

Option -m: sp´ecification d’un message associ´e `a l’op´eration effectu´ee

NB : sans l’option -m, un ´editeur par d´efaut est ex´ecut´e pour r´ediger un message (l’´editeur est d´efini dans la variable d’environnementSVNEDITOR.

Remarque importante : supprimer ou ne plus utiliser l’arborescence

(71)

Importation initiale (1)

1 svn import

Arborescence initiale

Dépot SVN

Administrateur (commande svnadmin)

(72)

Importation initiale (2)

1 svn import

Arborescence initiale

Dépot SVN

Administrateur (commande svnadmin)

(73)

R´ ecup´ eration d’une copie locale

svn checkout <chemin du depot>

Cr´eation d’une copie locale du d´epˆot

Chaque d´eveloppeur doit effectuer l’op´eration avant de travailler sur les sources (´edition, modification, ajout, suppression, etc.)

Raccourci pour checkout: co svn co <chemin du depot>

(74)

R´ ecup´ eration de la copie locale

2

2 svn checkout svn checkout

modification différence

...

édition modification

différence ...

édition

Développeur (commande svn) Copie de travail

Développeur (commande svn) Copie de travail

Dépot SVN

Administrateur (commande svnadmin)

(75)

Mise ` a jour de la copie locale

svn update

(en ´etant pr´esent dans un r´epertoire sous SVN)

R´ecup´eration/synchronisation de la copie locale avec les derni`eres modifications sur le d´epˆot

Fusionne les donn´ees si n´ecessaire En cas d’´echec de la fusion,

un conflit est identifi´e

l’utilisateur doit choisir entre les modifications sur le d´epˆot et ses propres modifications

La mise `a jour peut n’ˆetre demand´ee pour qu’une partie de l’arborescence

Raccourci pour update: up svn up

(76)

Mise ` a jour de la copie locale

3 3

svn update svn update

modification différence

...

édition modification

différence ...

édition

Développeur (commande svn) Copie de travail

Développeur (commande svn) Copie de travail

Dépot SVN

Administrateur (commande svnadmin)

(77)

Mise ` a jour du d´ epˆ ot

svn commit -m "Message"

Mise `a jour du d´epˆot avec les modifications locales

Possibilit´e d’´echec si le d´epˆot a ´et´e mis `a jour depuis le dernier svn update

Il est n´ecessaire de faire une nouvelle mise `a jour

Option -m: sp´ecification d’un message associ´e `a l’op´eration effectu´ee (idemsvn import)

(78)

Mise ` a jour du d´ epˆ ot

4

4 svn commit

svn commit

modification différence

...

édition modification

différence ...

édition

Développeur (commande svn) Copie de travail

Développeur (commande svn) Copie de travail

Dépot SVN

Administrateur (commande svnadmin)

(79)

Manipulation de l’arborescence

... sous SVN

(en ´etant pr´esent dans un r´epertoire sous SVN) Ajout de fichier : svn add <fichier>

Ajout de r´epertoire : svn mkdir <fichier>

D´eplacement/renommage de fichier : svn mv <fichier> <nouveau fichier Suppression de fichier ou de r´epertoire : svn rm <fichier>ousvn delete <fichier>

NB : Effectuer uncommitapr`es ces op´erations pour qu’elles soient effectives sur le d´epˆot

Attention: ne pas utiliser de commandes UNIX pour r´ealiser ces op´erations. SVN prend tout en charge (mˆeme sur la copie locale).

(80)

R´ esolution d’un conflit

Apparition possible d’un conflit lors d’un commitou d’un update

le statut est `aCpour les fichiers o`u un conflit est apparu R´esolution du conflit :

Editer du fichier local

les zones en conflit sont marqu´ees par

>>>>>>>>>>>>>>>

et

<<<<<<<<<<<<<<<

Faire un choix dans les modifications `a conserver et sauvegarder le fichier

Indiquer `a SVN que le conflit est r´esolu :

(81)

R´ esolution d’un conflit

Remarque

SVN propose la r´esolution des conflits (l’´edition des fichiers o`u se trouve un conflit) lors d’un commit

les modifications locales peuvent ˆetre abandonn´ees : svn revert <fichier>

(retour `a la derni`ere mise `a jour locale –COMMITTED)

(82)

Examen du d´ epˆ ot

Informations sur le d´epˆot : svn info

Liste des fichiers sur le d´epˆot : svn list (svn ls) Statut des fichiers : svn status

Diff´erences entre la copie locale et le d´epˆot : svn diff NB : Il est possible de mentionner des num´eros de version : svn diff -r 11:20 fichier.txt

Visualisation des logs : svn log

(83)

R´ evisions

num´eros de version

R´ealis´ees par groupe d’actions (modification de fichiers, manipulation de l’arborescence, etc.)

Num´ero de version : entier croissant `a chaque commit Un num´ero de version par fichier

Il existe des raccourcis :

HEAD: dernier num´ero de version sur le d´epˆot

BASE: dernier num´ero de version dans la copie locale (avant modification)

COMMITTED: num´ero de version pour laquelle une modification a ´et´e plac´ee sur le d´epˆot (COMMITTED<=BASE)

PREV: num´ero de version juste avantCOMMITTED (PREV =COMMITTED1)

(84)

Statut des fichiers

svn status

A: Il est pr´evu d’ajouter le fichier lors du prochaincommit D: Il est pr´evu de supprimer le fichier lors du prochaincommit U: Le fichier vient d’ˆetre mis `a jour

M: Le fichier de la copie locale a subi des modifications (par rapport au dernier update)

C: Le fichier contient des conflits (apparus lors de la dernier mise `a jour/fusion avec la version sur le d´epˆot)

G: Le fichier n’est pas int´egr´e au d´epˆot

?: Le fichier n’est pas int´egr´e au d´epˆot

!: Le fichier est incompl`ete ou absent

X: Le fichier n’est pas int´egr´e dans la copie de travail

(85)

Substitution de mots-cl´ es

Insertion dans les fichiers d’informations relatives aux r´evisions (num´eros de version, auteur, date, etc.)

Substitution lors des commit

Activation de la propri´et´e de substitution des mots-cl´es : svn propset svn:keywords "Id" fichier.txt Utilisation des mots-cl´es dans les fichiers ($Id$) Mots-cl´es disponibles :

Date(ouLastChangedDate) : date de la derni`ere r´evision sur le fichier

Revision:derni`ere r´evision sur le fichier

Author: Auteur de la derni`ere r´evision sur le fichier HeadURL: URL du fichier sur le d´epˆot

(86)

Cr´ eation d’une distribution

Copie d’une r´evision dans le r´epertoiretags

svn copy <depot>/trunk <depot>/tags/<release>

release est le nom de la distribution (par exemple version-1.2)

ATTENTION : les modifications restent possibles sur la distribution (`a ´eviter absolument !)

R´ecup´eration de la distribution : svn co <depot>/tags/<release>

Cr´eation d’une copie non-versionn´ee de la distribution : svn export <depot>/tags/<release>

(87)

Cr´ eation d’un patch

Objectif : transmettre des modifications en dehors du d´epˆot SVN

Modification de sources d´ej`a publi´ees

Cr´eation du patch : g´en´eration d’un fichier des diff´erences entre deux r´evisions du d´epˆot (fichier ou arborescence) Exemple sur un fichier :

svn diff -r 12:13 fichier > fichier-r12-13.patch Application du patch sur une arborescence quelconque : (la o`u se trouve le fichier `apatcher)

patch < fichier-r12-13.patch

(88)

Cr´ eation d’une branche

Objectif : R´ealiser des d´eveloppements ou des corrections en parall`ele au tronc (trunk)

Branche : copie d’une r´evision de l’arborescence principale (trunk)

svn copy <depot>/trunk <depot>/branches/<feature>

feature est l’identifiant de la branche cr´e´ee (par exemple, ma-branche)

Utilisation :

svn co <depot>/branches/<feature>

Puis travail sur la branche de la mˆeme mani`ere que le tronc Possibilit´e de fusion des modifications de la branche dans le

(89)

Fusion des branches

Rapatriement des modifications dans le tronc (ou dans un autre branche) et inversement

svn merge -rRi <depot>/branches/<feature>

Application de la r´evision Ri de la branche feature`a la copie locale courante (tronc ou autre branche)

NB : il est fortement conseiller de commencer par examiner les diff´erences :

svn diff -rRi <depot>/branches/<feature>

(90)

Conseils et bonnes pratiques

Effectuer des mises `a jour (commit) r´eguli`eres de la copie locale (limite les possibilit´es de conflits)

Pr´ef´erer les mises `a jour (update) de l’ensemble de l’arborescence Toujours r´ealiser unupdateavant uncommit

ealiser descommitcorrespondant `a un ensemble coh´erent de modifications

Toujours compiler et tester les sources avant de r´ealiser un commit erifier que les fusions sont r´ealis´ees correctement

Ne pas prendre `a la l´eg`ere les conflits

Ne pas utiliser les commandes syst`eme pour les modifications d’arborescence (utilisersvn add|mv|rm)

Documenter les commits avec des messages explicites (accessibles ensuite avecsvn log)

Les messages de commit peuvent ˆetre envoy´es automatiquement `a toutes

(91)

Sources des transparents

Georges-Etienne Legendre, F´elix-Antoine Bourbonnais Jean-Fran¸cois Mari, IUT Charlemagne, dpt. informatique Didier DONSEZ, Universit´e Joseph Fourier - Grenoble 1, PolyTech’Grenoble LIG/ADELE

Nicolas Hernandez, IUT de Nantes - D´epartement Informatique

Références

Documents relatifs

Le système de gestion de fichiers (SGF) est la partie la plus visible d’un système d’exploitation qui se charge de gérer le stockage et la manipulation de fichiers (sur une unité

Le système de gestion de fichiers (SGF) est la partie la plus visible d’un système d’exploitation qui se charge de gérer le stockage et la manipulation de fichiers (sur une unité

Il répertorie tous les produits de Vacances &amp; Aventure. Vous pouvez afficher ce rapport dans Impromptu et dans un navigateur

Déplacer un fichier ou un dossier ou un groupe de fichiers d’un dossier dans un autre : Sélectionner tous les dossiers de l’année et les glisser dans le dossier « 2018_2019

Si le fichier contient plus de 10 blocs (soit plus de 5120 octets), la 11 ème pointe sur un bloc qui contient les adresses de 128 blocs suivant : on parle alors de simple

¦ Étape suivante : on ouvre à nou- veau le fichier, en mode ajout (avec a ) ce qui permet d’écrire dedans en ajoutant les données à la fin du fi- chier existant. On lit chaque

$ cp toto /tmp/ Copie le fichier local toto dans /tmp (toujours nomm´ e toto ). $ cp toto /tmp/tata Copie le fichier local toto dans /tmp en le nom-

d'informations : l'adresse de l'endroit de la mémoire-tampon où se trouve le fichier, la position de la tête de lecture, le mode d'accès au fichier (lecture ou écriture)