SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Git
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 Repository Client Client Client Client
Différence centralisé / distribué Client Client Client Client
Repository local Client Client Repository Repository ,[object Object]
 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 »,[object Object]
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"
$ 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 HEAD Pointeur de working directory master Branche 745a6ef
$ 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 HEAD master 745a6ef aa2507d
$ notepad file2.txt $ git commit -a -m "Changed file2"   [master 841036d] Changed file2  1 files changed, 2 insertions(+), 1 deletions(-) HEAD master 745a6ef aa2507d 841036d
$ git branchmyidea HEAD master 745a6ef aa2507d 841036d myidea
$ git checkoutmyidea Switched to branch 'myidea' master 745a6ef aa2507d 841036d myidea HEAD
$ notepad file3.txt $ git commit -a -m "Changed file3"  [myidea 54d9dde] Changed file3  1 files changed, 2 insertions(+), 1 deletions(-) master 745a6ef aa2507d 841036d 54d9dde myidea HEAD
$ git checkout master Switched to branch 'master' HEAD master 745a6ef aa2507d 841036d 54d9dde myidea
$ notepad file2.txt $ git commit -a -m "Changed file2"  [master 9143561] Changed file2  1 files changed, 2 insertions(+), 1 deletions(-) HEAD master 9143561 745a6ef aa2507d 841036d 54d9dde myidea
$ 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 HEAD master 9143561 7201070 aa2507d 841036d 54d9dde myidea
$ git mergemyidea Merge made by recursive.  file3.txt |    3 ++-  1 files changed, 2 insertions(+), 1 deletions(-) HEAD master 9143561 7201070 e815ec4 aa2507d 841036d 54d9dde myidea
$ git checkoutmyidea Switched to branch 'myidea' master 9143561 7201070 e815ec4 aa2507d 841036d 54d9dde myidea HEAD
$ notepad file.txt $ git commit -a -m "Changed file.txt«  [myidea c26e3c5] Changed file.txt  1 files changed, 2 insertions(+), 1 deletions(-) master 9143561 7201070 e815ec4 841036d 54d9dde c26e3c5 myidea HEAD
$ git checkout master Switched to branch 'master' HEAD master 9143561 7201070 e815ec4 841036d 54d9dde c26e3c5 myidea
$ git merge myidea Merge made by recursive.  file.txt |    3 ++-  1 files changed, 2 insertions(+), 1 deletions(-) HEAD master 9143561 7201070 e815ec4 56c6f2d 54d9dde c26e3c5 myidea
$ git merge myidea Already up-to-date. $ git merge myidea Already up-to-date. HEAD master 9143561 7201070 e815ec4 56c6f2d 54d9dde c26e3c5 myidea
$ git branch -d myidea Deleted branch myidea (was c26e3c5). HEAD master 9143561 7201070 e815ec4 56c6f2d 54d9dde c26e3c5
Remotes (branches)
github.com/project.git master a6b4c f42c5
$ cd Sources $ git clone git@github.com/project.git github.com/project.git master a6b4c f42c5 Sources/project origin/master a6b4c f42c5 master
github.com/project.git master a6b4c f42c5 31b8e 190a3 Sources/project origin/master a6b4c f42c5 master
$ ... github.com/project.git master a6b4c f42c5 31b8e 190a3 Sources/project origin/master a6b4c f42c5 a38de 893cf master
$ git fetch origin github.com/project.git master a6b4c f42c5 31b8e 190a3 Sources/project origin/master 31b8e 190a3 a6b4c f42c5 a38de 893cf master
$ git merge origin github.com/project.git master a6b4c f42c5 31b8e 190a3 Sources/project origin/master 31b8e 190a3 967ef a6b4c f42c5 a38de 893cf master
$ git push origin github.com/project.git master 31b8e 190a3 967ef a6b4c f42c5 a38de 893cf Sources/project origin/master 31b8e 190a3 967ef a6b4c f42c5 a38de 893cf master
Topics Branches
Topics Branches - un exemple master livraison development intégration intégration feature 1 feature 2 dumb
Workflows
Commandes de base $ git init / git clone $ git add $ git commit $ git checkout $ git merge $ git push $ git pull = fetch + merge
Centralisé Client Client Client Client Client Client Repository Repository Repository Repository Repository Repository Repository
Dictateur / Lieutenants Blessed Repository Dictateur Lieutenant Développeur Développeur Lieutenant Développeur Repository Repository Repository Repository Repository Repository

