0% ont trouvé ce document utile (0 vote)
63 vues138 pages

Guide Git pour Développeurs

Le document décrit les concepts clés de Git, y compris les objets Blob, Tree et Commit, ainsi que l'historique des commits et les fusions.

Transféré par

sana daassi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
63 vues138 pages

Guide Git pour Développeurs

Le document décrit les concepts clés de Git, y compris les objets Blob, Tree et Commit, ainsi que l'historique des commits et les fusions.

Transféré par

sana daassi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

DevOps

Gestionnaires de versions

Thomas Ropars

[Link]@[Link]

2022

1
Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des dépôts distants

2
Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des dépôts distants

3
Motivations

Une équipe de développeurs participe à la réalisation d’une


application:
• Comment conserver un historique?
• Comment revenir en arrière?
• Comment travailler à plusieurs en parallèle sur le même code?
• Comment gérer plusieurs versions du code à la fois?
• Comment savoir ce qui a été modifié et par qui (et pourquoi)?

4
Motivations

Une équipe de développeurs participe à la réalisation d’une


application:
• Comment conserver un historique?
• Comment revenir en arrière?
• Comment travailler à plusieurs en parallèle sur le même code?
• Comment gérer plusieurs versions du code à la fois?
• Comment savoir ce qui a été modifié et par qui (et pourquoi)?

Utilisation d’un VCS (Version Control Software)

4
Ce qu’on y stocke

Essentiellement des fichiers texte.

Ce qu’on y met
• Fichier sources (.java, .c, .html, etc)
• Certains fichiers binaires non dérivés des sources (images)
• Fichiers de configuration, compilation (Makefile)

Ce qu’on n’y met pas


• Fichiers temporaires
• Fichiers générés

5
diff & patch

Un VCS repose sur un mécanisme permettant de calculer les


différences entre 2 versions d’un fichier.

diff
• Comparaison de fichiers ligne par ligne
• Indique les lignes ajoutées ou supprimées
• Peut ignorer les casses, les tabulations, les espaces

patch
• Utilise la différence entre deux fichiers pour passer d’une
version à l’autre

6
diff & patch

Illustration
• Sauvegarder dans un patch les modifications d’un fichier
$ diff toto.c toto-orig.c > [Link]

• Appliquer le patch à une autre version du fichier


$ patch -p 0 mytoto.c < [Link]

diff et patch peuvent être appliqués à une arborescence de


fichiers

7
La notion d’historique

En plus de calculer la différence entre deux versions d’un fichier, il


faut gérer un historique des diffs:
• L’historique est un graphe orienté composé d’un ensemble de
versions pouvant être recalculées à partir des versions
adjacentes en appliquant les patchs.
• L’historique peut inclure plusieurs branches, c’est-à-dire des
sous-graphes qui évoluent en parallèle.

A B C

D E

8
La notion d’historique

En plus de calculer la différence entre deux versions d’un fichier, il


faut gérer un historique des diffs:
• L’historique est un graphe orienté composé d’un ensemble de
versions pouvant être recalculées à partir des versions
adjacentes en appliquant les patchs.
• L’historique peut inclure plusieurs branches, c’est-à-dire des
sous-graphes qui évoluent en parallèle.

A B C

D E

8
Historique: les merges

On appelle merge toute version ayant un degré sortant strictement


supérieur à 1. Cette version correspond alors à la fusion des patchs
de plusieurs branches.

A B C D G H

E F

9
Historique: les merges

On appelle merge toute version ayant un degré sortant strictement


supérieur à 1. Cette version correspond alors à la fusion des patchs
de plusieurs branches.

A B C D G H

E F

9
Gestion des accès concurrents

Gestion pessimiste
• Un seul contributeur à accès en écriture à un fichier
• Pas de conflits
• Pas pratique

Gestion optimiste
• Chaque développeur peut modifier sa copie locale en parallèle
• Risques de conflits
▶ Modifications concurrentes de la même zone de texte
• Tous les VCS actuels ont une approche optimiste

10
Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des dépôts distants

11
Avant de commencer . . .

Warning
Remarque introductive, présentation de GIT @ Google par Linus
Torvalds, 2007.
[Linus] is a guy who delights being cruel to people. His
latest cruel act is to create a revision control system which
is expressly designed to make you feel less intelligent than
you thought you were. [...] So Linus is here today to
explain 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 en


ligne.
• La meilleure chose est d’apprendre par vous même.

12
Fondé sur une fonction de hachage
SHA-1
• Secure Hash Algorithm (cryptographie)
• Génère une empreinte des données d’entrée
▶ Contenu du fichier
▶ en-tête
• Propriétés:
▶ Hash de 160 bits
▶ Très faible probabilité de collision
• Identifie de manière unique chaque objet

Exemple
$ echo a > toto
$ sha1sum toto
3f786850e387550fdab836ed7e6dc881de23001b toto
$ echo b >> toto
05dec960e24d918b8a73a1c53bcbbaac2ee5c2e0 toto

