en quoi git serait plus agile que svn ?
DESCRIPTION
Support de la session "En quoi git serait plus agile que svn ?" à Agile Tour 2012TRANSCRIPT
Guillaume CollicActeur de l’agilité
@gcollic
Etc.
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
RÔLES D’UN VCSGestion de source
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.
CPOLDLe gestionnaire de version le plus utilisé au monde
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
Serveur
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Bob
Checkout
Serveur
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Bob
Checkout
V 0.51V 0.51
V 0.51
Serveur
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Bob
V 0.51V 0.51
V 0.51
Serveur
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Bob
V 0.51V 0.51
V 0.51
Serveur
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Bob
Commit
V 0.51V 0.51
V 0.51
Serveur
Commandes de bases
V 0.50
V 0.51
V 0.52
Bob
Commit
V 0.51V 0.51
V 0.51
V 0.54
V 0.53
Serveur
Commandes de bases
V 0.50
V 0.51
V 0.52
Bob
V 0.51V 0.51
V 0.51
V 0.54
V 0.53
Gestion des conflits
Dével.Checkout V 0.54
Commit ? Conflit !
Fusion
V 0.56
Commit ? Succès !
V 0.55 !!
Fusion de 2 versions
Fusion de 2 versionsavec 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)
SVNSubversion, « CVS Done Right »
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
Dével.Checkout V 0.54
Commit ? Conflit !
Fusion
V 0.56
Commit ? Succès !
V 0.55 !!
On a toujours pas commité ! Mise
en commun sans filet de sécurité
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
DVCS
Distributed Version Control SystemGestionnaire de source distribué
Les VCS client - serveur
Serveur
Client de
Bob
Client de
Tom
Client deLéa
Les DVCS
(la plupart du temps)
Dépôt commun
Dépôt de
Bob
Dépôt de
Tom
Dépôt de Léa
Les DVCS
En théorie toutes les configurations sont possibles
Mais ce n’est pas le plus important !
Dépôt commun
Dépôt de Bob(stagiaire de Tom)
Dépôt de
Tom
Dépôt de Léa
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Clone
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Clone
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.53
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.53
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.53
Checkout
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.53
V 0.51V 0.51
V 0.51
Checkout
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.53
V 0.51V 0.51
V 0.51
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.53
V 0.51V 0.51
V 0.51
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.51V 0.51
V 0.51
Commit
V 0.53
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.51V 0.51
V 0.51
Commit
V 0.54
V 0.53
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
V 0.53
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.51V 0.51
V 0.51
V 0.54
V 0.53
Push
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.51V 0.51
V 0.51
V 0.54
V 0.53
Push
V 0.54
V 0.53
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.51V 0.51
V 0.51
V 0.54
V 0.53
V 0.54
V 0.53
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
Clone Checkout
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
Dével.Commit
intermédiaire
Modif A
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
Dépôt de Léa
Modif B Modif A
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
Dével.Commit
intermédiaire
Modif B Modif A
Modif C
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
Modif B Modif A
Modif C
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
Modif B Modif A
Modif C
Fetch
Modif B
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
Modif B Modif A
Modif C
Modif B
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
Modif B Modif A
Modif C
Modif B
Fusion, avec filets de sécuritéFusion
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
Modif B Modif A
Modif C
Modif B
Push
Fusion
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54
Modif A
Modif C
Modif B
Push
Fusion
Dépôt distant
V 0.54
Modif A
Modif C
Modif B
Fusion
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54
Modif A
Modif C
Modif B
Fusion
Dépôt distant
V 0.54
Modif A
Modif C
Modif B
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èmeavec 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 versionsavec l’ancêtre commun
© 2011 - 2012, All The Memes LLC. All Rights Reserved.
GIT"the stupid content tracker"
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 exampleof what not to do;
if in doubt, make theexact 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• …
RETOUR D’EXPÉRIENCEDISCLAIMER : Subjectif
SVN / TFS
• Contexte professionnel
Git : contexte personnel progressifdepuis quelques années
• Articles• Livres• Conférences• Mise en pratique sur des projets personnels
Git : contexte professionneldepuis 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
• Centralisé (svn, …)– Gros ralentissement
dans l’équipe• Suivi d’un merge énorme
et complexe par personne
– Voir chômage technique– Dramatique sur une
itération courte !
• Décentralisé (git, …)– Contournement sur un
nouveau dépôt dans le réseau lan, cloné depuis n’importe quelle machine de développeur (une commande)
– Pas d’impact client
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
Et travail dans le train ;-)
Autonomie de l’équipe
• Centralisé (svn, …)– On va ouvrir un ticket
auprès des sysadmin, puis attendre…
• Décentralisé (git, …)– Difficilement applicable,
le serveur n’est quasiment pas sollicité (la majorité des commandes sont locales)
– Si besoin, création d’un dépôt proxy interne à l’équipe
Si serveur central surchargé, devenant lent
Revoir les choix techniques
• Centralisé (svn, …)– Choix initial structurant– Si modifié, perte
d’historique
• Git– Commandes
extrêmement puissante 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 !)
Structuration de la gestion de version sur des portefeuilles de projets
Ce que j’entenddans une équipe svn
• $#?!! de gestionnaire de version• Oh non ! Bob a encore commité avant moi !• Boutades– « SVN c’est le mal »
Ce que j’entenddans 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
DES QUESTIONS [email protected] / @gcollic