En quoi git serait plus agile que svn ?

4,812 views

Published on

Support de la session "En quoi git serait plus agile que svn ?" à Agile Tour 2012

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,812
On SlideShare
0
From Embeds
0
Number of Embeds
561
Actions
Shares
0
Downloads
132
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

En quoi git serait plus agile que svn ?

  1. 1. Gestion de source CPOLD, SVN, GIT Guillaume COLLIC gcollic@gmail.com
  2. 2. Guillaume Collic Acteur de l’agilité Etc.@gcollic
  3. 3. Sondage• Gestion de version ?• SVN / TFS* ?• DVCS / Git / Mercurial / Bazaar ?* lorsque je parle ici de TFS, je ne parle que de la brique gestion de version de TFS, parmi toutes les autres briques de cette plateforme ALM complète
  4. 4. Plan• Rôles d’un VCS – Les bases, mais important pour la suite• Client-Serveur : SVN• Distribué : Git• En contexte agile ?• Retour d’expérience• Questions
  5. 5. Gestion de sourceRÔLES D’UN VCS
  6. 6. Vocabulaire• VCS –Version Control System –Gestionnaire de source –Gestionnaire de version • Ambigüe, source ou binaire ? –Gestionnaire de révision
  7. 7. http://www.flickr.com/photos/26628378@N03/2988737872
  8. 8. © 2011 - 2012, All The Memes LLC. All Rights Reserved.
  9. 9. © 2011 - 2012, All The Memes LLC. All Rights Reserved.
  10. 10. Le gestionnaire de version le plus utilisé au mondeCPOLD
  11. 11. CP OLDsrc
  12. 12. CP OLDsrc old
  13. 13. CP OLDsrc old
  14. 14. CP OLDsrc old
  15. 15. CP OLDold
  16. 16. CP OLDsrc
  17. 17. © 2011 - 2012, All The Memes LLC. All Rights Reserved.
  18. 18. Un VCS est• Un filet de sécurité pour revenir en arrière
  19. 19. http://www.flickr.com/photos/26628378@N03/2988737872
  20. 20. http://www.flickr.com/photos/26628378@N03/2988737872
  21. 21. src
  22. 22. src
  23. 23. src livraison1 livraison2
  24. 24. © 2011 - 2012, All The Memes LLC. All Rights Reserved.
  25. 25. Un VCS est• Un filet de sécurité pour revenir en arrière• Un référentiel commun
  26. 26. Et là…
  27. 27. Mon travail, écrasé!
  28. 28. Outils dédiés• …• CVS (1990) – /! ne pas confondre avec le sigle VCS• ClearCase (1992)• Visual SourceSafe (1994)• BitKeeper (1998)• SVN (2000) – slogan « CVS Done Right »• TFS (2005)• Git (2005)• …
  29. 29. VCS client - serveur ServeurBob Tom Léa
  30. 30. Commandes de bases CheckoutServeur BobV 0.50V 0.51V 0.52V 0.53
  31. 31. Commandes de bases CheckoutServeur BobV 0.50 V 0.51 V 0.51 V 0.51V 0.51V 0.52V 0.53
  32. 32. Commandes de basesServeur BobV 0.50 V 0.51 V 0.51 V 0.51V 0.51V 0.52V 0.53
  33. 33. Commandes de basesServeur BobV 0.50 V 0.51 V 0.51 V 0.51V 0.51V 0.52V 0.53
  34. 34. Commandes de bases CommitServeur BobV 0.50 V 0.51 V 0.51 V 0.51V 0.51V 0.52V 0.53
  35. 35. Commandes de bases CommitServeur BobV 0.50 V 0.51 V 0.51 V 0.51V 0.51V 0.52V 0.53V 0.54
  36. 36. Commandes de basesServeur BobV 0.50 V 0.51 V 0.51 V 0.51V 0.51V 0.52V 0.53V 0.54
  37. 37. Gestion des conflitsCheckout V 0.54 Dével. Commit ? V 0.55 !! Conflit ! Fusion Commit ? Succès ! V 0.56
  38. 38. Fusion de 2 versions
  39. 39. Fusion de 2 versionsavec l’ancêtre commun
  40. 40. Exemple d’historique
  41. 41. Un VCS est• Un filet de sécurité pour revenir en arrière• Un référentiel commun• Une aide à la gestion des conflits
  42. 42. © 2011 - 2012, All The Memes LLC. All Rights Reserved.
  43. 43. Branches et tagsVincent Driessen blog post : http://nvie.com/archives/323 (CC BY-SA)
  44. 44. Branches et tagsVincent Driessen blog post : http://nvie.com/archives/323 (CC BY-SA)
  45. 45. Branches et tagsVincent Driessen blog post : http://nvie.com/archives/323 (CC BY-SA)
  46. 46. Subversion, « CVS Done Right »SVN
  47. 47. Gestionnaire de source• Un filet de sécurité pour revenir en arrière• Un référentiel commun• Une aide à la gestion des conflits
  48. 48. SVN• Un filet de sécurité pour revenir en arrière• Un référentiel commun• Une aide à la gestion des conflits
  49. 49. Problème 1• Si je commit, je met en commun• Si je met en commun, je commitFilet de sécurité ⇒ commit ⇒ mise en commun
  50. 50. Problème 2Checkout V 0.54 Dével. Commit ? V 0.55 !! Conflit ! On a toujours pas commité ! Mise Fusion en commun sans filet de sécurité Commit ? Succès ! V 0.56
  51. 51. Secret de codeurshttp://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html
  52. 52. http://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html
  53. 53. http://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html
  54. 54. Distributed Version Control SystemGestionnaire de source distribuéDVCS
  55. 55. Les VCS client - serveur Serveur Client Client Client de de de Bob Tom Léa
  56. 56. Les DVCS Dépôt communDépôt Dépôt Dépôt de de de Bob Tom Léa (la plupart du temps)
  57. 57. Les DVCSEn théorie toutes les configurations sont possibles Dépôt commun Dépôt Dépôt Dépôt de Bob de de (stagiaire de Tom) Tom Léa Mais ce n’est pas le plus important !
  58. 58. Commandes de bases CloneDépôt distant V 0.50 V 0.51 V 0.52 V 0.53
  59. 59. Commandes de bases CloneDépôt distant Dépôt local V 0.50 V 0.50 V 0.51 V 0.51 V 0.52 V 0.52 V 0.53 V 0.53
  60. 60. Commandes de basesDépôt distant Dépôt local V 0.50 V 0.50 V 0.51 V 0.51 V 0.52 V 0.52 V 0.53 V 0.53
  61. 61. Commandes de bases CheckoutDépôt distant Dépôt local V 0.50 V 0.50 V 0.51 V 0.51 V 0.52 V 0.52 V 0.53 V 0.53
  62. 62. Commandes de bases CheckoutDépôt distant Dépôt local V 0.50 V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.52 V 0.53 V 0.53
  63. 63. Commandes de basesDépôt distant Dépôt local V 0.50 V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.52 V 0.53 V 0.53
  64. 64. Commandes de basesDépôt distant Dépôt local V 0.50 V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.52 V 0.53 V 0.53
  65. 65. Commandes de bases CommitDépôt distant Dépôt local V 0.50 V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.52 V 0.53 V 0.53
  66. 66. Commandes de bases CommitDépôt distant Dépôt local V 0.50 V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.52 V 0.53 V 0.53 V 0.54
  67. 67. Commandes de bases PushDépôt distant Dépôt local V 0.50 V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.52 V 0.53 V 0.53 V 0.54
  68. 68. Commandes de bases PushDépôt distant Dépôt local V 0.50 V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.52 V 0.53 V 0.53 V 0.54 V 0.54
  69. 69. Commandes de basesDépôt distant Dépôt local V 0.50 V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.52 V 0.53 V 0.53 V 0.54 V 0.54
  70. 70. Gestion des conflits Clone CheckoutDépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51
  71. 71. Gestion des conflitsDépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51
  72. 72. Gestion des conflitsDépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51 Modif A Dével. Commit intermédiaire
  73. 73. Gestion des conflits Dépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51 Modif B Modif ADépôtde Léa
  74. 74. Gestion des conflitsDépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51 Modif B Modif A Modif C Dével. Commit intermédiaire
  75. 75. Gestion des conflitsDépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51 Modif B Modif A Modif C
  76. 76. Gestion des conflits FetchDépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51 Modif B Modif B Modif A Modif C
  77. 77. Gestion des conflitsDépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51 Modif B Modif B Modif A Modif C
  78. 78. Gestion des conflitsDépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51 Modif B Modif B Modif A Modif C Fusion, avec Fusion filets de sécurité
  79. 79. Gestion des conflits PushDépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51 Modif B Modif B Modif A Modif C Fusion
  80. 80. Gestion des conflits Push Dépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51Modif B Modif A Modif B Modif A Modif C Modif C Fusion Fusion
  81. 81. Gestion des conflits Dépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51 Modif B Modif A Modif B Modif A Modif C Modif C Fusion FusionL’historique est clair, on voit les modifications de chacun avantfusion, et quels décisions ont été prise lors de la fusion
  82. 82. Rappel du problème avec un VCS Client-Serveur• Si je commit, je met en commun• Si je met en commun, je commitCe que je fais impact le reste de l’équipe. Soit je fais ce qui les arrange, soit ce qui m’arrange, mais pas les 2.
  83. 83. Avec un DVCS• Je commit en local à mon rythme – Pas forcément à la cible final des critères de mon organisation• Avec autant de filet de sécurité que nécessaire• Sans géner les autres C’est mon workflow personnel !
  84. 84. Avec un DVCS• Je pousse mes modifications sur le dépôt commun au bon moment• Je vérifie que mes sources respectent les critères éventuels de l’organisation avant de les pousser C’est le workflow organisationnel !
  85. 85. Exemple d’historique
  86. 86. Fusion systématique de 2 versions avec l’ancêtre commun
  87. 87. © 2011 - 2012, All The Memes LLC. All Rights Reserved.
  88. 88. "the stupid content tracker"GIT
  89. 89. Historique des DVCS seuls• …• BitKeeper (1998)• Monotone (2000)• Mercurial (2005)• Bazaar (2005)• Git (2005)• …
  90. 90. Origine de git :gestion de source du noyau libre Linux• BitKeeper jusqu’en 2005 – propriétaire (!)• Révocation de la licence – conflit avec un contributeur• Création par Linus Torvald – Auto hébergement : 5 j pour git, 1 an pour svn – V1.0 : 1 an pour git, 3,5 ans pour svn• Aujourd’hui (7 ans après) – Mature – Massivement adopté par la communauté Open Source – Supporté dans l’industrie – Supporté par Microsoft • TFS, Visual Studio, Azure, CodePlex, …
  91. 91. “Take CVS as an example of what not to do; if in doubt, make theexact opposite decision”
  92. 92. • Une transformation dans le monde open source
  93. 93. Déploiement en continu• Hébergeurs supportant le « push » d’un commit git sur leur serveur git, qui déclenche chez eux – Une compilation – Le lancement des tests – Le déploiement • en environnement de test ou de production
  94. 94. Authentification et gestion des droits ?• Ce n’est pas son rôle – il délègue aux spécialistes • SSH • Gitolite • GitLab • …
  95. 95. DISCLAIMER : SubjectifRETOUR D’EXPÉRIENCE
  96. 96. SVN / TFS• Contexte professionnel
  97. 97. Git : contexte personnel progressif depuis quelques années• Articles• Livres• Conférences• Mise en pratique sur des projets personnels
  98. 98. Git : contexte professionnel depuis un an• Mis en place sur un projet pour un client – Équipe habitué aux interfaces graphiques• Généralisé ensuite à toute la société – 7 développeurs – une dizaine de dépôts git • dont un transverse commun (sous-module git) – une gestion fine des droits par Gitolite
  99. 99. Git ExtensionsTrès bien, mature et pédagogique pour les équipes habitués aux interfaces graphiques
  100. 100. Contexte agile• Hygiène du code – Commits fréquents – Commits propres et unitaires• Livraisons fréquentes• Équipe auto-organisée – Diminution des intermédiaires – Augmentation de l’autonomie• Accepter le changement – Revoir nos choix techniques si nécessaire• Déploiement en continu
  101. 101. Livraison fréquenteSi serveur central hors service (panne matérielle, coupure réseau, erreur de manipulation…), en moyenne une fois par an en ce qui me concerne • Centralisé (svn, …) • Décentralisé (git, …) – Gros ralentissement – Contournement sur un dans l’équipe nouveau dépôt dans le • Suivi d’un merge énorme réseau lan, cloné depuis et complexe par personne n’importe quelle – Voir chômage technique machine de développeur (une commande) – Dramatique sur une itération courte ! – Pas d’impact client Et travail dans le train ;-)
  102. 102. Autonomie de l’équipe Si serveur central surchargé, devenant lent• Centralisé (svn, …) • Décentralisé (git, …) – On va ouvrir un ticket – Difficilement auprès des applicable, le serveur sysadmin, puis n’est quasiment pas attendre… sollicité (la majorité des commandes sont locales) – Si besoin, création d’un dépôt proxy interne à l’équipe
  103. 103. Revoir les choix techniques Structuration de la gestion de version sur des portefeuilles de projets• Centralisé (svn, …) • Git – Choix initial structurant – Commandes – Si modifié, perte extrêmement puissante d’historique permettant de fusionner 2 dépôts ou d’en séparer un en 2, en conservant juste l’historique correspondant à chaque moitié – (cas réel !)
  104. 104. Ce que j’entend dans une équipe svn• $#?!! de gestionnaire de version• Oh non ! Bob a encore commité avant moi !• Boutades – « SVN c’est le mal »
  105. 105. Ce que j’entend dans une équipe git• Git, c’est magique !• Ça marche quand même vachement bien leur truc…• Nan, tu peux faire ça avec git ???• C’est trop beau pour être vrai, c’est pas possible – (dit à @nledez hier par un inconditionnel de svn)
  106. 106. Opérations quotidiennes et triviales (moins de 1 minute)• SVN – Checkout – Commit ? (conflits…) – Surtout pas les fusions de branches• Git – Checkout – Commit – Fusion de commits – Fusion de branches • Y compris croisées de l’une à l’autre et de l’autre à l’une – Création d’un nouveau dépôt – Création d’une branche – …
  107. 107. CP OLD, SVN, et GIT• CP OLD est évidemment impossible sur le long terme• SVN ne remplace pas entièrement CP OLD ! – Je veux juste créer un petit programme en 2h, je ne veux pas créer un serveur SVN pour ça – Etc.• Git, si. – Dans le même cas, j’ai le réflexe de créer un dépôt git : « Git init »
  108. 108. Aucun mur ?• Une exception – Les sous modules, le seul « mur » que l’on ce soit pris • Au point d’entacher le reste de la perception de git – La meilleure solution que j’ai trouvé à ce jour pour ce problème complexe – Mais mauvaise ergonomie de la fonctionnalité
  109. 109. Alors, choisissons git ?• Hobby ou Open-Source – Oui, nouvelle référence devant svn, mercurial, bazaar, ou TFS• Pro : Ça dépend de vos contextes – Politique de sécurité de la société • SSH • Disque dur crypté ? – Équipe • Volonté d’y aller – Délais • Si vous maitrisez svn depuis des années, et que vous avez bientôt une livraison, alors non – Etc• Transition douce ? – Git-svn et git-tfs • Ponts entre git et svn/tfs• DVCS alternatifs ? – Mercurial, Plastic-SCM, Kiln …
  110. 110. Pointeurs• Pour approfondir Git plus longuement http://presentation-git.heroku.com
  111. 111. gcollic@gmail.com / @gcollicDES QUESTIONS ?

×