En quoi git serait plus agile que svn ?

Preview:

DESCRIPTION

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

Citation preview

Gestion de source

CPOLD, SVN, GIT

Guillaume COLLICgcollic@gmail.com

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 ?gcollic@gmail.com / @gcollic

Recommended