120
Gestion de source CPOLD, SVN, GIT Guillaume COLLIC [email protected]

En quoi git serait plus agile que svn ?

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: En quoi git serait plus agile que svn ?

Gestion de source

CPOLD, SVN, GIT

Guillaume [email protected]

Page 2: En quoi git serait plus agile que svn ?

Guillaume CollicActeur de l’agilité

@gcollic

Etc.

Page 3: En quoi git serait plus agile que svn ?

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

Page 4: En quoi git serait plus agile que svn ?

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

Page 5: En quoi git serait plus agile que svn ?

RÔLES D’UN VCSGestion de source

Page 6: En quoi git serait plus agile que svn ?

Vocabulaire

• VCS

–Version Control System–Gestionnaire de source–Gestionnaire de version•Ambigüe, source ou binaire ?

–Gestionnaire de révision

Page 7: En quoi git serait plus agile que svn ?

http://www.flickr.com/photos/26628378@N03/2988737872

Page 8: En quoi git serait plus agile que svn ?
Page 9: En quoi git serait plus agile que svn ?
Page 10: En quoi git serait plus agile que svn ?
Page 11: En quoi git serait plus agile que svn ?

© 2011 - 2012, All The Memes LLC. All Rights Reserved.

Page 12: En quoi git serait plus agile que svn ?

© 2011 - 2012, All The Memes LLC. All Rights Reserved.

Page 13: En quoi git serait plus agile que svn ?

CPOLDLe gestionnaire de version le plus utilisé au monde

Page 14: En quoi git serait plus agile que svn ?

CP OLD

src

Page 15: En quoi git serait plus agile que svn ?

CP OLD

src old

Page 16: En quoi git serait plus agile que svn ?

CP OLD

src old

Page 17: En quoi git serait plus agile que svn ?

CP OLD

src old

Page 18: En quoi git serait plus agile que svn ?

CP OLD

old

Page 19: En quoi git serait plus agile que svn ?

CP OLD

src

Page 20: En quoi git serait plus agile que svn ?

© 2011 - 2012, All The Memes LLC. All Rights Reserved.

Page 21: En quoi git serait plus agile que svn ?

Un VCS est

• Un filet de sécurité pour revenir en arrière

Page 22: En quoi git serait plus agile que svn ?

http://www.flickr.com/photos/26628378@N03/2988737872

Page 23: En quoi git serait plus agile que svn ?

http://www.flickr.com/photos/26628378@N03/2988737872

Page 24: En quoi git serait plus agile que svn ?

src

Page 25: En quoi git serait plus agile que svn ?

src

Page 26: En quoi git serait plus agile que svn ?

src livraison1 livraison2

Page 27: En quoi git serait plus agile que svn ?

© 2011 - 2012, All The Memes LLC. All Rights Reserved.

Page 28: En quoi git serait plus agile que svn ?

Un VCS est

• Un filet de sécurité pour revenir en arrière• Un référentiel commun

Page 29: En quoi git serait plus agile que svn ?

Et là…

Page 30: En quoi git serait plus agile que svn ?

Mon travail, écrasé!

Page 31: En quoi git serait plus agile que svn ?

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)• …

Page 32: En quoi git serait plus agile que svn ?

VCS client - serveur

Serveur

Bob Tom Léa

Page 33: En quoi git serait plus agile que svn ?

Serveur

Commandes de bases

V 0.50

V 0.51

V 0.52

V 0.53

Bob

Checkout

Page 34: En quoi git serait plus agile que svn ?

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

Page 35: En quoi git serait plus agile que svn ?

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

Page 36: En quoi git serait plus agile que svn ?

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

Page 37: En quoi git serait plus agile que svn ?

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

Page 38: En quoi git serait plus agile que svn ?

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

Page 39: En quoi git serait plus agile que svn ?

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

Page 40: En quoi git serait plus agile que svn ?

Gestion des conflits

Dével.Checkout V 0.54

Commit ? Conflit !

Fusion

V 0.56

Commit ? Succès !

V 0.55 !!

Page 41: En quoi git serait plus agile que svn ?

Fusion de 2 versions

Page 42: En quoi git serait plus agile que svn ?

Fusion de 2 versionsavec l’ancêtre commun

Page 43: En quoi git serait plus agile que svn ?

Exemple d’historique

Page 44: En quoi git serait plus agile que svn ?

Un VCS est

• Un filet de sécurité pour revenir en arrière• Un référentiel commun• Une aide à la gestion des conflits

Page 45: En quoi git serait plus agile que svn ?

© 2011 - 2012, All The Memes LLC. All Rights Reserved.

Page 46: En quoi git serait plus agile que svn ?

Branches et tags

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

Page 47: En quoi git serait plus agile que svn ?

Branches et tags

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

Page 48: En quoi git serait plus agile que svn ?

Branches et tags

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

Page 49: En quoi git serait plus agile que svn ?

SVNSubversion, « CVS Done Right »

Page 50: En quoi git serait plus agile que 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

Page 51: En quoi git serait plus agile que svn ?

SVN

• Un filet de sécurité pour revenir en arrière• Un référentiel commun• Une aide à la gestion des conflits

Page 52: En quoi git serait plus agile que svn ?

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

Page 53: En quoi git serait plus agile que svn ?

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é

Page 54: En quoi git serait plus agile que svn ?

Secret de codeurs

http://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html

Page 55: En quoi git serait plus agile que svn ?