13
Les objets dans Git

• Blobs
• Tree
• Commit
• Tag

Content-adressable file system


• Chaque objet est accessible à partir de sa clé.

14
Blob

Définition
On appelle Blob, l’élément de base qui permet de stocker le
contenu d’un fichier.
• Chaque Blob est identifié de manière unique par sa clé
• À chaque révision du fichier correspond un nouveau Blob
• Le Blob ne dépend pas du nom ou de l’emplacement :
▶ Si un fichier est renommé, pas de nouveau Blob
▶ Si un fichier est déplacé, pas de nouveau Blob
• Le contenu du Blob est compressé avec zlib. Il contient:
▶ Le type d’objet (blob)
▶ La taille du fichier initial
▶ Le contenu du fichier

15
Tree

Définition
Un Tree stocke la liste des fichiers d’un répertoire.
• Un Tree est un ensemble de pointeurs vers des Blobs et
d’autres Trees.
• Un Tree associe un nom de fichier (resp. répertoire) à chacun
des pointeurs de Blobs (resp. Trees).
• Un ensemble de Trees permet de décrire l’état d’une
hiérarchie de répertoires à un moment donné.

16
Tree et Blob: Exemple
tree
654b. . .
t bl
.tx a. oth
l e1 tx
t erD
i
fi r

abcd 1234 tree


a00a. . .

[Link]
c09a. . . f371. . .

zzzz

cd82. . .

17
Tree et Blob: Exemple
tree
654b. . .
t bl
.tx a. oth
l e1 tx
t erD
i
fi r

abcd 1234 tree


a00a. . .

[Link]
c09a. . . f371. . .

zzzz

cd82. . .

17
Tree et Blob: Exemple
tree
654b. . .
t bl
.tx a. oth
l e1 tx
t erD
i
fi r

abcd 1234 tree


a00a. . .

[Link]
c09a. . . f371. . .

zzzz

cd82. . .

17
Commit

Définition
Un Commit stocke l’état d’une partie du dépôt à un instant donné.
Il contient :
• Un pointeur vers un Tree (arbre racine) dont on souhaite
sauver l’état.
• Un pointeur vers un ou plusieurs autres Commits pour
constituer un historique.
• Les informations sur l’auteur du Commit.
• Une description sous forme d’une chaı̂ne de caractères.

18
Exemple avec Commit
tree commit 1
654b. . . 89ad. . .
t bl
.tx a.t oth
1 xt erD
le i
fi r

abcd 1234 tree


a00a. . .

[Link]
c09a. . . f371. . .

zzzz

cd82. . .

19
Exemple avec Commit: modification de [Link]

commit 2 tree tree commit 1


b557. . . d42f. . . 654b. . . 89ad. . .

xt blatxt

bla
.t . .t oth ot
e1 e1 xt he

.tx
l l erD rD
fi ir
fi ir

t
ABcd abcd 1234 tree
a00a. . .

[Link]
3321. . . c09a. . . f371. . .

zzzz

cd82. . .
20
Exemple avec Commit: modification de [Link]

commit 2 tree tree commit 1


b557. . . d42f. . . 654b. . . 89ad. . .

xt blatxt

bla
.t . .t oth ot
e1 e1 xt he

.tx
l l erD rD
fi ir
fi ir

t
ABcd abcd 1234 tree
a00a. . .

[Link]
3321. . . c09a. . . f371. . .

zzzz

cd82. . .
20
Exemple avec Commit: modification de [Link]

commit 2 tree tree commit 1


b557. . . d42f. . . 654b. . . 89ad. . .

xt blatxt

bla
.t . .t oth ot
e1 e1 xt he

.tx
l l erD rD
fi ir
fi ir

t
ABcd abcd 1234 tree
a00a. . .

[Link]
3321. . . c09a. . . f371. . .

zzzz

cd82. . .
20
Les Tags

Définition
Un Tag permet d’identifier un des objets précédents à l’aide d’un
nom.
• Il contient un pointeur vers un Blob, un Tree ou un Commit.
• Typiquement utilisé pour identifier l’état du dépot au moment
d’une release.

21
Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des dépôts distants

22
Les commandes

Git est un ensemble de commandes. Les commandes sont de la


forme:

git commande options

Exemple

git add [Link]

23
Création d’un dépôt

Création d’un dépôt serveur


$ mkdir [Link]
$ cd [Link]
$ git --bare init

• Ne contient pas les fichiers versionnés mais juste l’historique


• On ne travaille pas sur cette version

24
Création d’un dépôt
Initialisation d’un dépôt
$ cd myproject
$ git init
$ git add .
$ git commit -m ’initial commit’
$ git remote add origin git@gitserver:/XX/XX/[Link]
$ git push origin master

• Créer un répertoire local myproject pour stocker notre


