149
DevOps Gestionnaires de versions Thomas Ropars [email protected] 2020 1

DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

DevOpsGestionnaires de versions

Thomas Ropars

[email protected]

2020

1

Page 2: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des depots distants

2

Page 3: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des depots distants

3

Page 4: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Motivations

Une equipe de developpeurs participe a la realisation d’uneapplication:

• Comment conserver un historique?

• Comment revenir en arriere?

• Comment travailler a plusieurs en parallele sur le meme code?

• Comment gerer plusieurs versions du code a la fois?

• Comment savoir ce qui a ete modifie et par qui (et pourquoi)?

Utilisation d’un VCS (Version Control Software)

4

Page 5: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Motivations

Une equipe de developpeurs participe a la realisation d’uneapplication:

• Comment conserver un historique?

• Comment revenir en arriere?

• Comment travailler a plusieurs en parallele sur le meme code?

• Comment gerer plusieurs versions du code a la fois?

• Comment savoir ce qui a ete modifie et par qui (et pourquoi)?

Utilisation d’un VCS (Version Control Software)

4

Page 6: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Ce qu’on y stocke

Essentiellement des fichiers texte.

Ce qu’on y met

• Fichier sources (.java, .c, .html, etc)

• Certains fichiers binaires non derives des sources (images)

• Fichiers de configuration, compilation (Makefile)

Ce qu’on n’y met pas

• Fichiers temporaires

• Fichiers generes

5

Page 7: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

diff & patch

Un VCS repose sur un mecanisme permettant de calculer lesdifferences entre 2 versions d’un fichier.

diff• Comparaison de fichiers ligne par ligne

• Indique les lignes ajoutees ou supprimees

• Peut ignorer les casses, les tabulations, les espaces

patch

• Utilise la difference entre deux fichiers pour passer d’uneversion a l’autre

6

Page 8: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

diff & patch

Illustration• Sauvegarder dans un patch les modifications d’un fichier

$ diff toto.c toto-orig.c > correction.patch

• Appliquer le patch a une autre version du fichier$ patch -p 0 mytoto.c < correction.patch

diff et patch peuvent etre appliques a une arborescence defichiers

7

Page 9: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

La notion d’historique

En plus de calculer la difference entre deux versions d’un fichier, ilfaut gerer un historique des diffs:

• L’historique est un graphe oriente acyclique compose d’unensemble de versions pouvant etre recalculees a partir desversions adjacentes en appliquant les patchs modelises par lesarcs sortants

A B C

D E

8

Page 10: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Historique: les branches

La branche de la version vi d’un historique est le sous-graphecompose de l’ensemble des versions accessibles depuis vi .

A B C

D E

9

Page 11: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Historique: les branches

La branche de la version vi d’un historique est le sous-graphecompose de l’ensemble des versions accessibles depuis vi .

A B C

D E

9

Page 12: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Historique: la branche principale

La branche principale de l’historique est la branche issue de laderniere version stable.

A B C

D E

10

Page 13: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Historique: la branche principale

La branche principale de l’historique est la branche issue de laderniere version stable.

A B C

D E

10

Page 14: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Historique: les merges

On appelle merge toute version ayant un degre sortant strictementsuperieur a 1. Cette version correspond alors a la fusion des patchsde plusieurs branches.

A B C D

E F

G H

11

Page 15: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Historique: les merges

On appelle merge toute version ayant un degre sortant strictementsuperieur a 1. Cette version correspond alors a la fusion des patchsde plusieurs branches.

A B C D

E F

G H

11

Page 16: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Gestion des acces concurrents

Gestion pessimiste

• Un seul contributeur a acces en ecriture a un fichier

• Pas de conflits

• Pas pratique

Gestion optimiste

• Chaque developpeur peut modifier sa copie locale en parallele• Risques de conflits

I Modifications concurrentes de la meme zone de texte

• Tous les VCS actuels ont une approche optimiste

12

Page 17: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modele centralise/distribue

Modele centralise• Un serveur gere l’integralite des version (le depot)

• Les utilisateurs y ajoutent leurs modifications

• Les utilisateurs y recuperent les modifications des autres

Modele distribue• Chaque utilisateur possede un depot entier

• Les depots peuvent s’echanger des modifications

13

Page 18: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modele centralise/distribue

Modele centralise• Un serveur gere l’integralite des version (le depot)

• Les utilisateurs y ajoutent leurs modifications

• Les utilisateurs y recuperent les modifications des autres

Modele distribue• Chaque utilisateur possede un depot entier

• Les depots peuvent s’echanger des modifications

13

Page 19: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des depots distants

14

Page 20: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Avant de commencer . . .

Warning

Remarque introductive, presentation de GIT @ Google par LinusTorvalds, 2007.

[Linus] is a guy who delights being cruel to people. Hislatest cruel act is to create a revision control system whichis expressly designed to make you feel less intelligent thanyou thought you were. [...] So Linus is here today toexplain to us why on earth he wrote a software tool which,eh, only he is smart enough to know how to use.

Il existe des dizaines de documentations/tutoriels disponibles enligne.

• La meilleure chose est d’apprendre par vous meme.

15

Page 21: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Fonde sur une fonction de hachage

SHA-1• Secure Hash Algorithm (cryptographie)• Genere une empreinte des donnees d’entree

I Contenu du fichierI en-tete

• Proprietes:I Hash de 160 bitsI Tres faible probabilite de collision

• Identifie de maniere unique chaque objet

Exemple$ echo a > toto

$ sha1sum toto

3f786850e387550fdab836ed7e6dc881de23001b toto

$ echo b >> toto

05dec960e24d918b8a73a1c53bcbbaac2ee5c2e0 toto

16

