Présentation de git

Post on 12-May-2015

1.546 views 0 download

description

Une présentation de Git en français

Transcript of Présentation de git

Git

-40

-20

0

20

40

60

80

100

120

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

UN PEU D’HISTOIRE…

• 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

• 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

QU’EST-CE QUE 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

RAPIDE

RAPIDE

Différence centralisé / distribué

Client Client

Client Client

Client ClientRepository

Différence centralisé / distribué

Client

Client

Client

Client

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 »

Repository local

Staging area(index)

Repository

Working directory

Commit

Stage

Checkout

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

Stockage des versions

Changements

Snapshots - Git

BRANCHING & MERGING

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

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

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

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

745a6ef

master

HEAD

$ git branch myidea

aa2507d 841036d

myidea

745a6ef

master

HEAD

$ git checkout myideaSwitched to branch 'myidea'

aa2507d 841036d

myidea

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

745a6ef

master

HEAD

$ git checkout masterSwitched to branch 'master'

aa2507d 841036d

myidea

54d9dde

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

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

$ 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

$ git checkout myideaSwitched to branch 'myidea'

master

HEAD

aa2507d 841036d

myidea

54d9dde

9143561 7201070 e815ec4

$ 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

$ git checkout masterSwitched to branch 'master'

master

HEAD

841036d

myidea

54d9dde

9143561 7201070 e815ec4

c26e3c5

$ 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

$ git merge myideaAlready up-to-date.

$ git merge myideaAlready up-to-date.

master

HEAD

myidea

54d9dde

9143561 7201070 e815ec4

c26e3c5

56c6f2d

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

master

HEAD

54d9dde

9143561 7201070 e815ec4

c26e3c5

56c6f2d

REMOTES (BRANCHES)

github.com/project.git

a6b4c f42c5

master

github.com/project.git

a6b4c f42c5

master

$ cd Sources$ git clone git@github.com/project.git

Sources/project

a6b4c f42c5

origin/master

master

github.com/project.git

a6b4c f42c5

master

Sources/project

a6b4c f42c5

31b8e 190a3

origin/master

master

github.com/project.git

a6b4c f42c5

master

Sources/project

a6b4c f42c5

31b8e 190a3

$ ...

a38de 893cf

origin/master

master

github.com/project.git

a6b4c f42c5

master

Sources/project

a6b4c f42c5

31b8e 190a3

$ git fetch origin

a38de 893cf

origin/master

master

31b8e 190a3

github.com/project.git

a6b4c f42c5

master

Sources/project

a6b4c f42c5

31b8e 190a3

$ git merge origin

a38de 893cf

origin/master

master

31b8e 190a3967ef

github.com/project.git

master

Sources/project

a6b4c f42c5

$ git push origin

a38de 893cf

origin/master

master

31b8e 190a3967ef

a6b4c f42c5a38de 893cf

31b8e 190a3967ef

TOPICS BRANCHES

master

development

feature 1 feature 2

inté

grati

on

inté

grati

on

livra

ison

Topics Branches - un exemple

dumb

WORKFLOWS

Commandes de base

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

Centralisé

Repository

Client

Repository

Client

Repository

Client

Repository

Client

Repository

Client

Repository

Client

Repository

Dictateur / Lieutenants

Dictateur

Repository BlessedRepository

Lieutenant

Repository

Développeur

Repository

Développeur

Repository

Lieutenant

Repository

Développeur

Repository

Github

Développeur

Repository

Développeur

Repository

Développeur

Repository

PublicRepository

PublicRepository

PublicRepository

FONCTIONNALITÉS AVANCÉES

• 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

• …

DÉMONSTRATION

SOURCES

• http://git-scm.com

• http://progit.org

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

• http://gitcasts.com