version du projet.
• Associer le dépôt local avec le dépôt distant
• Envoyer l’état initial du dépôt vers le serveur
• A partir de ce moment, tout le monde peut obtenir sa copie
locale du dépôt en utilisant git clone
25
Cloner un dépôt existant

Très souvent, un dépôt existe déjà. On veut alors récupérer une


copie de ce dépôt.

Cloner un dépôt
$ git clone URL

• Crée une copie locale du dépôt entier.


• L’URL peut être de la forme:
▶ [Link]
▶ [Link]
[Link]
▶ git://[Link]/schacon/[Link]

26
Le cycle de vie d’un fichier

Versionné

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


Indexé
Non versionné Modifié À jour
(Staged)
git reset HEAD git checkout

git commit <file>

27
Le cycle de vie d’un fichier

Versionné

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


Indexé
Non versionné Modifié À jour
(Staged)
git reset HEAD git checkout

git commit <file>

27
Le cycle de vie d’un fichier

Versionné

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


Indexé
Non versionné Modifié À jour
(Staged)
git reset HEAD git checkout

git commit <file>

27
Le cycle de vie d’un fichier

Versionné

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


Indexé
Non versionné Modifié À jour
(Staged)
git reset HEAD git checkout

git commit <file>

27
Le cycle de vie d’un fichier

Versionné

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


Indexé
Non versionné Modifié À jour
(Staged)
git reset HEAD git checkout

git commit <file>

27
Le cycle de vie d’un fichier

Versionné

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


Indexé
Non versionné Modifié À jour
(Staged)
git reset HEAD git checkout

git commit <file>

27
Quelques commandes

add : Ajoute dans l’index un fichier à commiter dans son


état actuel.
commit : enregistre dans le dépôt local les modifications qui
ont été ajoutées dans l’index par une commande add
reset HEAD : supprime la référence d’un fichier de l’index ajouté
par une commande add.

L’index est aussi appelé staging area.

Souvent on veut simplement commiter toutes les modifications en


cours (= fichiers de l’index + fichiers modifiés):
$ git commit -a

28
Exemple de commit

Commit
$ echo "coucou" >[Link]
$ git add [Link]
$ git commit -m "description du commit"

En l’absence de message décrivant le commit, un fichier décrivant


le commit est ouvert, vous invitant à compléter la description.

Sélectionnez votre éditeur favori


$ git config --global [Link] "emacs"

29
État courant de votre répertoire de travail

$ git status

• Permet de connaı̂tre l’état courant de l’index


▶ Les modifications indexées
▶ Les modifications non indexées
▶ Les fichiers non versionnés

• Git vous indique même comment effectuer les actions principales


▶ Commiter
▶ Ajouter des fichiers à l’index
▶ Annuler des modifications

30
Les branches

Dans Git
• Une branche est un pointeur sur un commit
• Chaque commit pointe vers son prédécesseur
• La variable HEAD pointe sur la branche sur laquelle on
travaille actuellement.

31
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
* maBranche
master

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


Les merges

$ git checkout brancheDestination


$ git merge brangeSource

• Créé un commit qui a pour parent les deux branches


• La branche courante avance à ce commit
• La source ne bouge pas, mais devient un fils du nouveau commit

32
Branche : structure interne des commits.

ls
[Link] dir

head

master a4407

7126f

45463

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


Branche : structure interne des commits.

ls
[Link] dir

git branch maBranche

head

master a4407 maBranche

7126f

45463

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


Branche : structure interne des commits.

ls
[Link] dir

git branch maBranche

git checkout maBranche

head

master a4407 maBranche

7126f

45463

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


Branche : structure interne des commits.

ls
[Link] dir

git branch maBranche

git checkout maBranche

touch [Link]
ls head
dir [Link] [Link]
git add [Link]
git commit -m "Add [Link]" 15e12 maBranche

master a4407

7126f

45463

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


Branche : structure interne des commits.

ls
[Link] dir

git branch maBranche

git checkout maBranche

touch [Link]
ls
dir [Link] [Link]
git add [Link]
git commit -m "Add [Link]" head 15e12 maBranche

git checkout master


ls
master a4407
dir [Link]

7126f

45463

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


Branche : structure interne des commits.

ls
[Link] dir

git branch maBranche

git checkout maBranche head

touch [Link]
ls
master maBranche
dir [Link] [Link]
git add [Link]
git commit -m "Add [Link]"
25b06 15e12
git checkout master
ls
a4407
dir [Link]

touch [Link]
git add [Link] 7126f
git commit -m "Add [Link]"
45463

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


Merge : exemple sur deux branches distinctes.

ls
dir [Link] [Link]

git checkout maBranche


ls head
dir [Link] [Link]

master maBranche

25b06 15e12

a4407

7126f

45463

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


Merge : exemple sur deux branches distinctes.

ls
dir [Link] [Link]

git checkout maBranche


ls head maBranche
dir [Link] [Link]

echo "titi" > [Link]


master 4a439
git commit -am "Modif
[Link]"

git checkout master 25b06 15e12