Page 22: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Les objets dans Git

• Blobs

• Tree

• Commit

• Tag

Content-adressable file system

• Chaque objet est accessible a partir de sa cle.

17

Page 23: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Blob

DefinitionOn appelle Blob, l’element de base qui permet de stocker lecontenu d’un fichier.

• Chaque Blob est identifie de maniere unique par sa cle

• A chaque revision du fichier correspond un nouveau Blob• Le Blob ne depend pas du nom ou de l’emplacement :

I Si un fichier est renomme, pas de nouveau BlobI Si un fichier est deplace, pas de nouveau Blob

• Le contenu du Blob est compresse avec zlib. Il contient:I Le type d’objet (blob)I La taille du fichier initialI Le contenu du fichier

18

Page 24: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Tree

DefinitionUn Tree stocke la liste des fichiers d’un repertoire.

• Un Tree est un ensemble de pointeurs vers des Blobs etd’autres Trees.

• Un Tree associe un nom de fichier (resp. repertoire) a chacundes pointeurs de Blobs (resp. Trees).

• Un ensemble de Trees permet de decrire l’etat d’unehierarchie de dossiers a un moment donne.

19

Page 25: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Tree et Blob: Exemple

abcd 1234

tree

tree

zzzz

c09a. . . f371. . .

654b. . .

a00a. . .

cd82. . .

file1.txt bla.txt

otherDir

z.txt

20

Page 26: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Tree et Blob: Exemple

abcd 1234

tree

tree

zzzz

c09a. . . f371. . .

654b. . .

a00a. . .

cd82. . .

file1.txt bla.txt

otherDir

z.txt

20

Page 27: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Tree et Blob: Exemple

abcd 1234

tree

tree

zzzz

c09a. . . f371. . .

654b. . .

a00a. . .

cd82. . .

file1.txt bla.txt

otherDir

z.txt

20

Page 28: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Commit

DefinitionUn Commit stocke l’etat d’une partie du depot a un instant donne.Il contient :

• Un pointeur vers un Tree (arbre racine) dont on souhaitesauver l’etat.

• Un pointeur vers un ou plusieurs autres Commits pourconstituer un historique.

• Les informations sur l’auteur du Commit.

• Une description sous forme d’une chaıne de caracteres.

21

Page 29: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Exemple avec Commit

abcd 1234

tree

tree

zzzz

commit 1

c09a. . . f371. . .

654b. . .

a00a. . .

cd82. . .

89ad. . .

file1.txt bla.txt

otherDir

z.txt

22

Page 30: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Exemple avec Commit: modification de file1.txt

abcd 1234ABcd

tree

tree

zzzz

commit 1treecommit 2

c09a. . . f371. . .

654b. . .

a00a. . .

cd82. . .

89ad. . .

3321. . .

d42f. . .b557. . .

file1.txt b

la.txt

otherDir

z.txt

file1.txt bla.txt

otherDir

23

Page 31: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Exemple avec Commit: modification de file1.txt

abcd 1234ABcd

tree

tree

zzzz

commit 1treecommit 2

c09a. . . f371. . .

654b. . .

a00a. . .

cd82. . .

89ad. . .

3321. . .

d42f. . .b557. . .

file1.txt b

la.txt

otherDir

z.txt

file1.txt bla.txt

otherDir

23

Page 32: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Exemple avec Commit: modification de file1.txt

abcd 1234ABcd

tree

tree

zzzz

commit 1treecommit 2

c09a. . . f371. . .

654b. . .

a00a. . .

cd82. . .

89ad. . .

3321. . .

d42f. . .b557. . .

file1.txt b

la.txt

otherDir

z.txt

file1.txt bla.txt

otherDir

23

Page 33: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Les Tags

DefinitionUn Tag permet d’identifier un des objets precedents a l’aide d’unnom.

• Il contient un pointeur vers un Blob, un Tree ou un Commit.

24

Page 34: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des depots distants

25

Page 35: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Les commandes

Git est un ensemble de commandes. Les commandes sont de laforme:

git commande options

Exemple

git add file1.txt

26

Page 36: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Creation d’un depot

Creation d’un depot serveur

$ mkdir projet.git

$ cd projet.git

$ git --bare init

• Pas de repertoire xxx/.git mais directement un xxx.git/

• Ne contient pas les fichiers versionnes mais juste l’historique

• A cloner pour travailler dessus

27

Page 37: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Creation d’un depot

Initialisation d’un depot

$ cd myproject

$ git init

$ git add .

$ git commit -m ’initial commit’

$ git remote add origin git@gitserver:/XX/XX/project.git

$ git push origin master

• Creer un repertoire local myproject pour stocker notreversion du projet.

• Associer le depot local avec le depot distant

• Envoyer l’etat initial du depot vers le serveur

• A partir de ce moment, tout le monde peut obtenir sa copielocale du depot en utilisant git clone

28

Page 38: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Cloner un depot existant

Tres souvent, un depot existe deja. On veut alors recuperer unecopie de ce depot.

Cloner un depot

$ git clone URL

• Cree une copie locale du depot entier.• L’URL peut etre de la forme:

I file://./myproject/project.gitI http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-

2.6.gitI git://github.com/schacon/grit.git

29

Page 39: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Le cycle de vie d’un fichier

Non versionneIndexe

(Staged)Modifie A jour

Versionne

git add <file> git add <file> edit <file>

git commit <file>

git reset HEAD git checkout

30

Page 40: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Le cycle de vie d’un fichier

Non versionneIndexe

(Staged)Modifie A jour

Versionne

git add <file> git add <file> edit <file>

git commit <file>

git reset HEAD git checkout

30

Page 41: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Le cycle de vie d’un fichier

