Code/Developpement
Quand Git rencontre TFS,
que peut-on en attendre ?
Guillaume Collic & François Bouteruche
Code/developpement#mstechdays
FrançoisBouteruche
GuillaumeCollic
Casting
Code/developpement#mstechdays
• Architecte .NET et évangéliste ALM
• Administrateur Cloud TFS OBS• http://francoisbouteruche.wordpress.
com
• @fbouteruche
François Bouteruche
Code/developpement#mstechdays
• Développeur et Coach Agile• Microsoft ALM MVP• http://www.guillaumecollic.com• [email protected]• @gcollic• Indépendant
Guillaume Collic
Code/developpement#mstechdays
• 45 minutes, c’est court !• Vision globale• Pointeurs
Objectifs
Code/developpement#mstechdays
• Ce que l'on attend d'un gestionnaire de source (VCS)
• Réponses différentes des VCS distribués (DVCS) à ces attentes
• Travailler avec Git et TFS au quotidien• Pour aller plus loin
Plan
Code/developpement#mstechdays
Code/developpement#mstechdays
✔ Tests├✔ Test1 Success├✔ Test2 Success├✔ Test3 Success
Code/developpement#mstechdays
✘ Tests 1 test failed├✔ Test1 Success├✔ Test2 Success├✔ Test3 Success├✘ Test4 Failed
Code/developpement#mstechdays
✘ Tests 4 tests failed├✘ Test1 Failed├✘ Test2 Failed├✘ Test3 Failed├✘ Test4 Failed
Code/developpement#mstechdays
Code/developpement#mstechdays
Code/developpement#mstechdays
Code/developpement#mstechdays
CPOLD
Le gestionnaire de source le plus utilisé au monde
Code/developpement#mstechdays
CP OLD
src
✔ Tests├✔ Test1 Success├✔ Test2 Success├✔ Test3 Success
Code/developpement#mstechdays
CP OLD
src old
✔ Tests├✔ Test1 Success├✔ Test2 Success├✔ Test3 Success
Code/developpement#mstechdays
CP OLD
src old
✘ Tests 1 test failed├✔ Test1 Success├✔ Test2 Success├✔ Test3 Success├✘ Test4 Failed
Code/developpement#mstechdays
CP OLD
src old
✘ Tests 4 tests failed├✘ Test1 Failed├✘ Test2 Failed├✘ Test3 Failed├✘ Test4 Failed
Code/developpement#mstechdays
CP OLD
old
Code/developpement#mstechdays
CP OLD
src
✔ Tests├✔ Test1 Success├✔ Test2 Success├✔ Test3 Success
Code/developpement#mstechdays
Code/developpement#mstechdays
• Un filet de sécurité pour revenir en arrière
Un VCS est
Code/developpement#mstechdays
Code/developpement#mstechdays
src
Code/developpement#mstechdays
src
Code/developpement#mstechdays
src livraison1 livraison2
Code/developpement#mstechdays
Code/developpement#mstechdays
• Un filet de sécurité pour revenir en arrière
• Un référentiel commun
Un VCS est
Code/developpement#mstechdays
Et là …
Code/developpement#mstechdays
Code/developpement#mstechdays
Mon travail !Écrasé !
Code/developpement#mstechdays
Outils dédiés
1990 1994 2000 2005 2014
CVS
TFVC( )
Code/developpement#mstechdays
VCS client – serveur (centralisé)
Serveur
Bob Tom Léa
Code/developpement#mstechdays
Serveur
Commandes de bases
V 0.50
V 0.51
V 0.52
Bob
Get
Code/developpement#mstechdays
Commandes de bases
Bob
Get
V 0.51V 0.51
V 0.51
Serveur
V 0.50
V 0.51
V 0.52
Code/developpement#mstechdays
Commandes de bases
Bob
V 0.51V 0.51
V 0.51
Serveur
V 0.50
V 0.51
V 0.52
Code/developpement#mstechdays
Commandes de bases
Bob
V 0.51V 0.51
V 0.51
(Checkout)
Serveur
V 0.50
V 0.51
V 0.52
Code/developpement#mstechdays
Commandes de bases
Bob
Checkin
V 0.51V 0.51
V 0.51
Serveur
V 0.50
V 0.51
V 0.52
Code/developpement#mstechdays
Serveur
Commandes de bases
V 0.50
V 0.51
V 0.52
Bob
Checkin
V 0.51V 0.51
V 0.51
V 0.53
Code/developpement#mstechdays
Commandes de bases
Bob
V 0.51V 0.51
V 0.51
Serveur
V 0.50
V 0.51
V 0.52
V 0.53
Code/developpement#mstechdays
Gestion des conflitsDével.Get V 0.53
Checkin? Conflit !
Fusion
V 0.55
Checkin? Succès !
V 0.54 !!
Code/developpement#mstechdays
• Un filet de sécurité pour revenir en arrière
• Un référentiel commun• Une aide à la gestion des conflits
Un VCS est
Code/developpement#mstechdays
Code/developpement#mstechdays
• Un filet de sécurité pour revenir en arrière
• Un référentiel commun• Une aide à la gestion des conflits
Un VCS est
Code/developpement#mstechdays
Filet de sécurité⇒ commit
⇒ mise en commun
Problème 1
Code/developpement#mstechdays
Problème 2Dével.Get V 0.53
Checkin? Conflit !
Fusion
V 0.55
Checkin? Succès !
V 0.54 !!
On a toujours pas commité ! Mise en commun sans filet
de sécurité
Code/developpement#mstechdays
Secret de codeurs
http://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html
Code/developpement#mstechdays
Secret de codeurs
http://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html
Code/developpement#mstechdays
Secret de codeurs
http://geekandpoke.typepad.com/geekandpoke/2010/10/being-a-code-made-easy-chapter-1.html
Code/developpement#mstechdays
DVCS
Gestionnaire de source distribué
Code/developpement#mstechdays
Les VCS client - serveur
Serveur
Bob Tom Léa
Code/developpement#mstechdays
Bob Tom Léa
Les DVCS (VCS distribués / décentralisés)
Serveur
Bob Tom Léa
Code/developpement#mstechdays
• En théorie toutes les configurations sont possibles
• Mais ce n’est pas le plus important en entreprise !
Les DVCS (VCS distribués / décentralisés)
Dépôt officiel
DéveloppeurResponsable
module AResponsable module B
Azure
Code/developpement#mstechdays
Bob Tom Léa
• la plupart du temps !
Les DVCS (VCS distribués / décentralisés)
Serveur
Bob Tom Léa
Code/developpement#mstechdays
Dépôt distant
Commandes de bases
V 0.50
V 0.51
V 0.52
Clone
Code/developpement#mstechdays
Commandes de basesClone
Dépôt distantV 0.50
V 0.51
V 0.52
Dépôt local
V 0.50
V 0.51
V 0.52
Code/developpement#mstechdays
Commandes de bases
Dépôt distantV 0.50
V 0.51
V 0.52
Dépôt local
V 0.50
V 0.51
V 0.52
Code/developpement#mstechdays
Commandes de bases
Checkout
Dépôt distantV 0.50
V 0.51
V 0.52
Dépôt local
V 0.50
V 0.51
V 0.52
Code/developpement#mstechdays
Commandes de bases
V 0.51V 0.51
V 0.51
Checkout
Dépôt distantV 0.50
V 0.51
V 0.52
Dépôt local
V 0.50
V 0.51
V 0.52
Code/developpement#mstechdays
Commandes de bases
V 0.51V 0.51
V 0.51
Dépôt distantV 0.50
V 0.51
V 0.52
Dépôt local
V 0.50
V 0.51
V 0.52
Code/developpement#mstechdays
Commandes de bases
V 0.51V 0.51
V 0.51
Dépôt distantV 0.50
V 0.51
V 0.52
Dépôt local
V 0.50
V 0.51
V 0.52
Code/developpement#mstechdays
Commandes de bases
V 0.51V 0.51
V 0.51
Commit
Dépôt distantV 0.50
V 0.51
V 0.52
Dépôt local
V 0.50
V 0.51
V 0.52
Code/developpement#mstechdays
Commandes de bases
V 0.51V 0.51
V 0.51
Commit
Dépôt distantV 0.50
V 0.51
V 0.52
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.54
Code/developpement#mstechdays
Commandes de bases
V 0.51V 0.51
V 0.51
Push
Dépôt distantV 0.50
V 0.51
V 0.52
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.54
Code/developpement#mstechdays
Commandes de bases
V 0.51V 0.51
V 0.51
Push
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.54
Dépôt distantV 0.50
V 0.51
V 0.52
V 0.54
Code/developpement#mstechdays
Commandes de bases
V 0.51V 0.51
V 0.51
Dépôt local
V 0.50
V 0.51
V 0.52
V 0.54
Dépôt distantV 0.50
V 0.51
V 0.52
V 0.54
Code/developpement#mstechdays
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
FetchCheckou
t
Code/developpement#mstechdays
Dépôt distant
Gestion des conflits
Dépôt local
V 0.51V 0.51
V 0.51V 0.54 V 0.54
Code/developpement#mstechdays
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
Code/developpement#mstechdays
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
Code/developpement#mstechdays
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
Code/developpement#mstechdays
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
Code/developpement#mstechdays
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
Code/developpement#mstechdays
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
Code/developpement#mstechdays
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
MergeFusion
=> avec filets de sécurité
Code/developpement#mstechdays
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
Code/developpement#mstechdays
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
Code/developpement#mstechdays
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
Code/developpement#mstechdays
• Comme avant– Je pousse sur le
référentiel commun– Dès que possible– En respectant les
critères de mon organisation• Compilation• Tests unitaires• Qualité du code
Bob Tom Léa
DVCS : workflow organisationnel
Dépôt commun
Dépôt de Bob
Dépôt de
Tom
Dépôt de Léa
Code/developpement#mstechdays
• En plus, j’ai gagné le commit local– Autant de filet de sécurité
que voulu– Pas forcément à la cible
finale– Des commandes qui
deviennent quasi-instantanées car locales• Commit, log, diff…
Bob Tom Léa
DVCS : workflow personnel
Dépôt commun
Dépôt de Bob
Dépôt de
Tom
Dépôt de Léa
Code/developpement#mstechdays
Code/developpement#mstechdays
TFS 2013
Éléments de
travail
Gestion de version
VCS :TFVC
DVCS :Git
Build …
démo
Code/developpement#mstechdays
TRAVAILLER AVEC GIT ET TFSAU QUOTIDIENUne évolution oui, une révolution non !
Code/developpement#mstechdays
• Mon client préféré® veut faire des évolutions sur son application– il souhaite que je parte du code de l’application
existante– il souhaite que je travaille sur mes infrastructures de
développement– il souhaite pouvoir récupérer à tout moment le code
source et l’historique de son évolution
• Tiens, ça m’évoque les problèmes de réversibilité et de reprise de TMA !?
Au début, il y avait du code source
Code/developpement#mstechdays
• Dans le meilleur des cas, Mon client préféré® est déjà sous Git– Super, je vais juste à avoir à cloner son dépôt et
à l’intégrer dans mon dépôt TFS
• Dans le pire des cas, mon client utilise la méthode CP old et je vais créer moi-même un dépôt Git
Au début, il y avait du code source
Code/developpement#mstechdays
• Dans TFS, tout se passe dans les projets d’équipe
N’oublions pas de créer le projet d’équipe
Code/developpement#mstechdays
• On clone le dépôt distant en local
Récupérons le dépôt de Mon client préféré®
Code/developpement#mstechdays
• On reconfigure l’url d’origine du dépôt local avec celle du dépôt TFS
Initialisons notre dépôt TFS
Code/developpement#mstechdays
• On synchronise notre dépôt local avec le dépôt TFS
Initialisons notre dépôt TFS
Code/developpement#mstechdays
• Dans la base de données SQL Server !• L’intégration de Git avec TFS est
transparente du point de vue du plan de sauvegarde
• L’intégralité du dépôt est sauvegardé– Dans SQL Server– Sur chaque poste ayant un clone du dépôt (!
Sécurité !)
Mais où est stocké mon dépôt TFS
Code/developpement#mstechdays
• Vous pouvez (devez ?) associez un work item– À votre commit
• Quand vous avez fini de développez une feature dans une branche c’est le moment de merger avec la branche master
• Vos collègues n’ont plus qu’à puller
Je commit, je push, tu pull
Code/developpement#mstechdays
• Les membres de l’équipe peuvent cloner le dépôt TFS
Et maintenant, collaborons !
Code/developpement#mstechdays
• N’ayez plus peur de faire des branches– Elles sont légères– Le merge est vraiment performant– Elles peuvent être locales (personne ne verra
que vous êtes branchés)– Elles peuvent être publiées pour partager
• N’hésitez plus à brancher chaque feature
Git et TFS, ça me branche !
Code/developpement#mstechdays
LE JEU DES 7 DIFFÉRENCES
Code/developpement#mstechdays
• TFVC– Get, checkout, …
• Git pur– Pull, checkout, commit, …
• Git dans Visual Studio– Sync, commit, …
=> Notions différentes
Le vocabulaire
Code/developpement#mstechdays
• Gated Check-In• Code Review• File History Annotation• My work• Source Control Explorer• Pas de multi-remote
Git dans VS ne permet pas encore tout
Code/developpement#mstechdays
FAIRE LE SAUT
Être outillé
Code/developpement#mstechdays
TFVC• Un seul gros dépôt de
source
• Des dossiers pour les différentes parties
• Mapping partiel de sous dossiers
• Pas de problème technique pour mettre de gros binaires
Git• Séparer en plusieurs petits
dépôts
• Pas de clone partiel : tout ou rien
• Pas de gros binaires
Structuration de vos (gros) projets
Code/developpement#mstechdays
Visual Studio Git Extensions
Attention aux faux-amis
Code/developpement#mstechdays
Git Extensions (ou d’autres, SourceTree, CLI, etc)
Très bien, mature et pédagogique pour les équipes habitués aux interfaces graphiques
• Rebase• etc
Code/developpement#mstechdays
Construisons un pont entre Git et TFVC
Code/developpement#mstechdays
• http://git-tfs.com• http://gittf.codeplex.com/
TFVCcentral
Ponts entre Git et TFVC
Checkin
Checkin
Checkin
Gitlocal
Commit
Commit
Commit
V 0.51V 0.51
V 0.51
Code/developpement#mstechdays
LA FIN EST PROCHE
En conclusion
Code/developpement#mstechdays
• François, habitué à TFVC et adepte des outils graphiques
• Guillaume, habitué à Git avant son intégration à VS, graphique ou CLI
Git & Visual Studio
Travaillent ensemble sur le même projet ,sans accroc, chacun avec ses pratiques
Code/developpement#mstechdays
• Nous n’avons pas parlé de– Rebase– Staging– Sous-modules– Bisect– Stash– Et plein d’autres choses
45 minutes, c’est court
Code/developpement#mstechdays
• Comprendre Git plus en profondeur– http://presentation-git.heroku.com par gitfr /
Sébastien Douche
• Site officiel et livre français gratuit– http://git-scm.com / http://git-scm.com/book/fr
• Dépôt Git en ligne gratuit– Visual Studio Online http://www.visualstudio.com
Pour aller plus loin
Code/developpement#mstechdays
Depuis votre smartphone sur :http://notes.mstechdays.fr
De nombreux lots à gagner toute les heures !!!Claviers, souris et jeux Microsoft…
Merci de nous aider à améliorer les Techdays !
Donnez votre avis !
Code/developpement#mstechdays
• Comprendre Git plus en profondeur– http://presentation-git.heroku.com par gitfr /
Sébastien Douche
• Site officiel et livre français gratuit– http://git-scm.com / http://git-scm.com/book/fr
• Dépôt Git en ligne gratuit– Visual Studio Online http://www.visualstudio.com
Questions ?
© 2014 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Digital is business