Gestion de source

  CPOLD, SVN, GIT



                     Guillaume COLLIC
                    gcollic@gmail.com
Guillaume Collic
           Acteur de l’agilité




                                 Etc.

@gcollic
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
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
Gestion de source

RÔLES D’UN VCS
Vocabulaire
• VCS
  –Version Control System
  –Gestionnaire de source
  –Gestionnaire de version
    • Ambigüe, source ou binaire ?
  –Gestionnaire de révision
http://www.flickr.com/photos/26628378@N03/2988737872
© 2011 - 2012, All The Memes LLC. All Rights Reserved.
© 2011 - 2012, All The Memes LLC. All Rights Reserved.
Le gestionnaire de version le plus utilisé au monde

CPOLD
CP OLD




src
CP OLD




src   old
CP OLD




src   old
CP OLD




src   old
CP OLD




old
CP OLD




src
© 2011 - 2012, All The Memes LLC. All Rights Reserved.
Un VCS est
• Un filet de sécurité pour revenir en arrière
http://www.flickr.com/photos/26628378@N03/2988737872
http://www.flickr.com/photos/26628378@N03/2988737872
src
src
src   livraison1   livraison2
© 2011 - 2012, All The Memes LLC. All Rights Reserved.
Un VCS est
• Un filet de sécurité pour revenir en arrière
• Un référentiel commun
Et là…
Mon travail, écrasé!
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)
• …
VCS client - serveur

        Serveur




Bob      Tom      Léa
Commandes de bases
             Checkout
Serveur                   Bob
V 0.50



V 0.51



V 0.52



V 0.53
Commandes de bases
             Checkout
Serveur                   Bob
V 0.50

                        V 0.51
                         V 0.51
                           V 0.51
V 0.51



V 0.52



V 0.53
Commandes de bases

Serveur                   Bob
V 0.50

                      V 0.51
                       V 0.51
                         V 0.51
V 0.51



V 0.52



V 0.53
Commandes de bases

Serveur                   Bob
V 0.50

                      V 0.51
                       V 0.51
                         V 0.51
V 0.51



V 0.52



V 0.53
Commandes de bases
             Commit
Serveur                   Bob
V 0.50

                      V 0.51
                       V 0.51
                         V 0.51
V 0.51



V 0.52



V 0.53
Commandes de bases
             Commit
Serveur                   Bob
V 0.50

                      V 0.51
                       V 0.51
                         V 0.51
V 0.51



V 0.52



V 0.53


V 0.54
Commandes de bases

Serveur                   Bob
V 0.50

                      V 0.51
                       V 0.51
                         V 0.51
V 0.51



V 0.52



V 0.53


V 0.54
Gestion des conflits
Checkout   V 0.54            Dével.




                            Commit ?
                V 0.55 !!
                             Conflit !



                                      Fusion



                            Commit ?
                             Succès !

           V 0.56
Fusion de 2 versions
Fusion de 2 versions
avec l’ancêtre commun
Exemple d’historique
Un VCS est
• Un filet de sécurité pour revenir en arrière
• Un référentiel commun
• Une aide à la gestion des conflits
© 2011 - 2012, All The Memes LLC. All Rights Reserved.
Branches et tags




Vincent Driessen blog post : http://nvie.com/archives/323 (CC BY-SA)
Branches et tags




Vincent Driessen blog post : http://nvie.com/archives/323 (CC BY-SA)
Branches et tags




Vincent Driessen blog post : http://nvie.com/archives/323 (CC BY-SA)
Subversion, « CVS Done Right »

SVN
Gestionnaire de source
• Un filet de sécurité pour revenir en arrière
• Un référentiel commun
• Une aide à la gestion des conflits
SVN
• Un filet de sécurité pour revenir en arrière
• Un référentiel commun
• Une aide à la gestion des conflits
Problème 1
• Si je commit, je met en commun
• Si je met en commun, je commit

Filet de sécurité ⇒ commit ⇒ mise en commun
Problème 2
Checkout   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
Secret de codeurs




http://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html
http://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html
http://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html
Distributed Version Control System
Gestionnaire de source distribué

DVCS
Les VCS client - serveur

           Serveur




  Client    Client   Client
    de        de       de
   Bob       Tom      Léa
Les DVCS

            Dépôt
           commun




Dépôt       Dépôt     Dépôt
  de          de       de
 Bob         Tom       Léa


   (la plupart du temps)
Les DVCS
En 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 !
Commandes de bases
                 Clone


Dépôt distant
   V 0.50



   V 0.51



   V 0.52



   V 0.53
Commandes de bases
                 Clone


Dé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
Commandes de bases

Dé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
Commandes de bases
                                     Checkout

Dé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
Commandes de bases
                                     Checkout

Dé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
Commandes de bases

Dé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
Commandes de bases

Dé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
Commandes de bases
                                     Commit

Dé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
Commandes de bases
                                     Commit

Dé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
Commandes de bases
                    Push

Dé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
Commandes de bases
                    Push

Dé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
Commandes de bases

Dé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
Gestion des conflits
                 Clone                 Checkout

