Présentation de git

56
Git

description

Une présentation de Git en français

Transcript of Présentation de git

Page 1: Présentation de git

Git

Page 2: Présentation de git
Page 3: Présentation de git

-40

-20

0

20

40

60

80

100

120

Page 4: Présentation de git
Page 5: Présentation de git

http://martinfowler.com/bliki/VcsSurvey.html

Page 6: Présentation de git

UN PEU D’HISTOIRE…

Page 7: Présentation de git

• Noyau Linux : – ~ 150 Mo de code source– des milliers de contributeurs aux 4 coins du

monde– nécessité de release très stables

• Maintenu pendant des années via patch / emails

• Puis BitKeeper

Page 8: Présentation de git

• BitKeeper cesse d’attribuer des licences aux développeurs du noyeau

• Linus Thorvald qui déteste tous les outils existants, se décide à développer son propre outil pour ses besoins

• Git ? Linus aime appeler les produits qu’il crée par son nom…

• http://www.youtube.com/watch?v=4XpnKHJAok8

Page 9: Présentation de git

QU’EST-CE QUE GIT ?

Page 10: Présentation de git

Git• Est un SCM distribué

• Garde le contenu d’un ensemble de répertoire (et non le contenant)

• Garde les révisions du repository et non des fichiers

• Possède une interface rudimentaire

• Est très fiable

• Est rapide

Page 11: Présentation de git

RAPIDE

Page 12: Présentation de git

RAPIDE

Page 13: Présentation de git

Différence centralisé / distribué

Client Client

Client Client

Client ClientRepository

Page 14: Présentation de git

Différence centralisé / distribué

Client

Client

Client

Client

Page 15: Présentation de git

Repository local

Client

Repository

Client

Repository

• Chaque client Git possède son propre repository

• Chaque repository contient l’intégralité de l’historique connu du client• Tous les commits• Toutes les branches• Tous les tags

• Chaque élément est identifié de façon unique par un SHA-1 de son contenu, ainsi que le SHA-1 des parents• Les éléments identiques entre les repositories possèdent donc le

même SHA-1

• Possibilité de créer des « bare repositories »

Page 16: Présentation de git

Repository local

Staging area(index)

Repository

Working directory

Commit

Stage

Checkout

Page 17: Présentation de git

Protocoles de communication

• Git n’implémente aucun protocole particulier, il se repose sur des implémentations existantes– file://– http(s)://– git://– ssh://– rsync://– bundles– patchs

Page 18: Présentation de git

Stockage des versions

Changements

Snapshots - Git

Page 19: Présentation de git

BRANCHING & MERGING

Page 20: Présentation de git

$ git init$ git add file.txt$ git commit -m "Initial Commit"

Page 21: Présentation de git

745a6ef

master

HEAD

Branche

Pointeur de working directory

$ git init$ git add file.txt$ git commit -m "Initial Commit"[master (root-commit) 745a6ef] Initial Commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 file.txt

Page 22: Présentation de git

745a6ef

master

HEAD

$ git add file2.txt file3.txt$ git commit -m "Added file2 file3"  [master aa2507d] Added file2 file3 2 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 file2.txt create mode 100644 file3.txt

aa2507d

Page 23: Présentation de git

745a6ef

master

HEAD

$ notepad file2.txt$ git commit -a -m "Changed file2"  [master 841036d] Changed file2 1 files changed, 2 insertions(+), 1 deletions(-)

aa2507d 841036d

Page 24: Présentation de git

745a6ef

master

HEAD

$ git branch myidea

aa2507d 841036d

myidea

Page 25: Présentation de git

745a6ef

master

HEAD

$ git checkout myideaSwitched to branch 'myidea'

aa2507d 841036d

myidea

Page 26: Présentation de git

745a6ef

master

HEAD

$ notepad file3.txt$ git commit -a -m "Changed file3" [myidea 54d9dde] Changed file3 1 files changed, 2 insertions(+), 1 deletions(-)

aa2507d 841036d

myidea

54d9dde

Page 27: Présentation de git

745a6ef

master

HEAD

$ git checkout masterSwitched to branch 'master'

aa2507d 841036d

myidea

54d9dde

Page 28: Présentation de git

745a6ef

master

HEAD

$ notepad file2.txt$ git commit -a -m "Changed file2" [master 9143561] Changed file2 1 files changed, 2 insertions(+), 1 deletions(-)

aa2507d 841036d

myidea

54d9dde

9143561

Page 29: Présentation de git

master

HEAD

$ git add file4.txt$ git commit -m "Added file4" [master 7201070] Added file4 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 file4.txt

aa2507d 841036d

myidea

54d9dde

9143561 7201070