Non versionneIndexe

(Staged)Modifie A jour

Versionne

git add <file> git add <file> edit <file>

git commit <file>

git reset HEAD git checkout

30

Page 42: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Le cycle de vie d’un fichier

Non versionneIndexe

(Staged)Modifie A jour

Versionne

git add <file> git add <file> edit <file>

git commit <file>

git reset HEAD git checkout

30

Page 43: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Le cycle de vie d’un fichier

Non versionneIndexe

(Staged)Modifie A jour

Versionne

git add <file> git add <file> edit <file>

git commit <file>

git reset HEAD git checkout

30

Page 44: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Le cycle de vie d’un fichier

Non versionneIndexe

(Staged)Modifie A jour

Versionne

git add <file> git add <file> edit <file>

git commit <file>

git reset HEAD git checkout

30

Page 45: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Quelques commandes

add : Ajoute dans l’index un fichier a commiter dans sonetat actuel.

commit : enregistre dans le depot local les modifications quiont ete ajoutees dans l’index par une commande add

reset HEAD : supprime la reference d’un fichier de l’index ajoutepar une commande add.

L’index est aussi appele staging area.

Souvent on veut simplement commiter toutes les modifications encours (= fichiers de l’index + fichiers modifies):

$ git commit -a

31

Page 46: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Exemple de commit

Commit

$ echo "coucou" >hello.txt

$ git add hello.txt

$ git commit -m "description du commit"

En l’absence de message decrivant le commit, un fichier decrivantle commit est ouvert, vous invitant a completer la description.

Selectionnez votre editeur favori

$ git config --global core.editor "emacs"

32

Page 47: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Etat courant de votre repertoire de travail

$ git status

• Permet de connaıtre l’etat courant de l’index

I Les modifications indexeesI Les modifications non indexeesI Les fichiers non versionnes

• Git vous indique meme comment effectuer les actions principales

I CommiterI Ajouter des fichiers a l’indexI Annuler des modifications

33

Page 48: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Les branches

Rappel

La branche de la version vi d’un historique est le sous-graphecompose de l’ensemble des versions accessibles depuis vi .

Dans Git• Une branche est un pointeur sur un commit

• Chaque commit pointe vers son predecesseur

• La variable HEAD pointe sur la branche sur laquelle ontravaille actuellement.

34

Page 49: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Branche : les commandes.

branch : liste les branches avec une * pour la branche active.branch <nom> : crée une nouvelle branche <nom>.branch -m : permet de renommer une branche.branch -d : permet de supprimer une branche.checkout : change (ou/et crée) de branche active.

show-branch : affiche les branches et leurs commits.

Exemple

$ git branch* master

$ git branch maBranche$ git branch

maBranche* master

$ git checkout maBranche$ git branch

* maBranchemaster

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 45 / 87

Page 50: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Les merges

$ git checkout brancheDestination

$ git merge brangeSource

• Cree un commit qui a pour parent les deux branches

• La branche courante avance a ce commit

• La source ne bouge pas, mais devient un fils du nouveau commit

35

Page 51: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Branche : structure interne des commits.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

touch fichier1.txtlsdir fichier1.txt foo.txt

git add fichier1.txtgit commit -m "Add fichier1.txt"

git checkout masterlsdir foo.txt

touch fichier2.txtgit add fichier2.txtgit commit -m "Add fichier2.txt"

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

headmaBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 46 / 87

Page 52: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Branche : structure interne des commits.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

touch fichier1.txtlsdir fichier1.txt foo.txt

git add fichier1.txtgit commit -m "Add fichier1.txt"

git checkout masterlsdir foo.txt

touch fichier2.txtgit add fichier2.txtgit commit -m "Add fichier2.txt"

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

headmaBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 46 / 87

Page 53: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Branche : structure interne des commits.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

touch fichier1.txtlsdir fichier1.txt foo.txt

git add fichier1.txtgit commit -m "Add fichier1.txt"

git checkout masterlsdir foo.txt

touch fichier2.txtgit add fichier2.txtgit commit -m "Add fichier2.txt"

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

head

maBranche

headmaBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 46 / 87

Page 54: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Branche : structure interne des commits.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

touch fichier1.txtlsdir fichier1.txt foo.txt

git add fichier1.txtgit commit -m "Add fichier1.txt"

git checkout masterlsdir foo.txt

touch fichier2.txtgit add fichier2.txtgit commit -m "Add fichier2.txt"

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

head

maBranche

head

maBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 46 / 87

Page 55: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Branche : structure interne des commits.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

touch fichier1.txtlsdir fichier1.txt foo.txt

git add fichier1.txtgit commit -m "Add fichier1.txt"

git checkout masterlsdir foo.txt

touch fichier2.txtgit add fichier2.txtgit commit -m "Add fichier2.txt"

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

head

maBranche

headmaBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 46 / 87

Page 56: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Branche : structure interne des commits.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

touch fichier1.txtlsdir fichier1.txt foo.txt

git add fichier1.txtgit commit -m "Add fichier1.txt"

git checkout masterlsdir foo.txt

touch fichier2.txtgit add fichier2.txtgit commit -m "Add fichier2.txt"

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

headmaBranche

head

master

head

maBranchemaster

head

headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 46 / 87

Page 57: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge : exemple sur deux branches distinctes.

lsdir fichier2.txt foo.txt

git checkout maBranchelsdir fichier1.txt foo.txt

echo "titi" > fichier1.txtgit commit -am "Modiffichier1.txt"

git checkout mastergit merge maBranchelsdir fichier1.txt fichier2.txt

foo.txt

git branch -d maBranche

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

headmaBranche

head

master

head

maBranchemaster

head

head

maBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 49 / 87