a4407

7126f

45463

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


Merge : exemple sur deux branches distinctes.

head

ls
dir [Link] [Link]
master
git checkout maBranche
ls maBranche
dir [Link] [Link] 57669

echo "titi" > [Link]


4a439
git commit -am "Modif
[Link]"

git checkout master 25b06 15e12


git merge maBranche
ls a4407
dir [Link] [Link]
[Link]
7126f

45463

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


Merge : exemple sur deux branches distinctes.

head

ls
dir [Link] [Link]
master
git checkout maBranche
ls
dir [Link] [Link] 57669

echo "titi" > [Link]


4a439
git commit -am "Modif
[Link]"

git checkout master 25b06 15e12


git merge maBranche
ls a4407
dir [Link] [Link]
[Link]
7126f
git branch -d maBranche

45463

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


Identifier des commits

• Le dernier commit de la branche courante ou d’une autre


▶ HEAD
▶ maBranche

• L’avant dernier et les précédents


▶ HEADˆ, mabrancheˆˆ, . . .
▶ HEAD∼3, mabranche∼12, . . .

• D’autres manières
▶ HEAD@yesterday
[email protected]

33
Rebase

• Autre manière de fusionner 2 branches


• Fusionne entièrement la branche source dans la branche
destination
• Permet de simplifier l’historique
• Ne jamais rebaser des commits qui ont déjà été poussés
sur un dépôt public

34
Rebase vs Merge.

head head

master Commit 6 Commit 5 maBranche master Commit 6 Commit 5 maBranche

Commit 4 Commit 3 Commit 4 Commit 3

Commit 2 Commit 2

Commit 1 Commit 1

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


Rebase vs Merge.

head

head ≈ Commit 5 maBranche

Commit 7 maBranche ≈ Commit 3

master Commit 6 Commit 5 master Commit 6 Commit 5

Commit 4 Commit 3 Commit 4 Commit 3

Commit 2 Commit 2

Commit 1 Commit 1

git checkout maBranche git checkout maBranche


git merge master git rebase master

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


Revenir en arrière

Cas de modifications non commitées


• Restaurer mon fichier dans la dernière version de l’index:
git checkout -- monfichier
▶ Utilisation de “--”: spécifie que monfichier désigne un
fichier et pas une branche.
• Restaurer mon fichier dans la dernière version commitée:
git checkout HEAD monfichier
• Restaure tous les fichiers du répertoire courant:
git checkout .

35
A propos de git checkout

Une commande qui peut prêter à confusion


• Permet de naviguer dans les branches
• Permet de modifier le contenu de fichiers

Nouvelles commandes depuis git 2.23


• git switch pour changer de branche
• git restore pour modifier le contenu d’un ficher
• A utiliser en remplacement de git checkout

36
Revenir en arrière

Cas de modifications commitées


Trois 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 : rétablir la situation d’un ancien commit

Si l’erreur a été rendue publique, la seule bonne pratique est


revert.

37
Amend : modification du dernier commit.

ls
[Link] dir head

master 15e12

a4407

7126f

45463

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


Amend : modification du dernier commit.

head

ls
[Link] dir master 4a439

touch [Link]
git commit -m "Ajou d’un fichier." 15e12

a4407

7126f

45463

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


Amend : modification du dernier commit.

head

ls
[Link] dir master 4a439
25b06 4a439

touch [Link]
git commit -m "Ajou d’un fichier." 15e12

git add [Link]


a4407
git commit --amend -m "Ajout d’un
fichier."
7126f

45463

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


Git revert : annulation par commit.

git branch master


cat [Link]
Premiere version de F1
cat [Link]
Premiere version de F2

head

master Commit 3

Commit 2

Commit 1

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


Git revert : annulation par commit.

git branch master


cat [Link]
Premiere version de F1
cat [Link] head
Premiere version de F2

echo "Deuxieme version de F1" > [Link] master Commit 5


git add [Link]
git commit -m "Add [Link]"
Commit 4
echo "Deuxieme version de F2" > [Link]
git add [Link]
git commit -m "Add [Link]" Commit 3

Commit 2

Commit 1

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


Git revert : annulation par commit.

git branch master head


cat [Link]
Premiere version de F1
cat [Link] master Commit 4
Premiere version de F2

echo "Deuxieme version de F1" > [Link] Commit 5


git add [Link]
git commit -m "Add [Link]"
Commit 4
echo "Deuxieme version de F2" > [Link]
git add [Link]
git commit -m "Add [Link]" Commit 3

git revert HEADˆ


cat [Link]
Commit 2
Premiere version de F1
cat [Link]
Deuxieme version de F2
Commit 1

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


La commande reset

• Annuler des ajouts dans l’index


git reset monfichier

• Restaurer un ancien commit (mais en conservant toutes les


modifications des fichiers et l’index)
git reset --soft commitID

• Restaurer un ancien commit et l’index (mais en conservant toutes


les modifications des fichiers)
git reset commitID

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