Weitere ähnliche Inhalte

Was ist angesagt?

Git et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsGit et les systèmes de gestion de versions
Git et les systèmes de gestion de versions
Alice Loeser
 

Was ist angesagt? (20)

Learning git
Learning gitLearning git
Learning git
 
Git training v10
Git training v10Git training v10
Git training v10
 
Git and GitHub
Git and GitHubGit and GitHub
Git and GitHub
 
Git vs SVN
Git vs SVNGit vs SVN
Git vs SVN
 
Git - Basic Crash Course
Git - Basic Crash CourseGit - Basic Crash Course
Git - Basic Crash Course
 
Git et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsGit et les systèmes de gestion de versions
Git et les systèmes de gestion de versions
 
Git pour les (pas si) nuls
Git pour les (pas si) nulsGit pour les (pas si) nuls
Git pour les (pas si) nuls
 
Git and Github
Git and GithubGit and Github
Git and Github
 
git and github
git and githubgit and github
git and github
 
Introduction to Gitlab | Gitlab 101 | Training Session
Introduction to Gitlab | Gitlab 101 | Training SessionIntroduction to Gitlab | Gitlab 101 | Training Session
Introduction to Gitlab | Gitlab 101 | Training Session
 
Tutorial Git
Tutorial GitTutorial Git
Tutorial Git
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à Docker
 
Git and GitHub for Documentation
Git and GitHub for DocumentationGit and GitHub for Documentation
Git and GitHub for Documentation
 
Jenkins
JenkinsJenkins
Jenkins
 
Github basics
Github basicsGithub basics
Github basics
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec Jenkins
 
Git github
Git githubGit github
Git github
 
Git commands
Git commandsGit commands
Git commands
 
The everyday developer's guide to version control with Git
The everyday developer's guide to version control with GitThe everyday developer's guide to version control with Git
The everyday developer's guide to version control with Git
 
Version Control History and Git Basics
Version Control History and Git BasicsVersion Control History and Git Basics
Version Control History and Git Basics
 

Andere mochten auch

Migration d'une base de code subversion vers git
Migration d'une base de code subversion vers gitMigration d'une base de code subversion vers git
Migration d'une base de code subversion vers git
Geoffrey Bachelet
 
Introduction to Gitlab
Introduction to GitlabIntroduction to Gitlab
Introduction to Gitlab
Julien Pivotto
 
Continuous Integration (Jenkins/Hudson)
Continuous Integration (Jenkins/Hudson)Continuous Integration (Jenkins/Hudson)
Continuous Integration (Jenkins/Hudson)
Dennys Hsieh
 

Andere mochten auch (20)

Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséDécouvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
 
Git best practices workshop
Git best practices workshopGit best practices workshop
Git best practices workshop
 
En quoi git serait plus agile que svn ?
En quoi git serait plus agile que svn ?En quoi git serait plus agile que svn ?
En quoi git serait plus agile que svn ?
 
Présentation de Tuleap, Open ALM
Présentation de Tuleap, Open ALMPrésentation de Tuleap, Open ALM
Présentation de Tuleap, Open ALM
 
simple Introduction to git
simple Introduction to gitsimple Introduction to git
simple Introduction to git
 
C'est si simple git ! (devoxx france 2012)
C'est si simple git ! (devoxx france 2012)C'est si simple git ! (devoxx france 2012)
C'est si simple git ! (devoxx france 2012)
 
Mix it 2016 - Software craftsmanship : le chainon manquant de l’agilité ?
Mix it 2016 - Software craftsmanship : le chainon manquant de l’agilité ?Mix it 2016 - Software craftsmanship : le chainon manquant de l’agilité ?
Mix it 2016 - Software craftsmanship : le chainon manquant de l’agilité ?
 
Git.pptx
Git.pptxGit.pptx
Git.pptx
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Git
 
Introduction Professional Scrum Developer for Java
Introduction Professional Scrum Developer for JavaIntroduction Professional Scrum Developer for Java
Introduction Professional Scrum Developer for Java
 
