Git
http://martinfowler.com/bliki/VcsSurvey.html
Un peu d’histoire…
Noyau Linux : ~ 150 Mo de code sourcedes milliers de contributeurs aux 4 coins du mondenécessité de release très stablesMaintenu pendant des années via patch / emailsPuis BitKeeper
BitKeeper cesse d’attribuer des licences aux développeurs du noyeauLinus Thorvald qui déteste tous les outils existants, se décide à développer son propre outil pour ses besoinsGit ? Linus aime appeler les produits qu’il crée par son nom…http://www.youtube.com/watch?v=4XpnKHJAok8
Qu’est-ce que Git ?
GitEst 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 fichiersPossède une interface rudimentaireEst très fiableEst rapide
RAPIDE
RAPIDE
Différence centralisé / distribuéClientClientRepositoryClientClientClientClient
Différence centralisé / distribuéClientClientClientClient
Repository localClientClientRepositoryRepository 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 « barerepositories »Repository localRepositoryCommitStaging area(index)CheckoutStageWorking directory
Protocoles de communicationGit n’implémente aucun protocole particulier, il se repose sur des implémentations existantesfile://http(s)://git://ssh://rsync://bundlespatchs
Stockage des versionsChangementsSnapshots - Git
Branching & Merging
$ git init$ git add file.txt$ git commit -m "Initial Commit"
$ 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.txtHEADPointeur de working directorymasterBranche745a6ef
$ 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.txtcreate mode 100644 file3.txtHEADmaster745a6efaa2507d
$ notepad file2.txt$ git commit -a -m "Changed file2"  [master 841036d] Changed file2 1 files changed, 2 insertions(+), 1 deletions(-)HEADmaster745a6efaa2507d841036d
$ git branchmyideaHEADmaster745a6efaa2507d841036dmyidea
$ git checkoutmyideaSwitched to branch 'myidea'master745a6efaa2507d841036dmyideaHEAD
$ notepad file3.txt$ git commit -a -m "Changed file3" [myidea 54d9dde] Changed file3 1 files changed, 2 insertions(+), 1 deletions(-)master745a6efaa2507d841036d54d9ddemyideaHEAD
$ git checkout masterSwitched to branch 'master'HEADmaster745a6efaa2507d841036d54d9ddemyidea
$ notepad file2.txt$ git commit -a -m "Changed file2" [master 9143561] Changed file2 1 files changed, 2 insertions(+), 1 deletions(-)HEADmaster9143561745a6efaa2507d841036d54d9ddemyidea
$ git add file4.txt$ git commit -m "Added file4" [master 7201070] Added file4 1 files changed, 1 insertions(+), 0 deletions(-)create mode 100644 file4.txtHEADmaster91435617201070aa2507d841036d54d9ddemyidea
$ git mergemyideaMerge made by recursive. file3.txt |    3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)HEADmaster91435617201070e815ec4aa2507d841036d54d9ddemyidea
$ git checkoutmyideaSwitched to branch 'myidea'master91435617201070e815ec4aa2507d841036d54d9ddemyideaHEAD
$ notepad file.txt$ git commit -a -m "Changed file.txt« [myidea c26e3c5] Changed file.txt 1 files changed, 2 insertions(+), 1 deletions(-)master91435617201070e815ec4841036d54d9ddec26e3c5myideaHEAD
$ git checkout masterSwitched to branch 'master'HEADmaster91435617201070e815ec4841036d54d9ddec26e3c5myidea
$ git merge myideaMerge made by recursive. file.txt |    3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)HEADmaster91435617201070e815ec456c6f2d54d9ddec26e3c5myidea
$ git merge myideaAlready up-to-date.$ git merge myideaAlready up-to-date.HEADmaster91435617201070e815ec456c6f2d54d9ddec26e3c5myidea
$ git branch -d myideaDeleted branch myidea (was c26e3c5).HEADmaster91435617201070e815ec456c6f2d54d9ddec26e3c5
Remotes (branches)
github.com/project.gitmastera6b4cf42c5
$ cd Sources$ git clone git@github.com/project.gitgithub.com/project.gitmastera6b4cf42c5Sources/projectorigin/mastera6b4cf42c5master
github.com/project.gitmastera6b4cf42c531b8e190a3Sources/projectorigin/mastera6b4cf42c5master
$ ...github.com/project.gitmastera6b4cf42c531b8e190a3Sources/projectorigin/mastera6b4cf42c5a38de893cfmaster
$ git fetch origingithub.com/project.gitmastera6b4cf42c531b8e190a3Sources/projectorigin/master31b8e190a3a6b4cf42c5a38de893cfmaster
$ git merge origingithub.com/project.gitmastera6b4cf42c531b8e190a3Sources/projectorigin/master31b8e190a3967efa6b4cf42c5a38de893cfmaster
$ git push origingithub.com/project.gitmaster31b8e190a3967efa6b4cf42c5a38de893cfSources/projectorigin/master31b8e190a3967efa6b4cf42c5a38de893cfmaster
Topics Branches
Topics Branches - un exemplemasterlivraisondevelopmentintégrationintégrationfeature 1feature 2dumb
Workflows
Commandes de base$ git init / git clone$ git add$ git commit$ git checkout$ git merge$ git push$ git pull = fetch + merge
CentraliséClientClientClientClientClientClientRepositoryRepositoryRepositoryRepositoryRepositoryRepositoryRepository
Dictateur / LieutenantsBlessedRepositoryDictateurLieutenantDéveloppeurDéveloppeurLieutenantDéveloppeurRepositoryRepositoryRepositoryRepositoryRepositoryRepository

Présentation de git