Page 58: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge : exemple sur deux branches distinctes.

lsdir fichier2.txt foo.txt

git checkout maBranchelsdir fichier1.txt foo.txt

echo "titi" > fichier1.txtgit commit -am "Modiffichier1.txt"

git checkout master

git merge maBranchelsdir fichier1.txt fichier2.txt

foo.txt

git branch -d maBranche

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

headmaBranche

head

master

head

maBranche

master

head

head

maBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 49 / 87

Page 59: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge : exemple sur deux branches distinctes.

lsdir fichier2.txt foo.txt

git checkout maBranchelsdir fichier1.txt foo.txt

echo "titi" > fichier1.txtgit commit -am "Modiffichier1.txt"

git checkout mastergit merge maBranchelsdir fichier1.txt fichier2.txt

foo.txt

git branch -d maBranche

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

headmaBranche

head

master

head

maBranchemaster

head head

maBranche

head

master

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 49 / 87

Page 60: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge : exemple sur deux branches distinctes.

lsdir fichier2.txt foo.txt

git checkout maBranchelsdir fichier1.txt foo.txt

echo "titi" > fichier1.txtgit commit -am "Modiffichier1.txt"

git checkout mastergit merge maBranchelsdir fichier1.txt fichier2.txt

foo.txt

git branch -d maBranche

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

headmaBranche

head

master

head

maBranchemaster

head headmaBranche

head

master

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 49 / 87

Page 61: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Identifier des commits

• Le dernier commit de la branche courante ou d’une autreI HEADI maBranche

• L’avant dernier et les precedentsI HEADˆ, mabrancheˆˆ, . . .I HEAD∼3, mabranche∼12, . . .

• D’autres manieresI HEAD@yesterdayI [email protected]

36

Page 62: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Rebase

• Autre maniere de fusionner 2 branches

• Fusionne entierement la branche source dans la branchedestination

• Permet de simplifier l’historique

• Ne jamais rebaser des commits qui ont deja ete poussessur un depot public

37

Page 63: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Rebase vs Merge.

Commit 1

Commit 2

Commit 3

Commit 5

Commit 7

Commit 4

Commit 6

≈ Commit 3

≈ Commit 5

master maBranche

head

maBranche

headmaBranche

head

Commit 1

Commit 2

Commit 3

Commit 5

Commit 7

Commit 4

Commit 6

≈ Commit 3

≈ Commit 5

master maBranche

head

maBranche

headmaBranche

head

git checkout maBranchegit merge master

git checkout maBranchegit rebase master

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 51 / 87

Page 64: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Rebase vs Merge.

Commit 1

Commit 2

Commit 3

Commit 5

Commit 7

Commit 4

Commit 6

≈ Commit 3

≈ Commit 5

master

maBranche

head

maBranche

head

maBranche

head

Commit 1

Commit 2

Commit 3

Commit 5

Commit 7

Commit 4

Commit 6

≈ Commit 3

≈ Commit 5

master

maBranche

headmaBranche

head

maBranche

head

git checkout maBranchegit merge master

git checkout maBranchegit rebase master

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 51 / 87

Page 65: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Revenir en arriere

Cas de modifications non commitees• Restaurer mon fichier dans la derniere version de l’index:

git checkout -- monfichier

I Utilisation de “--”: specifie que monfichier designe unfichier et pas une branche.

• Restaurer mon fichier dans la derniere version commitee:

git checkout HEAD monfichier

• Restaure tous les fichiers du repertoire courant:

git checkout .

Regarder aussi la nouvelle commande recement ajoutee: git

restore.

38

Page 66: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Revenir en arriere

Cas de modifications commiteesTrois commandes disponibles:

amend : modifier le dernier commit

• Ajoute des fichiers au commit• Changer le message de commit

revert : annuler un commit par un autre commit

reset : retablir la situation d’un ancien commit

Si l’erreur a ete rendue publique, la seule bonne pratique estrevert.

39

Page 67: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Amend : modification du dernier commit.

lsfoo.txt dir

touch bar.txtgit commit -m "Ajou d’un fichier."

git add bar.txt

git commit --amend -m "Ajout d’unfichier."

45463

7126f

a4407

15e12

4a439 4a43925b06

master

head

master

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 55 / 87

Page 68: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Amend : modification du dernier commit.

lsfoo.txt dir

touch bar.txtgit commit -m "Ajou d’un fichier."

git add bar.txt

git commit --amend -m "Ajout d’unfichier."

45463

7126f

a4407

15e12

4a439

4a43925b06

master

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 55 / 87

Page 69: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Amend : modification du dernier commit.

lsfoo.txt dir

touch bar.txtgit commit -m "Ajou d’un fichier."

git add bar.txt

git commit --amend -m "Ajout d’unfichier."

45463

7126f

a4407

15e12

4a439 4a43925b06master

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 55 / 87

Page 70: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Git revert : annulation par commit.

git branch mastercat fichier1.txtPremiere version de F1

cat fichier2.txtPremiere version de F2

echo "Deuxieme version de F1" > fichier1.txtgit add fichier1.txtgit commit -m "Add fichier1.txt"

echo "Deuxieme version de F2" > fichier2.txtgit add fichier2.txtgit commit -m "Add fichier2.txt"

git revert HEADˆcat fichier1.txtPremiere version de F1

cat fichier2.txtDeuxieme version de F2

Commit 1

Commit 2

Commit 3

Commit 4

Commit 5

Commit 4

master

head

master

headmaster

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 56 / 87

Page 71: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Git revert : annulation par commit.

git branch mastercat fichier1.txtPremiere version de F1

cat fichier2.txtPremiere version de F2