Dépôt distant            Dépôt local
   V 0.54                  V 0.54                 V 0.51
                                                   V 0.51
                                                     V 0.51
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
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 A                  Dével.
                                         Commit
                                      intermédiaire
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




Dépôt
de Léa
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 C               Dével.
                                         Commit
                                      intermédiaire
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 C
Gestion des conflits
                 Fetch

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 B      Modif A


                                      Modif C
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 B      Modif A


                                     Modif C
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 B        Modif A


                                       Modif C

                                                    Fusion, avec
                                  Fusion         filets de sécurité
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.51


   Modif B               Modif B        Modif A


                                        Modif C


                                   Fusion
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.51


Modif B        Modif A          Modif B        Modif A


               Modif C                         Modif C


          Fusion                          Fusion
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                                  Fusion

L’historique est clair, on voit les modifications de chacun avant
fusion, et quels décisions ont été prise lors de la fusion
Rappel du problème
       avec un VCS Client-Serveur
• Si je commit, je met en commun
• Si je met en commun, je commit

Ce 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.
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 !
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 !
Exemple d’historique
Fusion systématique de 2 versions
     avec l’ancêtre commun
© 2011 - 2012, All The Memes LLC. All Rights Reserved.
"the stupid content tracker"

GIT
Historique des DVCS seuls
•   …
•   BitKeeper (1998)
•   Monotone (2000)
•   Mercurial (2005)
•   Bazaar (2005)
•   Git (2005)
•   …
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, …
“Take CVS as an example
    of what not to do;
  if in doubt, make the
exact opposite decision”
• Une transformation dans le monde open
  source
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
Authentification et gestion des droits ?
• Ce n’est pas son rôle
  – il délègue aux spécialistes
     •   SSH
     •   Gitolite
     •   GitLab
     •   …
DISCLAIMER : Subjectif

RETOUR D’EXPÉRIENCE
SVN / TFS
• Contexte professionnel
Git : contexte personnel progressif
          depuis quelques années
•   Articles
•   Livres
•   Conférences
•   Mise en pratique sur des projets personnels
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
Git Extensions




Très bien, mature et pédagogique pour les équipes habitués aux interfaces graphiques
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
Livraison fréquente
Si 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 ;-)
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
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 !)
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 »
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)
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
   – …
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 »
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é
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 …
Pointeurs
• Pour approfondir Git plus longuement


 http://presentation-git.heroku.com
gcollic@gmail.com / @gcollic

DES QUESTIONS ?