correspondants
git reset --hard commitID

38
Les différents type de reset.

head head head

master master master

Commit Commit Commit Commit Commit Commit Commit Commit Commit


4546... 7126... a440... 4546... 7126... a440... 4546... 7126... a440...

Tree Tree Tree Tree Tree Tree Tree Tree Tree


Index Index Index
4ab5... 676e... 6994... 4ab5... 676e... 6994... 4ab5... 676e... 6994...

Blob Tree Tree Blob Tree Tree Blob Tree Tree


7a35... 9a99... bc45... 7a35... 9a99... bc45... 7a35... 9a99... bc45...

[Link] dir dir [Link] dir dir [Link] dir dir

Blob Blob Blob Blob Blob Blob


8983... 4f55... 8983... 4f55... 8983... 4f55...

[Link] [Link] v2 [Link] [Link] v2 [Link] [Link] v2

ls -R ls -R ls -R
.: [Link] .: [Link] .: [Link]
dir: [Link] dir: [Link] dir: [Link]

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


Les différents type de reset.

head head

head
master master

master

Commit Commit Commit Commit Commit Commit


4546... 7126... a440... 4546... 7126... a440...
Commit Commit Commit
4546... 7126... a440...
Tree Tree Tree Tree Tree Tree
Index Index
4ab5... 676e... 6994... 4ab5... 676e... 6994...
Tree Tree Tree
Index
4ab5... 676e... 6994...
Blob Tree Tree Blob Tree Tree
7a35... 9a99... bc45... 7a35... 9a99... bc45...
Blob Tree Tree
7a35... 9a99... bc45... [Link] dir dir [Link] dir dir

[Link] dir dir

Blob Blob Blob Blob


8983... 4f55... 8983... 4f55...
Blob Blob
8983... 4f55... [Link] [Link] v2 [Link] [Link] v2

ls -R ls -R ls -R
.: [Link] .: [Link] .: [Link]
dir: [Link] dir: [Link] dir: [Link]
git reset --hard 4546
ls -R
.: [Link]

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


Les différents type de reset.

head

head head
master

master master

Commit Commit Commit


4546... 7126... a440...
Commit Commit Commit Commit Commit Commit
4546... 7126... a440... 4546... 7126... a440...
Tree Tree Tree
Index
4ab5... 676e... 6994...
Tree Tree Tree Tree Tree Tree
Index Index
4ab5... 676e... 6994... 4ab5... 676e... 6994...
Blob Tree Tree
7a35... 9a99... bc45...
Blob Tree Tree Blob Tree Tree
7a35... 9a99... bc45... 7a35... 9a99... bc45... [Link] dir dir

[Link] dir dir [Link] dir dir

Blob Blob
8983... 4f55...
Blob Blob Blob Blob
8983... 4f55... 8983... 4f55... [Link] [Link] v2

ls -R ls -R ls -R
.: [Link] .: [Link] .: [Link]
dir: [Link] dir: [Link] dir: [Link]
git reset --hard 4546 git reset 4546
ls -R ls -R
.: [Link] .: [Link]
dir: [Link]

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


Les différents type de reset.

head

head head
master

master master

Commit Commit Commit


4546... 7126... a440...
Commit Commit Commit Commit Commit Commit
4546... 7126... a440... 4546... 7126... a440...
Tree Tree Tree
Index
4ab5... 676e... 6994...
Tree Tree Tree Tree Tree Tree
Index Index
4ab5... 676e... 6994... 4ab5... 676e... 6994...
Blob Tree Tree
7a35... 9a99... bc45...
Blob Tree Tree Blob Tree Tree
7a35... 9a99... bc45... 7a35... 9a99... bc45... [Link] dir dir

[Link] dir dir [Link] dir dir


Blob Blob
8983... 4f55...
Blob Blob Blob Blob
8983... 4f55... 8983... 4f55... [Link] v2

ls -R ls -R ls -R
.: [Link] .: [Link] .: [Link]
dir: [Link] dir: [Link] dir: [Link]
git reset --hard 4546 git reset 4546 git reset --soft 4546
ls -R ls -R ls -R
.: [Link] .: [Link] .: [Link]
dir: [Link] dir: [Link]

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


Consulter l’historique des commits

Affiche l’historique des commits en remontant à partir de


commitID.
git log commitID

• Par défaut, commitID est HEAD

De multiples possibilités. On peut voir:


• le log entre 2 versions
• le log d’un fichier
• le log sur une durée
• ...

39
Consulter des changements

Afficher les détails sur un commit:


git show commitID
git show commitID -- monfichier monrepertoire

Afficher les différences entre des versions:

git diff commitID1..commitID2 -- monfichier monrepertoire

Savoir qui a modifié un fichier (voir une ligne):

git blame [Link]


git blame L80,+20 [Link]

40
Supprimer des fichiers

Pour supprimer un fichier versionné:


git rm monfichier

Pourquoi le faire ainsi?


