Présentation de git
-
Upload
julien-blin -
Category
Technology
-
view
1.546 -
download
0
description
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 [email protected]/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