echo "Deuxieme version de F1" > fichier1.txtgit add fichier1.txtgit commit -m "Add fichier1.txt"

echo "Deuxieme version de F2" > fichier2.txtgit add fichier2.txtgit commit -m "Add fichier2.txt"

git revert HEADˆcat fichier1.txtPremiere version de F1

cat fichier2.txtDeuxieme version de F2

Commit 1

Commit 2

Commit 3

Commit 4

Commit 5

Commit 4

master

headmaster

head

master

head

master

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 56 / 87

Page 72: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Git revert : annulation par commit.

git branch mastercat fichier1.txtPremiere version de F1

cat fichier2.txtPremiere version de F2

echo "Deuxieme version de F1" > fichier1.txtgit add fichier1.txtgit commit -m "Add fichier1.txt"

echo "Deuxieme version de F2" > fichier2.txtgit add fichier2.txtgit commit -m "Add fichier2.txt"

git revert HEADˆcat fichier1.txtPremiere version de F1

cat fichier2.txtDeuxieme version de F2

Commit 1

Commit 2

Commit 3

Commit 4

Commit 5

Commit 4

master

headmaster

headmaster

head

master

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 56 / 87

Page 73: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

La commande reset

• Annuler des ajouts dans l’index

git reset monfichier

• Restaurer un ancien commit (mais en conservant toutes lesmodifications des fichiers et l’index)

git reset --soft commitID

• Restaurer un ancien commit et l’index (mais en conservant toutesles modifications des fichiers)

git reset commitID

• Restaurer un ancien commit, l’index, et le contenu des fichierscorrespondants

git reset --hard commitID

40

Page 74: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Les différents type de reset.

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

bar.txt v2

Tree676e...

Tree9a99...

dir

Blob8983...

bar.txt

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

bar.txt v2

Tree676e...

Tree9a99...

dir

Blob8983...

bar.txt

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

bar.txt v2

Tree676e...

Tree9a99...

dir

Blob8983...

bar.txt

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

ls -R.: foo.txtdir: bar.txt

git reset --hard 4546ls -R.: foo.txt

ls -R.: foo.txtdir: bar.txt

git reset 4546ls -R.: foo.txtdir: bar.txt

ls -R.: foo.txtdir: bar.txt

git reset --soft 4546ls -R.: foo.txtdir: bar.txt

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 58 / 87

Page 75: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Les différents type de reset.

Commit4546...

CommitnotVisible2...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

Tree676e...

Tree9a99...

dir

Blob8983...

CommitnotVisible3...

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

bar.txt v2

Tree676e...

Tree9a99...

dir

Blob8983...

bar.txt

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

bar.txt v2

Tree676e...

Tree9a99...

dir

Blob8983...

bar.txt

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

ls -R.: foo.txtdir: bar.txt

git reset --hard 4546ls -R.: foo.txt

ls -R.: foo.txtdir: bar.txt

git reset 4546ls -R.: foo.txtdir: bar.txt

ls -R.: foo.txtdir: bar.txt

git reset --soft 4546ls -R.: foo.txtdir: bar.txt

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 58 / 87

Page 76: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Les différents type de reset.

Commit4546...

CommitnotVisible2...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

Tree676e...

Tree9a99...

dir

Blob8983...

CommitnotVisible3...

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

Commit4546...

CommitnotVisible2...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

Tree676e...

Tree9a99...

dir

Blob8983...

CommitnotVisible3...

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

bar.txt v2

Tree676e...

Tree9a99...

dir

Blob8983...

bar.txt

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

ls -R.: foo.txtdir: bar.txt

git reset --hard 4546ls -R.: foo.txt

ls -R.: foo.txtdir: bar.txt

git reset 4546ls -R.: foo.txtdir: bar.txt

ls -R.: foo.txtdir: bar.txt

git reset --soft 4546ls -R.: foo.txtdir: bar.txt

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 58 / 87

Page 77: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Les différents type de reset.

Commit4546...

CommitnotVisible2...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

Tree676e...

Tree9a99...

dir

Blob8983...

CommitnotVisible3...

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

Commit4546...

CommitnotVisible2...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

Tree676e...

Tree9a99...

dir

Blob8983...

CommitnotVisible3...

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible1...

Treebc45...

dir

Blob4f55...

bar.txt v2

Tree676e...

Tree9a99...

dir

Blob8983...

Tree4ab5...

Blob7a35...

foo.txt

master

head

master

head

Index

ls -R.: foo.txtdir: bar.txt

git reset --hard 4546ls -R.: foo.txt

ls -R.: foo.txtdir: bar.txt

git reset 4546ls -R.: foo.txtdir: bar.txt

ls -R.: foo.txtdir: bar.txt

git reset --soft 4546ls -R.: foo.txtdir: bar.txt

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 58 / 87

Page 78: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Consulter l’historique des commits

Affiche l’historique des commits en remontant a partir decommitID.

git log commitID

• Par defaut, commitID est HEAD

De multiples possibilites. On peut voir:

• le log entre 2 versions

• le log d’un fichier

• le log sur une duree

• . . .

41

Page 79: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Consulter des changements

Afficher les details sur un commit:

git show commitID

git show commitID -- monfichier monrepertoire

Afficher les differences entre des versions:

git diff commitID1..commitID2 -- monfichier monrepertoire

Savoir qui a modifie un fichier (voir une ligne):

git blame file.txt

git blame L80,+20 file.txt

42

Page 80: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des depots distants

43

Page 81: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Configurer git

• Commencer par renseigner son nom et email

$ git config --global user.name "Thomas Ropars"

$ git config --global user.email [email protected]

44

Page 82: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modifications d’un historique public

Regle generale

Ne jamais reecrire un historique publiquement accessible