http://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html

Page 56: En quoi git serait plus agile que svn ?

http://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html

Page 57: En quoi git serait plus agile que svn ?

DVCS

Distributed Version Control SystemGestionnaire de source distribué

Page 58: En quoi git serait plus agile que svn ?

Les VCS client - serveur

Serveur

Client de

Bob

Client de

Tom

Client deLéa

Page 59: En quoi git serait plus agile que svn ?

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

Page 60: En quoi git serait plus agile que svn ?

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

Page 61: En quoi git serait plus agile que svn ?

Dépôt distant

Commandes de bases

V 0.50

V 0.51

V 0.52

V 0.53

Clone

Page 62: En quoi git serait plus agile que svn ?

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

Page 63: En quoi git serait plus agile que svn ?

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

Page 64: En quoi git serait plus agile que svn ?

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

Page 65: En quoi git serait plus agile que svn ?

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

Page 66: En quoi git serait plus agile que svn ?

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

Page 67: En quoi git serait plus agile que svn ?

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

Page 68: En quoi git serait plus agile que svn ?

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

Page 69: En quoi git serait plus agile que svn ?

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

Page 70: En quoi git serait plus agile que svn ?

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

Page 71: En quoi git serait plus agile que svn ?

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

Page 72: En quoi git serait plus agile que svn ?

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

Page 73: En quoi git serait plus agile que svn ?

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

Page 74: En quoi git serait plus agile que svn ?

Dépôt distant

Gestion des conflits

Dépôt local

V 0.51V 0.51

V 0.51V 0.54 V 0.54

Page 75: En quoi git serait plus agile que svn ?

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

Page 76: En quoi git serait plus agile que svn ?

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

Page 77: En quoi git serait plus agile que svn ?

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

Page 78: En quoi git serait plus agile que svn ?

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

Page 79: En quoi git serait plus agile que svn ?

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

Page 80: En quoi git serait plus agile que svn ?

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

Page 81: En quoi git serait plus agile que svn ?

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

Page 82: En quoi git serait plus agile que svn ?

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

Page 83: En quoi git serait plus agile que svn ?

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

Page 84: En quoi git serait plus agile que svn ?

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

Page 85: En quoi git serait plus agile que svn ?

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.

Page 86: En quoi git serait plus agile que svn ?

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 !

Page 87: En quoi git serait plus agile que svn ?

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 !

Page 88: En quoi git serait plus agile que svn ?

Exemple d’historique

Page 89: En quoi git serait plus agile que svn ?

Fusion systématique de 2 versionsavec l’ancêtre commun

Page 90: En quoi git serait plus agile que svn ?

© 2011 - 2012, All The Memes LLC. All Rights Reserved.

Page 91: En quoi git serait plus agile que svn ?

GIT"the stupid content tracker"

Page 92: En quoi git serait plus agile que svn ?

Historique des DVCS seuls

• …• BitKeeper (1998)• Monotone (2000)• Mercurial (2005)• Bazaar (2005)• Git (2005)• …

Page 93: En quoi git serait plus agile que svn ?

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, …

Page 94: En quoi git serait plus agile que svn ?

“Take CVS as an exampleof what not to do;

if in doubt, make theexact opposite decision”

Page 95: En quoi git serait plus agile que svn ?
Page 96: En quoi git serait plus agile que svn ?
Page 97: En quoi git serait plus agile que svn ?
Page 98: En quoi git serait plus agile que svn ?
Page 99: En quoi git serait plus agile que svn ?
Page 100: En quoi git serait plus agile que svn ?
Page 101: En quoi git serait plus agile que svn ?

• Une transformation dans le monde open source

Page 102: En quoi git serait plus agile que svn ?

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

Page 103: En quoi git serait plus agile que svn ?

Authentification et gestion des droits ?

• Ce n’est pas son rôle– il délègue aux spécialistes• SSH• Gitolite• GitLab• …

Page 104: En quoi git serait plus agile que svn ?

RETOUR D’EXPÉRIENCEDISCLAIMER : Subjectif

Page 105: En quoi git serait plus agile que svn ?

SVN / TFS

• Contexte professionnel

Page 106: En quoi git serait plus agile que svn ?

Git : contexte personnel progressifdepuis quelques années

• Articles• Livres• Conférences• Mise en pratique sur des projets personnels

Page 107: En quoi git serait plus agile que svn ?

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

Page 108: En quoi git serait plus agile que svn ?

Git Extensions

Très bien, mature et pédagogique pour les équipes habitués aux interfaces graphiques

Page 109: En quoi git serait plus agile que svn ?

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

Page 110: En quoi git serait plus agile que svn ?

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 ;-)

Page 111: En quoi git serait plus agile que svn ?

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

Page 112: En quoi git serait plus agile que svn ?

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

Page 113: En quoi git serait plus agile que svn ?

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 »

Page 114: En quoi git serait plus agile que svn ?

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)

Page 115: En quoi git serait plus agile que 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– …

Page 116: En quoi git serait plus agile que svn ?

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 »

Page 117: En quoi git serait plus agile que svn ?

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é

Page 118: En quoi git serait plus agile que svn ?

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 …

Page 119: En quoi git serait plus agile que svn ?

Pointeurs

• Pour approfondir Git plus longuement

http://presentation-git.heroku.com

Page 120: En quoi git serait plus agile que svn ?

DES QUESTIONS [email protected] / @gcollic