Tests Logiciel
Tests LogicielTests Logiciel
Tests Logiciel
 
Migration d'une base de code subversion vers git
Migration d'une base de code subversion vers gitMigration d'une base de code subversion vers git
Migration d'une base de code subversion vers git
 
Java 201 Intro to Test Driven Development in Java
Java 201   Intro to Test Driven Development in JavaJava 201   Intro to Test Driven Development in Java
Java 201 Intro to Test Driven Development in Java
 
Git Flow: un processus de développement Agile
Git Flow: un processus de développement AgileGit Flow: un processus de développement Agile
Git Flow: un processus de développement Agile
 
Introduction to Gitlab
Introduction to GitlabIntroduction to Gitlab
Introduction to Gitlab
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.io
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
Devoxx 2016 - L'odyssée du continuous delivery
Devoxx 2016 - L'odyssée du continuous deliveryDevoxx 2016 - L'odyssée du continuous delivery
Devoxx 2016 - L'odyssée du continuous delivery
 
Continuous Integration (Jenkins/Hudson)
Continuous Integration (Jenkins/Hudson)Continuous Integration (Jenkins/Hudson)
Continuous Integration (Jenkins/Hudson)
 

Ähnlich wie Présentation de git

Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 git
Pape Diop
 
les commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfles commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdf
SimpleLearn1
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de version
goldoraf
 

Ähnlich wie Présentation de git (20)

Git
GitGit
Git
 
3_SCM_Git.pdf
3_SCM_Git.pdf3_SCM_Git.pdf
3_SCM_Git.pdf
 
Git pratique
Git pratiqueGit pratique
Git pratique
 
Git pratique
Git pratiqueGit pratique
Git pratique
 
GIT Fundamentals
GIT FundamentalsGIT Fundamentals
GIT Fundamentals
 
Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 git
 
Introduction à git.pdf
Introduction à git.pdfIntroduction à git.pdf
Introduction à git.pdf
 
Initiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfInitiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdf
 
Git and Github.pptx
Git and Github.pptxGit and Github.pptx
Git and Github.pptx
 
Travailler avec git et eclipse
Travailler avec git et eclipseTravailler avec git et eclipse
Travailler avec git et eclipse
 
les commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfles commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdf
 
Pourquoi versionner ses githooks.pdf
Pourquoi versionner ses githooks.pdfPourquoi versionner ses githooks.pdf
Pourquoi versionner ses githooks.pdf
 
Get startedwithgit2
Get startedwithgit2Get startedwithgit2
Get startedwithgit2
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 
JCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratiqueJCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratique
 
Débuter avec Git & github
Débuter avec Git & githubDébuter avec Git & github
Débuter avec Git & github
 
git-cmds-base.pdf
git-cmds-base.pdfgit-cmds-base.pdf
git-cmds-base.pdf
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de version
 
Introduction à git
Introduction à gitIntroduction à git
Introduction à git
 
git.pdf
git.pdfgit.pdf
git.pdf
 