• Attention a l’utilisation des commandes rebase et reset

• Ne pas utiliser push --force a moins de vraiment savoir ceque vous faıtes

• Nettoyer son historique avant de le pousser si confus

45

Page 83: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Ignorer des fichiers: gitignore

gitignore specifie les fichiers non versionnes que git doit ignorer:

• Les fichiers deja versionnes ne sont pas affectes.

• Definition a l’aide de patterns

Les fichiers gitignore:• Des fichiers .gitignore peuvent etre places n’importe ou dans

la hierarchie.I Les regles des fichiers plus bas dans la hierarchie se substituent

aux regles definies plus haut.• Priorites: Meme repertoire, parent, . . . , racine du depot

I Ces fichiers .gitignore sont a ajouter au depot

• $GIT DIR/info/excludeI Regles specifiques a un utilisateur

• Fichier specifie par l’option de configuration core.excludesFiledans (homedir)/.gitconfig

46

Page 84: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Ignorer des fichiers: gitignore

Definir des regles

# a comment - this is ignored

# no .a files

*.a

# but do track lib.a, even though you’re ignoring .a files above

!lib.a

# only ignore the root TODO file, not subdir/TODO

/TODO

# ignore all files in the build/ directory

build/

# ignore doc/notes.txt, but not doc/server/arch.txt