• On peut utiliser la commande unix rm
▶ Requiert d’ajouter ensuite la modification à l’index (git add)
• git rm fait tout pour nous
▶ Supprime le fichier du répertoire de travail
▶ Met à jour l’index

41
Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des dépôts distants

42
Configurer git

• Commencer par renseigner son nom et email


$ git config --global [Link] "Thomas Ropars"
$ git config --global [Link] [Link]@[Link]

43
Modifications d’un historique public

Règle générale
Ne jamais réécrire un historique publiquement accessible
• Attention à l’utilisation des commandes rebase et reset
• Ne pas utiliser push --force à moins de vraiment savoir ce
que vous faı̂tes
• Nettoyer son historique avant de le pousser si confus

44
Nettoyer son historique

Amend
La commande git commit --amend permet de modifier le dernier
commit et son message

Rebase interactif
$ git rebase -i CommitID

• Permet de réécrire l’historique en partant de CommitID


• Principales actions possibles
▶ reword: editer le message du commit
▶ squash: fondre le commit dans le commit précédent
▶ drop: supprimer le commit

45
Ignorer des fichiers: gitignore
gitignore spécifie les fichiers non versionnés que git doit ignorer:
• Les fichiers déjà versionnés ne sont pas affectés.
• Définition à l’aide de patterns

Les fichiers gitignore:


• Des fichiers .gitignore peuvent être placés n’importe où dans
la hiérarchie.
▶ Les règles des fichiers plus bas dans la hiérarchie se substituent
aux règles définies plus haut.
• Priorités: Même répertoire, parent, . . . , racine du dépôt
▶ Ces fichiers .gitignore sont à ajouter au dépôt
• $GIT DIR/info/exclude
▶ Règles spécifiques à un utilisateur
• Fichier spécifié par l’option de configuration [Link]
dans (homedir)/.gitconfig

46
Ignorer des fichiers: gitignore

Définir des règles


