SlideShare une entreprise Scribd logo
1  sur  120
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 ?

Contenu connexe

En vedette

Git utilisation quotidienne
Git   utilisation quotidienneGit   utilisation quotidienne
Git utilisation quotidienneSylvain Witmeyer
 
Comparison of SVN and Git
Comparison of SVN and GitComparison of SVN and Git
Comparison of SVN and GitDaniel Wieth
 
GitHub - Présentation
GitHub - PrésentationGitHub - Présentation
GitHub - PrésentationDavid RIEHL
 
Présentation Git & GitHub
Présentation Git & GitHubPrésentation Git & GitHub
Présentation Git & GitHubThibault Vlacich
 
Présentation de git
Présentation de gitPrésentation de git
Présentation de gitJulien Blin
 
Introduction à Git (avec PHPStorm)
Introduction à Git (avec PHPStorm)Introduction à Git (avec PHPStorm)
Introduction à Git (avec PHPStorm)Geoffrey Bachelet
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Guillaume Collic
 
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)Ulrich VACHON
 
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 versionsAlice Loeser
 
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é ?Nicolas Ruffel
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Gitmsadouni
 
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 versiongoldoraf
 
Rapport Cigref Agilité dans l'entreprise : modèle de maturité
Rapport Cigref Agilité dans l'entreprise : modèle de maturitéRapport Cigref Agilité dans l'entreprise : modèle de maturité
Rapport Cigref Agilité dans l'entreprise : modèle de maturitépolenumerique33
 
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 gitGeoffrey Bachelet
 
Introduction Professional Scrum Developer for Java
Introduction Professional Scrum Developer for JavaIntroduction Professional Scrum Developer for Java
Introduction Professional Scrum Developer for JavaJoris De Winne
 

En vedette (20)

Git utilisation quotidienne
Git   utilisation quotidienneGit   utilisation quotidienne
Git utilisation quotidienne
 
Comparison of SVN and Git
Comparison of SVN and GitComparison of SVN and Git
Comparison of SVN and Git
 
GitHub - Présentation
GitHub - PrésentationGitHub - Présentation
GitHub - Présentation
 
Présentation Git & GitHub
Présentation Git & GitHubPrésentation Git & GitHub
Présentation Git & GitHub
 
Présentation de git
Présentation de gitPrésentation de git
Présentation de git
 
Tutoriel GIT
Tutoriel GITTutoriel GIT
Tutoriel GIT
 
SVN 2 Git
SVN 2 GitSVN 2 Git
SVN 2 Git
 
Introduction à Git (avec PHPStorm)
Introduction à Git (avec PHPStorm)Introduction à Git (avec PHPStorm)
Introduction à Git (avec PHPStorm)
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
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)
 
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
 
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é ?
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Git
 
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
 
Git l'essentiel
Git l'essentielGit l'essentiel
Git l'essentiel
 
Rapport Cigref Agilité dans l'entreprise : modèle de maturité
Rapport Cigref Agilité dans l'entreprise : modèle de maturitéRapport Cigref Agilité dans l'entreprise : modèle de maturité
Rapport Cigref Agilité dans l'entreprise : modèle de maturité
 
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
 
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
 
GIT / SVN
GIT / SVNGIT / SVN
GIT / SVN
 

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 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. 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
  • 6. Vocabulaire • VCS –Version Control System –Gestionnaire de source –Gestionnaire de version • Ambigüe, source ou binaire ? –Gestionnaire de révision
  • 8.
  • 9.
  • 10.
  • 11. © 2011 - 2012, All The Memes LLC. All Rights Reserved.
  • 12. © 2011 - 2012, All The Memes LLC. All Rights Reserved.
  • 13. Le gestionnaire de version le plus utilisé au monde CPOLD
  • 15. CP OLD src old
  • 16. CP OLD src old
  • 17. CP OLD src old
  • 20. © 2011 - 2012, All The Memes LLC. All Rights Reserved.
  • 21. Un VCS est • Un filet de sécurité pour revenir en arrière
  • 24. src
  • 25. src
  • 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
  • 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 2 versions
  • 42. Fusion de 2 versions avec l’ancêtre commun
  • 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 Vincent Driessen blog post : http://nvie.com/archives/323 (CC BY-SA)
  • 47. Branches et tags Vincent Driessen blog post : http://nvie.com/archives/323 (CC BY-SA)
  • 48. Branches et tags Vincent Driessen blog post : http://nvie.com/archives/323 (CC BY-SA)
  • 49. Subversion, « CVS Done 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 filet de sécurité pour revenir en arrière • Un référentiel commun • Une aide à la gestion des conflits
  • 52. 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
  • 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
  • 57. Distributed Version Control System 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é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 !
  • 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ô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
  • 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ô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
  • 67. 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
  • 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ô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
  • 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ôt distant 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ô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
  • 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ô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
  • 78. 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
  • 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ô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
  • 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 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 !
  • 89. Fusion systématique de 2 versions avec l’ancêtre commun
  • 90. © 2011 - 2012, All The Memes LLC. All Rights Reserved.
  • 91. "the stupid content tracker" GIT
  • 92. Historique des DVCS seuls • … • 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 as an example of what not to do; if in doubt, make the exact opposite decision”
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101. • Une transformation dans 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 gestion des droits ? • Ce n’est pas son rôle – il délègue aux spécialistes • SSH • Gitolite • GitLab • …
  • 104. DISCLAIMER : Subjectif RETOUR D’EXPÉRIENCE
  • 105. SVN / TFS • Contexte professionnel
  • 106. Git : contexte personnel progressif depuis quelques années • Articles • Livres • Conférences • Mise en pratique sur des projets personnels
  • 107. 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
  • 108. Git Extensions Très bien, mature et pédagogique pour les équipes habitués aux interfaces graphiques
  • 109. 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
  • 110. 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 ;-)
  • 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 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 !)
  • 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 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 – …
  • 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 approfondir Git plus longuement http://presentation-git.heroku.com