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
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
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 !
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 !
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”
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
• …
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 …