# 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/[Link], but not doc/server/[Link]
doc/*.txt

47
Messages de commit

Le plus important
Décrire quoi et pourquoi et pas comment
• Ne pas décrire les modifications qui sont faites (informations
disponibles avec un diff)
• Décrire les fonctionnalités ajoutées

Exemple
• Bad: Modifie la fonction f pour tester la variable a
• Good: Vérifie les droits de l’utilisateur avant d’exécuter
l’action X

48
Messages de commit

Bonnes pratiques pour le format des messages


• Séparer le sujet du corps du message par une ligne vide
▶ Adapté à l’affichage des logs (git log --oneline; git
shortlog)

• Utiliser 50 caractères max pour le sujet


▶ Pas une limite réelle
▶ Bon conseil à suivre pour conserver une historique lisible

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


un point
• Formuler les messages au présent

49
Interface graphique

Quelque soit votre environnement de travail, il existe des interfaces


graphiques pour gérer vos projets:
• Avec git:
▶ gitk: Visualisation de l’historique
▶ git-gui: Interface pour la création de commits
• Linux: gitg, giggle, . . .
• Windows, Mac: look here
[Link]
• Eclipse: EGit, . . .

50
Agenda

Introduction

GIT

Utilisation de Git

Les bonnes pratiques

Synchronisation avec des dépôts distants

51
Centralisé vs Distribué

Modèle centralisé
• Un serveur gère l’intégralité des version (le dépôt)
• Les utilisateurs y ajoutent leurs modifications
• Les utilisateurs y récupèrent les modifications des autres

Modèle distribué
• Chaque utilisateur possède un dépôt entier
• Les dépôts peuvent s’échanger des modifications

52
Modèle distribué

• Chaque client a l’ensemble des fichiers dans son dépôt local


▶ Travailler off-line
▶ Changer de branche est rapide. On peut abuser des branches.

• Actions nécessitant un accès au dépôt distant


▶ Mise à jour du dépôt local depuis l’extérieur
▶ L’envoi d’informations

• Le client peut versionner en local.

53
Branches distantes et branches locales

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


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

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

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


Fetch, Merge et Pull

fetch : Importe les commits d’un dépôt distant dans le


dépôt local.
• Utiliser merge pour importer les changements
dans une branche locale

pull : Fusionne les changements d’un dépôt distant


directement dans une branche locale.
• Équivalent d’un fetch suivi d’un merge.
• Peut être configuré pour utiliser rebase au lieu
de merge
• Fetch permet d’observer les changements avant
de les intégrer dans sa branche de travail

54
Modèle distribué

git push
git commit

dépot distant dépôt local


git merge
git fetch

git pull

55
Modèle distribué

git push
git commit

dépot distant dépôt local


git merge
git fetch

git pull

55
Modèle distribué

git push
git commit

dépot distant dépôt local


git merge
git fetch

git pull

55
Modèle distribué

git push
git commit

dépot distant dépôt local


git merge
git fetch

git pull

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

r
ste
ma
C1

git init
git add ...
git commit

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


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

r
ste

ste
/m

ma

ma
gin
ori

C1 C1

git clone <@serveur>

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C1 C1 C1

git clone <@serveur>

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C2
C1 C1 C1

git commit

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C2 C2

C1 C1 C1

git push origin

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C2 C2 C2

C1 C1 C1

git fetch origin

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C2 C2 C2

C1 C1 C1

git merge

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C3
C2 C2 C2

C1 C1 C1

git commit

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C3 C4
C2 C2 C2

C1 C1 C1

git commit

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C4 C4
C3
C2 C2 C2

C1 C1 C1

git push origin

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C4 C4 C4
C3
C2 C2 C2

C1 C1 C1

git fetch origin

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C5
C4 C4 C4
C3
C2 C2 C2

C1 C1 C1

git merge origin

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C5 C5

C4 C4 C4
C3 C3
C2 C2 C2

C1 C1 C1

git push origin

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
ma

ma

ma
gin

gin
ori

ori
C5 C5 C5

C4 C4 C4
C3 C3 C3
C2 C2 C2

C1 C1 C1

git pull origin

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
foo
ma

ma

ma
gin

gin
ori

ori
C5 C5 C5

C4 C4 C4
C3 C3 C3
C2 C2 C2

C1 C1 C1

git checkout -b foo

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
foo
ma

ma

ma
gin

gin
ori

ori
C6
C5 C5 C5

C4 C4 C4
C3 C3 C3
C2 C2 C2

C1 C1 C1

git commit

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
foo
ma

ma

ma
gin

gin
ori

ori
C6 C7
C5 C5 C5

C4 C4 C4
C3 C3 C3
C2 C2 C2

C1 C1 C1

git commit

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
foo
ma

ma

ma
gin

gin
ori

ori
C7 C7
C6
C5 C5 C5

C4 C4 C4
C3 C3 C3
C2 C2 C2

C1 C1 C1

git push origin

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


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

ter
as

as
r

r
ste

ste

st e
/m

/m
foo

foo
ma

ma

ma
gin

gin
ori

ori
C7 C7
C6 C6
C5 C5 C5

C4 C4 C4
C3 C3 C3
C2 C2 C2

C1 C1 C1

git push origin foo

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


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

ter
o
as

as
/fo
r

r
ste

ste

st e
/m

/m
foo

foo
gin
ma

ma

ma
gin

gin
or i
ori

ori
C7 C7 C7
C6 C6
C5 C5 C5

C4 C4 C4
C3 C3 C3
C2 C2 C2

C1 C1 C1

git pull origin

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


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

ter
o

o
as

as
/fo

/fo
r

r
ste

ste

st e
/m

/m
foo

foo
gin

gin
ma

ma

ma
gin

gin
or i

or i
ori

ori
C7 C7 C7
C6 C6 C6
C5 C5 C5

C4 C4 C4
C3 C3 C3
C2 C2 C2

C1 C1 C1

git pull origin

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


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

ter
o

o
as

as
/fo

/fo
r

r
ste

ste

st e
/m

/m

r
foo

foo
gin

gin

ba
ma

ma

ma
gin

gin
or i

or i
ori

ori
C7 C7 C7
C6 C6 C6
C5 C5 C5

C4 C4 C4
C3 C3 C3
C2 C2 C2

C1 C1 C1

git branch bar


git checkout bar

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


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

ter
o

o
as

as
/fo

/fo
r

r
ste

ste

st e
/m

/m

r
foo

foo
gin

gin

ba
ma

ma

ma
gin

gin
or i

or i
ori

ori
C7 C7 C7
C6 C6 C6
C5 C5 C5
C8
C4 C4 C4
C3 C3 C3
C2 C2 C2

C1 C1 C1

git commit

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


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

ter
r
o

o
ba
as

as
/fo

/fo
r

r
ste

ste

st e
ib/
/m

/m

r
foo

foo
gin

gin

ba
ma

ma

ma
ntr
gin

gin
or i

or i
co
ori

ori
C7 C7 C7
C6 C6 C6
C5 C5 C5
C8 C8
C4 C4 C4
C3 C3 C3
C2 C2 C2

C1 C1 C1

git remote add contrib git://...


git fetchcontrib/bar

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


Quelques liens utiles

• [Link]
• [Link]
cours/01-Git/[Link]
• [Link]
[Link]
• [Link]

56
Références

• Notes de D. Donsez
• Notes de J. Sopena
• Notes de B. Goglin
• Notes de B. Florat

57
Plus de slides ...

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

mkdir project
cd project master
git init

Index

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


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

mkdir project
cd project master
git init

echo "toto" > [Link]


git add [Link]

Index

Blob
7a35...

[Link]

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


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

mkdir project
cd project master
git init

echo "toto" > [Link]


Commit
git add [Link] 4546...

git commit -m "Add [Link]"


Tree
Index
4ab5...

Blob
7a35...

[Link]

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


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

mkdir project
cd project master
git init

echo "toto" > [Link]


Commit
git add [Link] 4546...

git commit -m "Add [Link]"

mkdir dir Tree


Index
4ab5...
echo "titi" > dir/[Link]
git add dir/[Link]

Blob Tree
7a35... 9a99...

[Link] dir

Blob
8983...

[Link]

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


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

mkdir project
cd project master
git init

echo "toto" > [Link]


Commit Commit
git add [Link] 4546... 7126...

git commit -m "Add [Link]"

mkdir dir Tree Tree


Index
4ab5... 676e...
echo "titi" > dir/[Link]
git add dir/[Link]

git commit -m "Add dir/[Link]" Blob Tree


7a35... 9a99...

[Link] dir

Blob
8983...

[Link]

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


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

mkdir project
cd project master
git init

echo "toto" > [Link]


Commit Commit
git add [Link] 4546... 7126...

git commit -m "Add [Link]"

mkdir dir Tree Tree


Index
4ab5... 676e...
echo "titi" > dir/[Link]
git add dir/[Link]

git commit -m "Add dir/[Link]" Blob Tree Tree


7a35... 9a99... bc45...
echo "tutu" » dir/[Link]
git add dir/[Link] [Link] dir dir

Blob Blob
8983... 4f55...

[Link] [Link] v2

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


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

mkdir project
cd project master
git init

echo "toto" > [Link]


Commit Commit Commit
git add [Link] 4546... 7126... a440...

git commit -m "Add [Link]"

mkdir dir Tree Tree Tree


4ab5... 676e... 6994...
echo "titi" > dir/[Link]
git add dir/[Link]

git commit -m "Add dir/[Link]" Blob Tree Tree


7a35... 9a99... bc45...
echo "tutu" » dir/[Link]
git add dir/[Link] [Link] dir dir

git commit -m "Modif dir/[Link]"


Blob Blob
8983... 4f55...

[Link] [Link] v2

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


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

mkdir project
cd project master
git init

echo "toto" > [Link]


Commit Commit Commit
git add [Link] 4546... 7126... a440...

git commit -m "Add [Link]"

mkdir dir Tree Tree Tree


4ab5... 676e... 6994...
echo "titi" > dir/[Link]
git add dir/[Link]

git commit -m "Add dir/[Link]" Blob Tree Tree


7a35... 9a99... bc45...
echo "tutu" » dir/[Link]
git add dir/[Link] [Link] dir dir

git commit -m "Modif dir/[Link]"


Blob Blob
8983... 4f55...

[Link] [Link] v2

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


Merge avec fast forward

• Merge avec une branche maBranche qui est en avance sur la


branche master
• La branche master ne contient pas de commits non présents
dans l’historique de maBranche
• Fast Foward: Pas besoin d’un nouveau commit, la branche
master peu simplement être déplacée vers le dernier commit
de la branche maBranche
• Ce comportement peut être désactivé avec l’option –no-ff

59
Merge : exemple sur un historique unique.
ls
[Link] dir

head

master a4407

7126f

45463

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


Merge : exemple sur un historique unique.
ls
[Link] dir

git branch maBranche

head

master a4407 maBranche

7126f

45463

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


Merge : exemple sur un historique unique.
ls
[Link] dir

git branch maBranche

git checkout maBranche

head

master a4407 maBranche

7126f

45463

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


Merge : exemple sur un historique unique.
ls
[Link] dir

git branch maBranche

git checkout maBranche

echo "toto" > [Link] head


git add [Link]
git commit -m "Add [Link]"
4a439 maBranche
echo "titi" > [Link]
git commit -am "Modif
[Link]" 15e12

master a4407

7126f

45463

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


Merge : exemple sur un historique unique.
ls
[Link] dir

git branch maBranche

git checkout maBranche

echo "toto" > [Link]


git add [Link]
git commit -m "Add [Link]"
4a439 maBranche
echo "titi" > [Link]
git commit -am "Modif
[Link]" head 15e12

git checkout master


ls master a4407
dir [Link]

7126f

45463

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


Merge : exemple sur un historique unique.
ls
[Link] dir

git branch maBranche

git checkout maBranche

echo "toto" > [Link] head


git add [Link]
git commit -m "Add [Link]"
master 4a439 maBranche
echo "titi" > [Link]
git commit -am "Modif
[Link]" 15e12

git checkout master


ls a4407
dir [Link]

git merge maBranche 7126f


cat [Link]
titi
45463

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


Merge : exemple sur un historique unique.
ls
[Link] dir

git branch maBranche

git checkout maBranche

echo "toto" > [Link] head


git add [Link]
git commit -m "Add [Link]"
master 4a439
echo "titi" > [Link]
git commit -am "Modif
[Link]" 15e12

git checkout master


ls a4407
dir [Link]

git merge maBranche 7126f


cat [Link]
titi
45463
git branch -d maBranche

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


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

Vous aimerez peut-être aussi