Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Présentation de git

2,791 views

Published on

Une présentation de Git en français

Published in: Technology
  • Be the first to comment

Présentation de git

  1. 1. Git<br />
  2. 2.
  3. 3.
  4. 4.
  5. 5. http://martinfowler.com/bliki/VcsSurvey.html<br />
  6. 6. Un peu d’histoire…<br />
  7. 7. Noyau Linux : <br />~ 150 Mo de code source<br />des milliers de contributeurs aux 4 coins du monde<br />nécessité de release très stables<br />Maintenu pendant des années via patch / emails<br />Puis BitKeeper<br />
  8. 8. BitKeeper cesse d’attribuer des licences aux développeurs du noyeau<br />Linus Thorvald qui déteste tous les outils existants, se décide à développer son propre outil pour ses besoins<br />Git ? Linus aime appeler les produits qu’il crée par son nom…<br />http://www.youtube.com/watch?v=4XpnKHJAok8<br />
  9. 9. Qu’est-ce que Git ?<br />
  10. 10. Git<br />Est un SCM distribué<br />Garde le contenu d’un ensemble de répertoire (et non le contenant)<br />Garde les révisions du repository et non des fichiers<br />Possède une interface rudimentaire<br />Est très fiable<br />Est rapide<br />
  11. 11. RAPIDE<br />
  12. 12. RAPIDE<br />
  13. 13. Différence centralisé / distribué<br />Client<br />Client<br />Repository<br />Client<br />Client<br />Client<br />Client<br />
  14. 14. Différence centralisé / distribué<br />Client<br />Client<br />Client<br />Client<br />
  15. 15. Repository local<br />Client<br />Client<br />Repository<br />Repository<br /><ul><li> Chaque client Git possède son propre repository
  16. 16. Chaque repository contient l’intégralité de l’historique connu du client
  17. 17. Tous les commits
  18. 18. Toutes les branches
  19. 19. Tous les tags
  20. 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. 21. Les éléments identiques entre les repositories possèdent donc le même SHA-1
  22. 22. Possibilité de créer des « barerepositories »</li></li></ul><li>Repository local<br />Repository<br />Commit<br />Staging area<br />(index)<br />Checkout<br />Stage<br />Working directory<br />
  23. 23. Protocoles de communication<br />Git n’implémente aucun protocole particulier, il se repose sur des implémentations existantes<br />file://<br />http(s)://<br />git://<br />ssh://<br />rsync://<br />bundles<br />patchs<br />
  24. 24. Stockage des versions<br />Changements<br />Snapshots - Git<br />
  25. 25. Branching & Merging<br />
  26. 26. $ git init<br />$ git add file.txt<br />$ git commit -m "Initial Commit"<br />
  27. 27. $ git init<br />$ git add file.txt<br />$ git commit -m "Initial Commit"<br />[master (root-commit) 745a6ef] Initial Commit<br /> 1 files changed, 1 insertions(+), 0 deletions(-)<br /> create mode 100644 file.txt<br />HEAD<br />Pointeur de working directory<br />master<br />Branche<br />745a6ef<br />
  28. 28. $ git add file2.txt file3.txt<br />$ git commit -m "Added file2 file3"  <br />[master aa2507d] Added file2 file3<br /> 2 files changed, 2 insertions(+), 0 deletions(-)<br />create mode 100644 file2.txt<br />create mode 100644 file3.txt<br />HEAD<br />master<br />745a6ef<br />aa2507d<br />
  29. 29. $ notepad file2.txt<br />$ git commit -a -m "Changed file2"  <br />[master 841036d] Changed file2<br /> 1 files changed, 2 insertions(+), 1 deletions(-)<br />HEAD<br />master<br />745a6ef<br />aa2507d<br />841036d<br />
  30. 30. $ git branchmyidea<br />HEAD<br />master<br />745a6ef<br />aa2507d<br />841036d<br />myidea<br />
  31. 31. $ git checkoutmyidea<br />Switched to branch 'myidea'<br />master<br />745a6ef<br />aa2507d<br />841036d<br />myidea<br />HEAD<br />
  32. 32. $ notepad file3.txt<br />$ git commit -a -m "Changed file3" <br />[myidea 54d9dde] Changed file3<br /> 1 files changed, 2 insertions(+), 1 deletions(-)<br />master<br />745a6ef<br />aa2507d<br />841036d<br />54d9dde<br />myidea<br />HEAD<br />
  33. 33. $ git checkout master<br />Switched to branch 'master'<br />HEAD<br />master<br />745a6ef<br />aa2507d<br />841036d<br />54d9dde<br />myidea<br />
  34. 34. $ notepad file2.txt<br />$ git commit -a -m "Changed file2" <br />[master 9143561] Changed file2<br /> 1 files changed, 2 insertions(+), 1 deletions(-)<br />HEAD<br />master<br />9143561<br />745a6ef<br />aa2507d<br />841036d<br />54d9dde<br />myidea<br />
  35. 35. $ git add file4.txt<br />$ git commit -m "Added file4" <br />[master 7201070] Added file4<br /> 1 files changed, 1 insertions(+), 0 deletions(-)<br />create mode 100644 file4.txt<br />HEAD<br />master<br />9143561<br />7201070<br />aa2507d<br />841036d<br />54d9dde<br />myidea<br />
  36. 36. $ git mergemyidea<br />Merge made by recursive.<br /> file3.txt | 3 ++-<br /> 1 files changed, 2 insertions(+), 1 deletions(-)<br />HEAD<br />master<br />9143561<br />7201070<br />e815ec4<br />aa2507d<br />841036d<br />54d9dde<br />myidea<br />
  37. 37. $ git checkoutmyidea<br />Switched to branch 'myidea'<br />master<br />9143561<br />7201070<br />e815ec4<br />aa2507d<br />841036d<br />54d9dde<br />myidea<br />HEAD<br />
  38. 38. $ notepad file.txt<br />$ git commit -a -m "Changed file.txt« <br />[myidea c26e3c5] Changed file.txt<br /> 1 files changed, 2 insertions(+), 1 deletions(-)<br />master<br />9143561<br />7201070<br />e815ec4<br />841036d<br />54d9dde<br />c26e3c5<br />myidea<br />HEAD<br />
  39. 39. $ git checkout master<br />Switched to branch 'master'<br />HEAD<br />master<br />9143561<br />7201070<br />e815ec4<br />841036d<br />54d9dde<br />c26e3c5<br />myidea<br />
  40. 40. $ git merge myidea<br />Merge made by recursive.<br /> file.txt | 3 ++-<br /> 1 files changed, 2 insertions(+), 1 deletions(-)<br />HEAD<br />master<br />9143561<br />7201070<br />e815ec4<br />56c6f2d<br />54d9dde<br />c26e3c5<br />myidea<br />
  41. 41. $ git merge myidea<br />Already up-to-date.<br />$ git merge myidea<br />Already up-to-date.<br />HEAD<br />master<br />9143561<br />7201070<br />e815ec4<br />56c6f2d<br />54d9dde<br />c26e3c5<br />myidea<br />
  42. 42. $ git branch -d myidea<br />Deleted branch myidea (was c26e3c5).<br />HEAD<br />master<br />9143561<br />7201070<br />e815ec4<br />56c6f2d<br />54d9dde<br />c26e3c5<br />
  43. 43. Remotes (branches)<br />
  44. 44. github.com/project.git<br />master<br />a6b4c<br />f42c5<br />
  45. 45. $ cd Sources<br />$ git clone git@github.com/project.git<br />github.com/project.git<br />master<br />a6b4c<br />f42c5<br />Sources/project<br />origin/master<br />a6b4c<br />f42c5<br />master<br />
  46. 46. github.com/project.git<br />master<br />a6b4c<br />f42c5<br />31b8e<br />190a3<br />Sources/project<br />origin/master<br />a6b4c<br />f42c5<br />master<br />
  47. 47. $ ...<br />github.com/project.git<br />master<br />a6b4c<br />f42c5<br />31b8e<br />190a3<br />Sources/project<br />origin/master<br />a6b4c<br />f42c5<br />a38de<br />893cf<br />master<br />
  48. 48. $ git fetch origin<br />github.com/project.git<br />master<br />a6b4c<br />f42c5<br />31b8e<br />190a3<br />Sources/project<br />origin/master<br />31b8e<br />190a3<br />a6b4c<br />f42c5<br />a38de<br />893cf<br />master<br />
  49. 49. $ git merge origin<br />github.com/project.git<br />master<br />a6b4c<br />f42c5<br />31b8e<br />190a3<br />Sources/project<br />origin/master<br />31b8e<br />190a3<br />967ef<br />a6b4c<br />f42c5<br />a38de<br />893cf<br />master<br />
  50. 50. $ git push origin<br />github.com/project.git<br />master<br />31b8e<br />190a3<br />967ef<br />a6b4c<br />f42c5<br />a38de<br />893cf<br />Sources/project<br />origin/master<br />31b8e<br />190a3<br />967ef<br />a6b4c<br />f42c5<br />a38de<br />893cf<br />master<br />
  51. 51. Topics Branches<br />
  52. 52. Topics Branches - un exemple<br />master<br />livraison<br />development<br />intégration<br />intégration<br />feature 1<br />feature 2<br />dumb<br />
  53. 53. Workflows<br />
  54. 54. Commandes de base<br />$ git init / git clone<br />$ git add<br />$ git commit<br />$ git checkout<br />$ git merge<br />$ git push<br />$ git pull = fetch + merge<br />
  55. 55. Centralisé<br />Client<br />Client<br />Client<br />Client<br />Client<br />Client<br />Repository<br />Repository<br />Repository<br />Repository<br />Repository<br />Repository<br />Repository<br />
  56. 56. Dictateur / Lieutenants<br />Blessed<br />Repository<br />Dictateur<br />Lieutenant<br />Développeur<br />Développeur<br />Lieutenant<br />Développeur<br />Repository<br />Repository<br />Repository<br />Repository<br />Repository<br />Repository<br />
  57. 57. Github<br />Développeur<br />Développeur<br />Repository<br />Repository<br />Public<br />Repository<br />Public<br />Repository<br />Public<br />Repository<br />Développeur<br />Repository<br />
  58. 58. Fonctionnalités Avancées<br />
  59. 59. Réécrire l’histoire :<br />amendcommits<br />permet de reprendre le dernier commit, comme si rien ne s’était passé<br />rebase<br />alternative au merge, qui efface la trace de la branche en appliquant des patchs étapes par étapes<br />Gagner du temps :<br />bisect : recherche de régression étape par étape<br />rerere : apprendre à Git la manière de merger automatiquement les conflits<br />Signature GPG des tags<br />git svn<br />…<br />
  60. 60. Démonstration<br />
  61. 61. Sources<br />
  62. 62. http://git-scm.com<br />http://progit.org<br />http://tekpub.com/preview/git<br />http://gitcasts.com<br />

×