Présentation de git

  • 1. Git
  • 2.
  • 3.
  • 4.
  • 7. 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
  • 8. 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
  • 10. 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
  • 13. Différence centralisé / distribué Client Client Repository Client Client Client Client
  • 14. Différence centralisé / distribué Client Client Client Client
  • 15.
  • 16. Chaque repository contient l’intégralité de l’historique connu du client
  • 17. Tous les commits
  • 18. Toutes les branches
  • 19. Tous les tags
  • 20. Chaque élément est identifié de façon unique par un SHA-1 de son contenu, ainsi que le SHA-1 des parents
  • 21. Les éléments identiques entre les repositories possèdent donc le même SHA-1
  • 22.
  • 23. 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
  • 24. Stockage des versions Changements Snapshots - Git
  • 26. $ git init $ git add file.txt $ git commit -m "Initial Commit"
  • 27. $ 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 HEAD Pointeur de working directory master Branche 745a6ef
  • 28. $ 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 HEAD master 745a6ef aa2507d
  • 29. $ notepad file2.txt $ git commit -a -m "Changed file2"   [master 841036d] Changed file2 1 files changed, 2 insertions(+), 1 deletions(-) HEAD master 745a6ef aa2507d 841036d
  • 30. $ git branchmyidea HEAD master 745a6ef aa2507d 841036d myidea
  • 31. $ git checkoutmyidea Switched to branch 'myidea' master 745a6ef aa2507d 841036d myidea HEAD
  • 32. $ notepad file3.txt $ git commit -a -m "Changed file3"  [myidea 54d9dde] Changed file3 1 files changed, 2 insertions(+), 1 deletions(-) master 745a6ef aa2507d 841036d 54d9dde myidea HEAD
  • 33. $ git checkout master Switched to branch 'master' HEAD master 745a6ef aa2507d 841036d 54d9dde myidea
  • 34. $ notepad file2.txt $ git commit -a -m "Changed file2"  [master 9143561] Changed file2 1 files changed, 2 insertions(+), 1 deletions(-) HEAD master 9143561 745a6ef aa2507d 841036d 54d9dde myidea
  • 35. $ 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 HEAD master 9143561 7201070 aa2507d 841036d 54d9dde myidea
  • 36. $ git mergemyidea Merge made by recursive. file3.txt | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) HEAD master 9143561 7201070 e815ec4 aa2507d 841036d 54d9dde myidea
  • 37. $ git checkoutmyidea Switched to branch 'myidea' master 9143561 7201070 e815ec4 aa2507d 841036d 54d9dde myidea HEAD
  • 38. $ notepad file.txt $ git commit -a -m "Changed file.txt«  [myidea c26e3c5] Changed file.txt 1 files changed, 2 insertions(+), 1 deletions(-) master 9143561 7201070 e815ec4 841036d 54d9dde c26e3c5 myidea HEAD
  • 39. $ git checkout master Switched to branch 'master' HEAD master 9143561 7201070 e815ec4 841036d 54d9dde c26e3c5 myidea
  • 40. $ git merge myidea Merge made by recursive. file.txt | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) HEAD master 9143561 7201070 e815ec4 56c6f2d 54d9dde c26e3c5 myidea
  • 41. $ git merge myidea Already up-to-date. $ git merge myidea Already up-to-date. HEAD master 9143561 7201070 e815ec4 56c6f2d 54d9dde c26e3c5 myidea
  • 42. $ git branch -d myidea Deleted branch myidea (was c26e3c5). HEAD master 9143561 7201070 e815ec4 56c6f2d 54d9dde c26e3c5
  • 45. $ cd Sources $ git clone git@github.com/project.git github.com/project.git master a6b4c f42c5 Sources/project origin/master a6b4c f42c5 master
  • 46. github.com/project.git master a6b4c f42c5 31b8e 190a3 Sources/project origin/master a6b4c f42c5 master
  • 47. $ ... github.com/project.git master a6b4c f42c5 31b8e 190a3 Sources/project origin/master a6b4c f42c5 a38de 893cf master
  • 48. $ git fetch origin github.com/project.git master a6b4c f42c5 31b8e 190a3 Sources/project origin/master 31b8e 190a3 a6b4c f42c5 a38de 893cf master
  • 49. $ git merge origin github.com/project.git master a6b4c f42c5 31b8e 190a3 Sources/project origin/master 31b8e 190a3 967ef a6b4c f42c5 a38de 893cf master
  • 50. $ git push origin github.com/project.git master 31b8e 190a3 967ef a6b4c f42c5 a38de 893cf Sources/project origin/master 31b8e 190a3 967ef a6b4c f42c5 a38de 893cf master
  • 52. Topics Branches - un exemple master livraison development intégration intégration feature 1 feature 2 dumb
  • 54. Commandes de base $ git init / git clone $ git add $ git commit $ git checkout $ git merge $ git push $ git pull = fetch + merge
  • 55. Centralisé Client Client Client Client Client Client Repository Repository Repository Repository Repository Repository Repository
  • 56. Dictateur / Lieutenants Blessed Repository Dictateur Lieutenant Développeur Développeur Lieutenant Développeur Repository Repository Repository Repository Repository Repository
  • 57. Github Développeur Développeur Repository Repository Public Repository Public Repository Public Repository Développeur Repository
  • 59. Réécrire l’histoire : amendcommits 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 …