Page 30: Présentation de git

$ git merge myideaMerge made by recursive. file3.txt | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)

master

HEAD

aa2507d 841036d

myidea

54d9dde

9143561 7201070 e815ec4

Page 31: Présentation de git

$ git checkout myideaSwitched to branch 'myidea'

master

HEAD

aa2507d 841036d

myidea

54d9dde

9143561 7201070 e815ec4

Page 32: Présentation de git

$ notepad file.txt$ git commit -a -m "Changed file.txt« [myidea c26e3c5] Changed file.txt 1 files changed, 2 insertions(+), 1 deletions(-)

master

HEAD

841036d

myidea

54d9dde

9143561 7201070 e815ec4

c26e3c5

Page 33: Présentation de git

$ git checkout masterSwitched to branch 'master'

master

HEAD

841036d

myidea

54d9dde

9143561 7201070 e815ec4

c26e3c5

Page 34: Présentation de git

$ git merge myideaMerge made by recursive. file.txt | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)

master

HEAD

myidea

54d9dde

9143561 7201070 e815ec4

c26e3c5

56c6f2d

Page 35: Présentation de git

$ git merge myideaAlready up-to-date.

$ git merge myideaAlready up-to-date.

master

HEAD

myidea

54d9dde

9143561 7201070 e815ec4

c26e3c5

56c6f2d

Page 36: Présentation de git

$ git branch -d myideaDeleted branch myidea (was c26e3c5).

master

HEAD

54d9dde

9143561 7201070 e815ec4

c26e3c5

56c6f2d

Page 37: Présentation de git

REMOTES (BRANCHES)

Page 38: Présentation de git

github.com/project.git

a6b4c f42c5

master

Page 39: Présentation de git

github.com/project.git

a6b4c f42c5

master

$ cd Sources$ git clone [email protected]/project.git

Sources/project

a6b4c f42c5

origin/master

master

Page 40: Présentation de git

github.com/project.git

a6b4c f42c5

master

Sources/project

a6b4c f42c5

31b8e 190a3

origin/master

master

Page 41: Présentation de git

github.com/project.git

a6b4c f42c5

master

Sources/project

a6b4c f42c5

31b8e 190a3

$ ...

a38de 893cf

origin/master

master

Page 42: Présentation de git

github.com/project.git

a6b4c f42c5

master

Sources/project

a6b4c f42c5

31b8e 190a3

$ git fetch origin

a38de 893cf

origin/master

master

31b8e 190a3

Page 43: Présentation de git

github.com/project.git

a6b4c f42c5

master

Sources/project

a6b4c f42c5

31b8e 190a3

$ git merge origin

a38de 893cf

origin/master

master

31b8e 190a3967ef

Page 44: Présentation de git

github.com/project.git

master

Sources/project

a6b4c f42c5

$ git push origin

a38de 893cf

origin/master

master

31b8e 190a3967ef

a6b4c f42c5a38de 893cf

31b8e 190a3967ef

Page 45: Présentation de git

TOPICS BRANCHES

Page 46: Présentation de git

master

development

feature 1 feature 2

inté

grati

on

inté

grati

on

livra

ison

Topics Branches - un exemple

dumb

Page 47: Présentation de git

WORKFLOWS

Page 48: Présentation de git

Commandes de base

$ git init / git clone$ git add$ git commit$ git checkout$ git merge$ git push$ git pull = fetch + merge

Page 49: Présentation de git

Centralisé

Repository

Client

Repository

Client

Repository

Client

Repository

Client

Repository

Client

Repository

Client

Repository

Page 50: Présentation de git

Dictateur / Lieutenants

Dictateur

Repository BlessedRepository

Lieutenant

Repository

Développeur

Repository

Développeur

Repository

Lieutenant

Repository

Développeur

Repository

Page 51: Présentation de git

Github

Développeur

Repository

Développeur

Repository

Développeur

Repository

PublicRepository

PublicRepository

PublicRepository

Page 52: Présentation de git

FONCTIONNALITÉS AVANCÉES

Page 53: Présentation de git

• Réécrire l’histoire :– amend commits

• permet de reprendre le dernier commit, comme si rien ne s’était passé

– rebase• alternative au merge, qui efface la trace de la branche en appliquant des patchs

étapes par étapes

• Gagner du temps :– bisect : recherche de régression étape par étape– rerere : apprendre à Git la manière de merger automatiquement les

conflits

• Signature GPG des tags

• git svn

• …

Page 54: Présentation de git

DÉMONSTRATION

Page 55: Présentation de git

SOURCES

Page 56: Présentation de git

• http://git-scm.com

• http://progit.org

• http://tekpub.com/preview/git

• http://gitcasts.com