En quoi git serait plus agile que svn ?

  • 1.
    Gestion de source CPOLD, SVN, GIT Guillaume COLLIC gcollic@gmail.com
  • 2.
    Guillaume Collic Acteur de l’agilité Etc. @gcollic
  • 3.
    Sondage • Gestion deversion ? • 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.
    Plan • Rôles d’unVCS – Les bases, mais important pour la suite • Client-Serveur : SVN • Distribué : Git • En contexte agile ? • Retour d’expérience • Questions
  • 5.
  • 6.
    Vocabulaire • VCS –Version Control System –Gestionnaire de source –Gestionnaire de version • Ambigüe, source ou binaire ? –Gestionnaire de révision
  • 7.
  • 11.
    © 2011 -2012, All The Memes LLC. All Rights Reserved.
  • 12.
    © 2011 -2012, All The Memes LLC. All Rights Reserved.
  • 13.
    Le gestionnaire deversion le plus utilisé au monde CPOLD
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
    © 2011 -2012, All The Memes LLC. All Rights Reserved.
  • 21.
    Un VCS est •Un filet de sécurité pour revenir en arrière
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
    src livraison1 livraison2
  • 27.
    © 2011 -2012, All The Memes LLC. All Rights Reserved.
  • 28.
    Un VCS est •Un filet de sécurité pour revenir en arrière • Un référentiel commun
  • 29.
  • 30.
  • 31.
    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) • …
  • 32.
    VCS client -serveur Serveur Bob Tom Léa
  • 33.
    Commandes de bases Checkout Serveur Bob V 0.50 V 0.51 V 0.52 V 0.53
  • 34.
    Commandes de bases Checkout Serveur Bob V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.53
  • 35.
    Commandes de bases Serveur Bob V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.53
  • 36.
    Commandes de bases Serveur Bob V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.53
  • 37.
    Commandes de bases Commit Serveur Bob V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.53
  • 38.
    Commandes de bases Commit Serveur Bob V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.53 V 0.54
  • 39.
    Commandes de bases Serveur Bob V 0.50 V 0.51 V 0.51 V 0.51 V 0.51 V 0.52 V 0.53 V 0.54
  • 40.
    Gestion des conflits Checkout V 0.54 Dével. Commit ? V 0.55 !! Conflit ! Fusion Commit ? Succès ! V 0.56
  • 41.
    Fusion de 2versions
  • 42.
    Fusion de 2versions avec l’ancêtre commun
  • 43.
  • 44.
    Un VCS est •Un filet de sécurité pour revenir en arrière • Un référentiel commun • Une aide à la gestion des conflits
  • 45.
    © 2011 -2012, All The Memes LLC. All Rights Reserved.
  • 46.
    Branches et tags VincentDriessen blog post : http://nvie.com/archives/323 (CC BY-SA)
  • 47.
    Branches et tags VincentDriessen blog post : http://nvie.com/archives/323 (CC BY-SA)
  • 48.
    Branches et tags VincentDriessen blog post : http://nvie.com/archives/323 (CC BY-SA)
  • 49.
    Subversion, « CVSDone Right » SVN
  • 50.
    Gestionnaire de source •Un filet de sécurité pour revenir en arrière • Un référentiel commun • Une aide à la gestion des conflits
  • 51.
    SVN • Un filetde sécurité pour revenir en arrière • Un référentiel commun • Une aide à la gestion des conflits
  • 52.
    Problème 1 • Sije commit, je met en commun • Si je met en commun, je commit Filet de sécurité ⇒ commit ⇒ mise en commun
  • 53.
    Problème 2 Checkout 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
  • 54.
  • 55.
  • 56.
  • 57.
    Distributed Version ControlSystem Gestionnaire de source distribué DVCS
  • 58.
    Les VCS client- serveur Serveur Client Client Client de de de Bob Tom Léa
  • 59.
    Les DVCS Dépôt commun Dépôt Dépôt Dépôt de de de Bob Tom Léa (la plupart du temps)
  • 60.
    Les DVCS En théorietoutes 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 !
  • 61.
    Commandes de bases Clone Dépôt distant V 0.50 V 0.51 V 0.52 V 0.53
  • 62.
    Commandes de bases Clone Dé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
  • 63.
    Commandes de bases Dépôtdistant 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
  • 64.
    Commandes de bases Checkout Dé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
  • 65.
    Commandes de bases Checkout Dé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.
    Commandes de bases Dépôtdistant 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
  • 67.
    Commandes de bases Dépôtdistant 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
  • 68.
    Commandes de bases Commit Dé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
  • 69.
    Commandes de bases Commit Dé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
  • 70.
    Commandes de bases Push Dé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
  • 71.
    Commandes de bases Push Dé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
  • 72.
    Commandes de bases Dépôtdistant 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
  • 73.
    Gestion des conflits Clone Checkout Dépôt distant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51
  • 74.
    Gestion des conflits Dépôtdistant Dépôt local V 0.54 V 0.54 V 0.51 V 0.51 V 0.51
  • 75.
    Gestion des conflits Dépôtdistant 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
  • 76.
    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 Dépôt de Léa
  • 77.
    Gestion des conflits Dépôtdistant 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
  • 78.
    Gestion des conflits Dépôtdistant 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
  • 79.
    Gestion des conflits Fetch 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 B Modif A Modif C
  • 80.
    Gestion des conflits Dépôtdistant 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
  • 81.
    Gestion des conflits Dépôtdistant 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é
  • 82.
    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.51 Modif B Modif B Modif A Modif C Fusion
  • 83.
    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.51 Modif B Modif A Modif B Modif A Modif C Modif C Fusion Fusion
  • 84.
    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 Fusion L’historique est clair, on voit les modifications de chacun avant fusion, et quels décisions ont été prise lors de la fusion
  • 85.
    Rappel du problème avec un VCS Client-Serveur • Si je commit, je met en commun • Si je met en commun, je commit Ce 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.
  • 86.
    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 !
  • 87.
    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 !
  • 88.
  • 89.
    Fusion systématique de2 versions avec l’ancêtre commun
  • 90.
    © 2011 -2012, All The Memes LLC. All Rights Reserved.
  • 91.
    "the stupid contenttracker" GIT
  • 92.
    Historique des DVCSseuls • … • BitKeeper (1998) • Monotone (2000) • Mercurial (2005) • Bazaar (2005) • Git (2005) • …
  • 93.
    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, …
  • 94.
    “Take CVS asan example of what not to do; if in doubt, make the exact opposite decision”
  • 101.
    • Une transformationdans le monde open source
  • 102.
    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
  • 103.
    Authentification et gestiondes droits ? • Ce n’est pas son rôle – il délègue aux spécialistes • SSH • Gitolite • GitLab • …
  • 104.
  • 105.
    SVN / TFS •Contexte professionnel
  • 106.
    Git : contextepersonnel progressif depuis quelques années • Articles • Livres • Conférences • Mise en pratique sur des projets personnels
  • 107.
    Git : contexteprofessionnel 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
  • 108.
    Git Extensions Très bien,mature et pédagogique pour les équipes habitués aux interfaces graphiques
  • 109.
    Contexte agile • Hygiènedu 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
  • 110.
    Livraison fréquente Si serveurcentral 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 ;-)
  • 111.
    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
  • 112.
    Revoir les choixtechniques 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 !)
  • 113.
    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 »
  • 114.
    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)
  • 115.
    Opérations quotidiennes ettriviales (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 – …
  • 116.
    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 »
  • 117.
    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é
  • 118.
    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 …
  • 119.
    Pointeurs • Pour approfondirGit plus longuement http://presentation-git.heroku.com
  • 120.