doc/*.txt

47

Page 85: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Messages de commit

Le plus important

Decrire quoi et pourquoi et pas comment

• Ne pas decrire les modifications qui sont faites (informationsdisponibles avec un diff)

• Decrire les fonctionnalites ajoutees

Exemple

• Bad: Modifie la fonction f pour tester la variable a

• Good: Verifie les droits de l’utilisateur avant d’executerl’action X

48

Page 86: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Messages de commit

Bonnes pratiques pour le format des messages

• Separer le sujet du corps du message par une ligne videI Adapte a l’affichage des logs (git log --oneline; git

shortlog)

• Utiliser 50 caracteres max pour le sujetI Pas une limite reelleI Bon conseil a suivre pour conserver une historique lisible

• Commencer le sujet par une majuscule et ne pas terminer parun point

• Formuler les messages au present

49

Page 87: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Interface graphique

Quelque soit votre environnement de travail, il existe des interfacesgraphiques pour gerer vos projets:

• Avec git:I gitk: Visualisation de l’historiqueI git-gui: Interface pour la creation de commits

• Linux: gitg, giggle, . . .

• Windows, Mac: look herehttps://git-scm.com/download/guis

• Eclipse: EGit, . . .

50

Page 88: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des depots distants

51

Page 89: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Rappel

Modele centralise• Un serveur gere l’integralite des version (le depot)

• Les utilisateurs y ajoutent leurs modifications

• Les utilisateurs y recuperent les modifications des autres

Modele distribue• Chaque utilisateur possede un depot entier

• Les depots peuvent s’echanger des modifications

52

Page 90: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modele distribue

• Chaque client a l’ensemble des fichiers dans son depot localI Travailler off-lineI Changer de branche est rapide. On peut abuser des branches.

• Actions necessitant un acces au depot distantI Mise a jour du depot local depuis l’exterieurI L’envoi d’informations

• Le client peut versionner en local.

53

Page 91: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Branches distantes et branches locales

Un projet décentralisé possède deux types de branches :

DéfinitionOn appelle branche distante, une branche qui pointe sur desdépôts distants en lecture et/ou écriture. Ces dépôts distantspeuvent être référencés par une ou plusieurs personnes.

DéfinitionOn appelle branche locale, une branche propre au dépôt local.Pour être envoyées, les données d’une telle branche doivent êtrefusionnées avec une branche distante.

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 70 / 87

Page 92: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Fetch, Merge et Pull

fetch : Importe les commits d’un depot distant dans ledepot local.

• Utiliser merge pour importer les changementsdans une branche locale

pull : Fusionne les changements d’un depot distantdirectement dans une branche locale.

• Equivalent d’un fetch suivi d’un merge.• Peut etre configure pour utiliser rebase au lieu

de merge• Fetch permet d’observer les changements avant

de les integrer dans sa branche de travail

54

Page 93: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modele distribue

depot distant depot local

git merge

git commitgit push

git fetch

git pull

55

Page 94: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modele distribue

depot distant depot local

git merge

git commitgit push

git fetch

git pull

55

Page 95: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modele distribue

depot distant depot local

git merge

git commitgit push

git fetch

git pull

55

Page 96: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modele distribue

depot distant depot local

git merge

git commitgit push

git fetch

git pull

55

Page 97: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git initgit add ...git commit

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 98: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git clone <@serveur>

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 99: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git clone <@serveur>

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 100: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git commit

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 101: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git push origin

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 102: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git fetch origin

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 103: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git merge

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 104: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git commit

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 105: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git commit

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 106: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3

C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git push origin

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 107: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3

C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git fetch origin

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 108: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8

C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3

C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git merge origin

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 109: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git push origin

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 110: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git pull origin

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 111: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git checkout -b foo

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 112: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6

C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6C7C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git commit

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 113: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6

C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6

C7

C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git commit

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 114: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6

C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6

C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6C7

C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git push origin

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 115: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6

C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6C7

C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git push origin foo

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 116: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6C7

C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git pull origin

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 117: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6

C7

C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git pull origin

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 118: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6

C7

C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git branch bargit checkout bar

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 119: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6

C7

C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git commit

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 120: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Dépôts distants et gestion de la concurrence.

C1

C2

C2

C3

C8

C5

C4

C5

C6C7

orig

in/m

aste

r

mas

ter

foo

orig

in/fo

o

cont

rib/b

ar

C1

C2

C3C4

C5

C6C7

mas

ter

foo

C1

C2

C3

C8

C4

C4

C5

C6

C7

C7

orig

in/m

aste

r

mas

ter

orig

in/fo

o

bar

git remote add contrib git://...git fetchcontrib/bar

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 71 / 87

Page 121: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modeles de cooperation

• Un depot centralise (a la SVN) – mais avec les avantages desdepots locaux

• Un modele completement distribue: Un depot pour chaquedeveloppeur, chacun se synchronise chez les autres

• Le modele avec un gestionnaire d’integration

• Le modele dictateur et ses lieutenants (noyau linux)

56

Page 122: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modèle avec dépôt centralisé"Centralized Workflow."

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 74 / 87

Page 123: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modèle décentralisé avec dépôts publics."Cooperative and Decentralized Workflow."

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 75 / 87

Page 124: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modèle décentralisé avec dépôts publics."Cooperative and Decentralized Workflow."

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 75 / 87

Page 125: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modèle avec manager de dépôt"Integration-Manager Workflow."

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 76 / 87

Page 126: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modèle avec manager de dépôt"Integration-Manager Workflow."

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 76 / 87

Page 127: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modèle avec manager de dépôt"Integration-Manager Workflow."

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 76 / 87

Page 128: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modèle avec dictateur et lieutenants."Dictator and Lieutenants Workflow."

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 77 / 87

Page 129: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Modèle avec dictateur et lieutenants."Dictator and Lieutenants Workflow."

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 77 / 87

Page 130: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Quelques liens utiles

• https://git-scm.com/book/fr/v2

• http://julien.sopena.fr/enseignements/M2-SAR-Git/

cours/01-Git/01-Git.pdf

• https://www.kernel.org/pub/software/scm/git/docs/

giteveryday.html

• https://alexgirard.com/git-book/index.html

57

Page 131: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

References

• Notes de D. Donsez

• Notes de J. Sopena

• Notes de B. Goglin

• Notes de B. Florat

58

Page 132: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Plus de slides ...

59

Page 133: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Étude des objets générés par un exemple simple.

mkdir projectcd projectgit init

echo "toto" > foo.txtgit add foo.txt

git commit -m "Add foo.txt"

mkdir direcho "titi" > dir/bar.txtgit add dir/bar.txt

git commit -m "Add dir/bar.txt"

echo "tutu" » dir/bar.txtgit add dir/bar.txt

git commit -m "Modif dir/bar.txt"

master

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible...

Tree676e...

Tree4ab5...

Blob7a35...

foo.txt

head

master master

head

master

head

Index

Index Index

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 43 / 87

Page 134: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Étude des objets générés par un exemple simple.

mkdir projectcd projectgit init

echo "toto" > foo.txtgit add foo.txt

git commit -m "Add foo.txt"

mkdir direcho "titi" > dir/bar.txtgit add dir/bar.txt

git commit -m "Add dir/bar.txt"

echo "tutu" » dir/bar.txtgit add dir/bar.txt

git commit -m "Modif dir/bar.txt"

master

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible...

Tree676e...

Tree4ab5...

Blob7a35...

foo.txt

head

master master

head

master

head

Index

Index Index

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 43 / 87

Page 135: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Étude des objets générés par un exemple simple.

mkdir projectcd projectgit init

echo "toto" > foo.txtgit add foo.txt

git commit -m "Add foo.txt"

mkdir direcho "titi" > dir/bar.txtgit add dir/bar.txt

git commit -m "Add dir/bar.txt"

echo "tutu" » dir/bar.txtgit add dir/bar.txt

git commit -m "Modif dir/bar.txt"

master

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible...

Tree676e...

Tree4ab5...

Blob7a35...

foo.txt

head

master

master

head

master

head

Index

Index

Index

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 43 / 87

Page 136: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Étude des objets générés par un exemple simple.

mkdir projectcd projectgit init

echo "toto" > foo.txtgit add foo.txt

git commit -m "Add foo.txt"

mkdir direcho "titi" > dir/bar.txtgit add dir/bar.txt

git commit -m "Add dir/bar.txt"

echo "tutu" » dir/bar.txtgit add dir/bar.txt

git commit -m "Modif dir/bar.txt"

master

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible...

Tree676e...

Tree9a99...

dir

Blob8983...

bar.txt

Tree4ab5...

Blob7a35...

foo.txt

head

master

master

head

master

head

Index

Index

Index

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 43 / 87

Page 137: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Étude des objets générés par un exemple simple.

mkdir projectcd projectgit init

echo "toto" > foo.txtgit add foo.txt

git commit -m "Add foo.txt"

mkdir direcho "titi" > dir/bar.txtgit add dir/bar.txt

git commit -m "Add dir/bar.txt"

echo "tutu" » dir/bar.txtgit add dir/bar.txt

git commit -m "Modif dir/bar.txt"

master

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible...

Tree676e...

Tree9a99...

dir

Blob8983...

bar.txt

Tree4ab5...

Blob7a35...

foo.txt

head

master

master

head

master

head

Index Index

Index

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 43 / 87

Page 138: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Étude des objets générés par un exemple simple.

mkdir projectcd projectgit init

echo "toto" > foo.txtgit add foo.txt

git commit -m "Add foo.txt"

mkdir direcho "titi" > dir/bar.txtgit add dir/bar.txt

git commit -m "Add dir/bar.txt"

echo "tutu" » dir/bar.txtgit add dir/bar.txt

git commit -m "Modif dir/bar.txt"

master

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible...

Treebc45...

dir

Blob4f55...

bar.txt v2

Tree676e...

Tree9a99...

dir

Blob8983...

bar.txt

Tree4ab5...

Blob7a35...

foo.txt

head

master

master

head

master

head

Index Index

Index

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 43 / 87

Page 139: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Étude des objets générés par un exemple simple.

mkdir projectcd projectgit init

echo "toto" > foo.txtgit add foo.txt

git commit -m "Add foo.txt"

mkdir direcho "titi" > dir/bar.txtgit add dir/bar.txt

git commit -m "Add dir/bar.txt"

echo "tutu" » dir/bar.txtgit add dir/bar.txt

git commit -m "Modif dir/bar.txt"

master

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible...

Treebc45...

dir

Blob4f55...

bar.txt v2

Tree676e...

Tree9a99...

dir

Blob8983...

bar.txt

Tree4ab5...

Blob7a35...

foo.txt

head

master master

head

master

head

Index Index Index

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 43 / 87

Page 140: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Étude des objets générés par un exemple simple.

mkdir projectcd projectgit init

echo "toto" > foo.txtgit add foo.txt

git commit -m "Add foo.txt"

mkdir direcho "titi" > dir/bar.txtgit add dir/bar.txt

git commit -m "Add dir/bar.txt"

echo "tutu" » dir/bar.txtgit add dir/bar.txt

git commit -m "Modif dir/bar.txt"

master

Commit4546...

Commit7126...

Commita440...

Tree6994...

CommitnotVisible...

Treebc45...

dir

Blob4f55...

bar.txt v2

Tree676e...

Tree9a99...

dir

Blob8983...

bar.txt

Tree4ab5...

Blob7a35...

foo.txt

head

master master

head

master

head

Index Index Index

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 43 / 87

Page 141: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge avec fast forward

• Merge avec une branche maBranche qui est en avance sur labranche master

• La branche master ne contient pas de commits non presentsdans l’historique de maBranche

• Fast Foward: Pas besoin d’un nouveau commit, la branchemaster peu simplement etre deplacee vers le dernier commitde la branche maBranche

• Ce comportement peut etre desactive avec l’option –no-ff

60

Page 142: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge : exemple sur un historique unique.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

echo "toto" > fichier1.txtgit add fichier1.txtgit commit -m "Add fichier1.txt"

echo "titi" > fichier1.txtgit commit -am "Modiffichier1.txt"

git checkout masterlsdir foo.txt

git merge maBranchecat fichier1.txttiti

git branch -d maBranche

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

headmaBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 48 / 87

Page 143: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge : exemple sur un historique unique.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

echo "toto" > fichier1.txtgit add fichier1.txtgit commit -m "Add fichier1.txt"

echo "titi" > fichier1.txtgit commit -am "Modiffichier1.txt"

git checkout masterlsdir foo.txt

git merge maBranchecat fichier1.txttiti

git branch -d maBranche

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

headmaBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 48 / 87

Page 144: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge : exemple sur un historique unique.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

echo "toto" > fichier1.txtgit add fichier1.txtgit commit -m "Add fichier1.txt"

echo "titi" > fichier1.txtgit commit -am "Modiffichier1.txt"

git checkout masterlsdir foo.txt

git merge maBranchecat fichier1.txttiti

git branch -d maBranche

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

head

maBranche

headmaBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 48 / 87

Page 145: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge : exemple sur un historique unique.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

echo "toto" > fichier1.txtgit add fichier1.txtgit commit -m "Add fichier1.txt"

echo "titi" > fichier1.txtgit commit -am "Modiffichier1.txt"

git checkout masterlsdir foo.txt

git merge maBranchecat fichier1.txttiti

git branch -d maBranche

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

head

maBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 48 / 87

Page 146: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge : exemple sur un historique unique.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

echo "toto" > fichier1.txtgit add fichier1.txtgit commit -m "Add fichier1.txt"

echo "titi" > fichier1.txtgit commit -am "Modiffichier1.txt"

git checkout masterlsdir foo.txt

git merge maBranchecat fichier1.txttiti

git branch -d maBranche

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

head

maBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 48 / 87

Page 147: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge : exemple sur un historique unique.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

echo "toto" > fichier1.txtgit add fichier1.txtgit commit -m "Add fichier1.txt"

echo "titi" > fichier1.txtgit commit -am "Modiffichier1.txt"

git checkout masterlsdir foo.txt

git merge maBranchecat fichier1.txttiti

git branch -d maBranche

45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

head

maBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 48 / 87

Page 148: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Merge : exemple sur un historique unique.

lsfoo.txt dir

git branch maBranche

git checkout maBranche

echo "toto" > fichier1.txtgit add fichier1.txtgit commit -m "Add fichier1.txt"

echo "titi" > fichier1.txtgit commit -am "Modiffichier1.txt"

git checkout masterlsdir foo.txt

git merge maBranchecat fichier1.txttiti

git branch -d maBranche45463

7126f

a4407

15e12

4a439

15e12

4a439

25b06

57669

master

head

maBranche

headmaBranche

headmaBranche

head

master

head

maBranchemaster

head headmaBranche

headmaster

head

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 48 / 87

Page 149: DevOps - Gestionnaires de versions - Thomas Ropars...Gestion des acc es concurrents Gestion pessimiste Un seul contributeur a acc es en ecriture a un chier Pas de con its Pas pratique

Comparaison : git diff

I Différences entre le répertoire de travail et l’index :$ git diff

I Différences entre HEAD et l’index :$ git diff --staged

I Différences entre répertoire de travail et HEAD :$ git diff HEAD

I Différences entre répertoire de travail et un autre commit :$ git diff <commit_1>

I Différences entre deux commit :$ git diff <commit_1> <commit_2>

J. Sopena (INRIA/UPMC) Git, un gestionnaire de versions décentralisé. 60 / 87