SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
REX - Passage de CVS à Git
Pierre Templier
@ptemplier
Ippon Technologies © 2015
Sommaire
● Contexte
● Migration technique
● Choix workflow(s) de travail
● Accompagnement et mise en oeuvre
● Bilan : problèmes et bénéfices
CVS
Ippon Technologies © 2015
Contexte
● Client utilisant CVS au sein d'une petite équipe : ~10 personnes.
● Volonté de changer pour quelque chose de plus récent.
● 2 solutions envisagées : SVN et Git
○ Client d'abord tenté par SVN car peu de changement dans l'utilisation par
rapport à CVS.
○ Mais un projet a été réalisé par une société externe sur un repo privé
GitHub, le choix de Git s'est donc fait sur la facilité de récupérer l'historique
de ce projet.
Ippon Technologies © 2015
Migration technique (1)
● Utilisation de cvs2svn qui dispose d’un module cvs2git : http://cvs2svn.tigris.
org/cvs2git.html
● Besoin d’accéder physiquement à une copie du repo CVS
● Fichier de config permettant
○ De transcoder les utilisateurs (trigramme => “Prénom Nom” + Email)
○ D’exclure des fichiers/dossiers inutiles
■ ‘target' ou ‘src/webapp/WEB-INF/lib’
● En sortie, 2 fichiers au format fast-import
○ git --bare init .
○ cat git-{blob,dump}.dat | git fast-import
Ippon Technologies © 2015
Migration technique (2)
● 4 repositories CVS
○ ~200 projets
○ Chaque repo CVS contient beaucoup de projets qui
n'ont rien à voir entre eux
● 1 répertoire du repo CVS deviendra un repository Git
● Création d'un script bash pour automatiser les exports
vers des repositories Git
● Avant la migration on verrouille en écriture chaque
repository CVS
○ touch writers
Ippon Technologies © 2015
Utilisation
● Repositories exposés via GitBlit
○ Webapp java
○ Gestion des Droits
○ Recherche
○ Navigation dans le code
○ Statistiques
○ Historique des commits
Ippon Technologies © 2015
Impact hors développement
● Faibles impacts sur l’usine logicielle
● Changement de l’url scm dans le pom : utilisé par le plugin maven release
● Ajout du plugin Git dans Jenkins
● Création d’un utilisateur Jenkins dans Gitblit et renseignement des
credentials dans le settings.xml maven utilisé par jenkins
Ippon Technologies © 2015
Workflows utilisés
Centralisé
Feature Branches
Gitflow
Ippon Technologies © 2015
Configuration commune
// renseignements sur l'utilisateur présents dans les commits
git config --global user.name "John Doe"
git config --global user.email johndoe@mycorp.com
// sauts de lignes Linux dans les sources
git config --global core.autocrlf true
// pull --rebase par défaut pour éviter de polluer l'historique
git config --global branch.master.rebase true
git config --global branch.autosetuprebase always
// stocke le mdp en clair pour ne pas le retaper
git config --global credential.helper store
Utilisation de rebase lors des pull
Ippon Technologies © 2015
Mise en oeuvre
● Volonté de l'équipe d'utiliser le client graphique Git intégré à Eclipse
● Habitude de fonctionner avec le client CVS d’Eclipse
● Habitude de rester dans l’IDE pour les interactions SCM
● Migration des projets un par un plutôt que tout d'un coup
● Formation initiale sur le poste du développeur
● Différentes zones de travail : Workspace, Index, Repository Local, Repository Distant
● Les commandes à connaître : clone, commit, push, pull, stash, reset
● Explication du paramétrage pull --rebase
● Savoir où on en est : `git status` / vue historique Eclipse
● Incitation à créer des branches dès que le besoin s’en fait sentir (feature branch)
● Puis aide au fur et à mesure des besoins/problèmes.
● Dans l'équipe 2 autres personnes avaient déjà travaillé avec git, cela a facilité la monté en compétence car plusieurs
personnes pouvaient aider.
● Pas de modification de commits déjà publiés (i.e. pas de push --force )
● Interdit au niveau de Gitblit
Ippon Technologies © 2015
Problèmes - Eclipse
● Impossible de comparer un fichier lors d'un merge
● Présente des fichiers comme modifiés alors qu'il ne sont pas modifiés
○ info différente de git status
● Impossible de comprendre ce que fait le "mark as merged"
● Résoudre un conflit en faisant add n'est pas intuitif sous eclipse
○ git status nous donne directement cette information
● Lorsqu'un push échoue, message d’échec que l'on prend pour un succès
● Obligation de jongler entre les vues Eclipse
○ Vue Projet
○ Vue Git Repositories
○ Vue Historique
○ Vue Staging
Ippon Technologies © 2015
Problèmes - Habitudes
● Volonté de récupérer uniquement les changements sur certains fichiers
● plutôt que tous ceux ramenés par un pull
● Pull implique de commiter ou stasher ses changements au préalable
● Tendance à garder 1 projet par branche dans son workspace
● 1 branche sur master
● 1 branche sur develop
● Nouveau vocabulaire, nouveaux concepts
● Commit a un sens différent en CVS et en Git
● Stash est une pile si on sauve plusieurs fois ses fichiers temporaires ils ne sont plus sur le dessus de
la pile et 'git stash pop' ne les ramène pas
Ippon Technologies © 2015
Leçons tirées
● Il ne faut pas sous estimer le travail d'accompagnement pour passer à Git et oublier ses habitudes
CVS. Il est important que personne ne reste bloqué à cause de l’outil, il faut donc qu’il y ait toujours
une personne capable de dépanner sur Git.
● Mieux vaut passer petit à petit les projets sous Git : cela permet de monter sereinement en
compétence sur Git et d'abord sur des petits projets
● Le client en ligne de commande donne souvent des informations plus pertinentes qu'Eclipse et est plus
prédictible
● Changement d’habitude dans le workflow de travail : commits réguliers en local puis push après revue
de ces commits, le fait d’avoir 2 étapes permet plus de vérification et de réorganiser ses commits avant
de pusher (squash ou rebase interactif).
Ippon Technologies © 2015
Bénéfices
Ce qu’en tirent les développeurs
○ Un certain confort à travailler en local (plus de commits régulièrement)
○ Une préparation plus fine des commits avant de les publier
○ Un facilité à travailler sur des branches dès que le besoin s’en fait sentir
○ Renommages de fichiers bien suivis
○ Commits comme un ensemble cohérent de changements sur différents fichiers
○ Historique complet notamment lors du merge de branche (pas d’info sur les branches mergées en CVS)
○ Graphe historique/branches permet de bien se repérer dans les sources
○ Rapidité générale du système
○ Facilité de report d’un hotfix via cherry-pick
Dans le futur
On pourrait envisager d’utiliser des workflow de type Pull Request, notamment à des fins de code review systématisé
Questions ?
Contact : @ptemplier

Contenu connexe

Tendances

NightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryNightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryZenika
 
Formation autour de git et git lab
Formation autour de git et git labFormation autour de git et git lab
Formation autour de git et git labAbdelghani Azri
 
NightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéNightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéZenika
 
REX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryREX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryDamien Goldenberg
 
Au secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOpsAu secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOpsantony_guilloteau
 
Git : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebaseGit : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebasejcbaudier
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitIppon
 
DevOps : mission [im]possible ?
DevOps : mission [im]possible ?DevOps : mission [im]possible ?
DevOps : mission [im]possible ?rfelden
 
Github workflow
Github workflowGithub workflow
Github workflowJim Laurie
 
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDKGreenIvory
 
Integration continue - Introduction
Integration continue - IntroductionIntegration continue - Introduction
Integration continue - IntroductionOlivier ETIENNE
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipelineNicolas wallerand
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+ekino
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueVincent Composieux
 
Hey, git ! Histoires de migration à git
Hey, git !  Histoires de migration à gitHey, git !  Histoires de migration à git
Hey, git ! Histoires de migration à gitBenoit St-André
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Adrien Blind
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsKokou Gaglo
 

Tendances (20)

NightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous DeliveryNightClazz Build Tools & Continuous Delivery
NightClazz Build Tools & Continuous Delivery
 
Formation autour de git et git lab
Formation autour de git et git labFormation autour de git et git lab
Formation autour de git et git lab
 
NightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery AvancéNightClazz Build Tools & Continuous Delivery Avancé
NightClazz Build Tools & Continuous Delivery Avancé
 
REX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous DeliveryREX sur l'outilage Continuous Delivery
REX sur l'outilage Continuous Delivery
 
Au secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOpsAu secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOps
 
Git : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebaseGit : Deux écoles de pensées, merge vs rebase
Git : Deux écoles de pensées, merge vs rebase
 
Présentation du retour d'expérience sur Git
Présentation du retour d'expérience sur GitPrésentation du retour d'expérience sur Git
Présentation du retour d'expérience sur Git
 
DevOps : mission [im]possible ?
DevOps : mission [im]possible ?DevOps : mission [im]possible ?
DevOps : mission [im]possible ?
 
Get startedwithgit2
Get startedwithgit2Get startedwithgit2
Get startedwithgit2
 
GitPourLaNulle
GitPourLaNulleGitPourLaNulle
GitPourLaNulle
 
Github workflow
Github workflowGithub workflow
Github workflow
 
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
20091006 Dev Forum Fr 001Introduction à GWT en utilisant AppCase SDK
 
Integration continue - Introduction
Integration continue - IntroductionIntegration continue - Introduction
Integration continue - Introduction
 
Chaine de production pipeline
Chaine de production   pipelineChaine de production   pipeline
Chaine de production pipeline
 
Industrialisation PHP - Canal+
Industrialisation PHP - Canal+Industrialisation PHP - Canal+
Industrialisation PHP - Canal+
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement Continue
 
Hey, git ! Histoires de migration à git
Hey, git !  Histoires de migration à gitHey, git !  Histoires de migration à git
Hey, git ! Histoires de migration à git
 
Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?Docker, Pierre angulaire du continuous delivery ?
Docker, Pierre angulaire du continuous delivery ?
 
REX Devops Docker
REX Devops DockerREX Devops Docker
REX Devops Docker
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec Jenkins
 

En vedette

Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014vberetti
 
2010 presentation ippon_corp
2010 presentation ippon_corp2010 presentation ippon_corp
2010 presentation ippon_corpGeoffray Gruel
 
Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Stephan Lagraulet
 
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You ReadyGeoffray Gruel
 
Nouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponNouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponJulien Dubois
 
Développer et déployer dans le cloud
Développer et déployer dans le cloudDévelopper et déployer dans le cloud
Développer et déployer dans le cloudJulien Dubois
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015Julien Dubois
 
Requêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraRequêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraJulien Dubois
 
La gestion dans un contexte global les grandes entreprises multinationales
La gestion dans un contexte global les grandes entreprises multinationalesLa gestion dans un contexte global les grandes entreprises multinationales
La gestion dans un contexte global les grandes entreprises multinationalesM0os
 
Taller de comunicacion
Taller de comunicacionTaller de comunicacion
Taller de comunicacionleal1983
 
Reporte red social
Reporte red socialReporte red social
Reporte red socialshepiroth117
 
Presentac..1
Presentac..1Presentac..1
Presentac..1GM1546
 
Rol docente
Rol docenteRol docente
Rol docenteGM1546
 
Photos super.fp1
Photos super.fp1Photos super.fp1
Photos super.fp1Andromede56
 
Evaluación 2
Evaluación 2Evaluación 2
Evaluación 2hrueda2
 

En vedette (20)

Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014
 
2010 presentation ippon_corp
2010 presentation ippon_corp2010 presentation ippon_corp
2010 presentation ippon_corp
 
Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016
 
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready
 
Nouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale IpponNouveau look pour une nouvelle vie, version spéciale Ippon
Nouveau look pour une nouvelle vie, version spéciale Ippon
 
Développer et déployer dans le cloud
Développer et déployer dans le cloudDévelopper et déployer dans le cloud
Développer et déployer dans le cloud
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015
 
Requêtes multi-critères avec Cassandra
Requêtes multi-critères avec CassandraRequêtes multi-critères avec Cassandra
Requêtes multi-critères avec Cassandra
 
La gestion dans un contexte global les grandes entreprises multinationales
La gestion dans un contexte global les grandes entreprises multinationalesLa gestion dans un contexte global les grandes entreprises multinationales
La gestion dans un contexte global les grandes entreprises multinationales
 
Reality check
Reality checkReality check
Reality check
 
Taller de comunicacion
Taller de comunicacionTaller de comunicacion
Taller de comunicacion
 
Reporte red social
Reporte red socialReporte red social
Reporte red social
 
Yoraima des....
Yoraima des....Yoraima des....
Yoraima des....
 
Lamper
LamperLamper
Lamper
 
Presentac..1
Presentac..1Presentac..1
Presentac..1
 
Rol docente
Rol docenteRol docente
Rol docente
 
Synthèse d'activité de l'ALCS 2006
Synthèse d'activité de l'ALCS 2006Synthèse d'activité de l'ALCS 2006
Synthèse d'activité de l'ALCS 2006
 
Photos super.fp1
Photos super.fp1Photos super.fp1
Photos super.fp1
 
Evaluación 2
Evaluación 2Evaluación 2
Evaluación 2
 
Dossier de presse hrc 2012
Dossier de presse hrc 2012Dossier de presse hrc 2012
Dossier de presse hrc 2012
 

Similaire à REX - Passage de CVS à Git

Des poneys à Liberation.fr
Des poneys à Liberation.frDes poneys à Liberation.fr
Des poneys à Liberation.frliberation_dev
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Ippon
 
GIT training - basic for software projects
GIT training - basic for software projectsGIT training - basic for software projects
GIT training - basic for software projectsThierry Gayet
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsNicolas Mussat
 
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms - breizhcam...
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms  - breizhcam...Gulp fiction, Builder, tester, livrer, sans tomber dans les poms  - breizhcam...
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms - breizhcam...mbrechet
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfboulonvert
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Gitmsadouni
 
Git vs SVN
Git vs SVNGit vs SVN
Git vs SVNneuros
 
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...akramalidrissi1
 
les commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfles commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfSimpleLearn1
 
Le système de versioning git
Le système de versioning gitLe système de versioning git
Le système de versioning gitNassim Bahri
 
JCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratiqueJCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratiqueRossi Oddet
 
Introduction à git.pdf
Introduction à git.pdfIntroduction à git.pdf
Introduction à git.pdfbadrfathallah2
 
L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tousAurelien Navarre
 
Game of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de donnéesGame of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de donnéesQuang Tu LE
 
Utilisation de git avec Delphi
Utilisation de git avec DelphiUtilisation de git avec Delphi
Utilisation de git avec Delphipprem
 
La migration continue vers Symfony
La migration continue vers SymfonyLa migration continue vers Symfony
La migration continue vers SymfonyFrancois Zaninotto
 

Similaire à REX - Passage de CVS à Git (20)

Des poneys à Liberation.fr
Des poneys à Liberation.frDes poneys à Liberation.fr
Des poneys à Liberation.fr
 
Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014Formation GIT gratuite par ippon 2014
Formation GIT gratuite par ippon 2014
 
GIT training - basic for software projects
GIT training - basic for software projectsGIT training - basic for software projects
GIT training - basic for software projects
 
Python application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgentsPython application packaging @ MeilleursAgents
Python application packaging @ MeilleursAgents
 
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms - breizhcam...
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms  - breizhcam...Gulp fiction, Builder, tester, livrer, sans tomber dans les poms  - breizhcam...
Gulp fiction, Builder, tester, livrer, sans tomber dans les poms - breizhcam...
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
 
Présentation du versioning avec Git
Présentation du versioning avec GitPrésentation du versioning avec Git
Présentation du versioning avec Git
 
Git vs SVN
Git vs SVNGit vs SVN
Git vs SVN
 
Git flow
Git flowGit flow
Git flow
 
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
 
les commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfles commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdf
 
Le système de versioning git
Le système de versioning gitLe système de versioning git
Le système de versioning git
 
JCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratiqueJCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratique
 
Introduction à git.pdf
Introduction à git.pdfIntroduction à git.pdf
Introduction à git.pdf
 
L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tous
 
Versioning avec Git
Versioning avec GitVersioning avec Git
Versioning avec Git
 
Game of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de donnéesGame of upgrades to liferay dxp - ep1: Migration de données
Game of upgrades to liferay dxp - ep1: Migration de données
 
Utilisation de git avec Delphi
Utilisation de git avec DelphiUtilisation de git avec Delphi
Utilisation de git avec Delphi
 
La migration continue vers Symfony
La migration continue vers SymfonyLa migration continue vers Symfony
La migration continue vers Symfony
 
3_SCM_Git.pdf
3_SCM_Git.pdf3_SCM_Git.pdf
3_SCM_Git.pdf
 

REX - Passage de CVS à Git

  • 1. REX - Passage de CVS à Git Pierre Templier @ptemplier
  • 2. Ippon Technologies © 2015 Sommaire ● Contexte ● Migration technique ● Choix workflow(s) de travail ● Accompagnement et mise en oeuvre ● Bilan : problèmes et bénéfices CVS
  • 3. Ippon Technologies © 2015 Contexte ● Client utilisant CVS au sein d'une petite équipe : ~10 personnes. ● Volonté de changer pour quelque chose de plus récent. ● 2 solutions envisagées : SVN et Git ○ Client d'abord tenté par SVN car peu de changement dans l'utilisation par rapport à CVS. ○ Mais un projet a été réalisé par une société externe sur un repo privé GitHub, le choix de Git s'est donc fait sur la facilité de récupérer l'historique de ce projet.
  • 4. Ippon Technologies © 2015 Migration technique (1) ● Utilisation de cvs2svn qui dispose d’un module cvs2git : http://cvs2svn.tigris. org/cvs2git.html ● Besoin d’accéder physiquement à une copie du repo CVS ● Fichier de config permettant ○ De transcoder les utilisateurs (trigramme => “Prénom Nom” + Email) ○ D’exclure des fichiers/dossiers inutiles ■ ‘target' ou ‘src/webapp/WEB-INF/lib’ ● En sortie, 2 fichiers au format fast-import ○ git --bare init . ○ cat git-{blob,dump}.dat | git fast-import
  • 5. Ippon Technologies © 2015 Migration technique (2) ● 4 repositories CVS ○ ~200 projets ○ Chaque repo CVS contient beaucoup de projets qui n'ont rien à voir entre eux ● 1 répertoire du repo CVS deviendra un repository Git ● Création d'un script bash pour automatiser les exports vers des repositories Git ● Avant la migration on verrouille en écriture chaque repository CVS ○ touch writers
  • 6. Ippon Technologies © 2015 Utilisation ● Repositories exposés via GitBlit ○ Webapp java ○ Gestion des Droits ○ Recherche ○ Navigation dans le code ○ Statistiques ○ Historique des commits
  • 7. Ippon Technologies © 2015 Impact hors développement ● Faibles impacts sur l’usine logicielle ● Changement de l’url scm dans le pom : utilisé par le plugin maven release ● Ajout du plugin Git dans Jenkins ● Création d’un utilisateur Jenkins dans Gitblit et renseignement des credentials dans le settings.xml maven utilisé par jenkins
  • 8. Ippon Technologies © 2015 Workflows utilisés Centralisé Feature Branches Gitflow
  • 9. Ippon Technologies © 2015 Configuration commune // renseignements sur l'utilisateur présents dans les commits git config --global user.name "John Doe" git config --global user.email johndoe@mycorp.com // sauts de lignes Linux dans les sources git config --global core.autocrlf true // pull --rebase par défaut pour éviter de polluer l'historique git config --global branch.master.rebase true git config --global branch.autosetuprebase always // stocke le mdp en clair pour ne pas le retaper git config --global credential.helper store Utilisation de rebase lors des pull
  • 10. Ippon Technologies © 2015 Mise en oeuvre ● Volonté de l'équipe d'utiliser le client graphique Git intégré à Eclipse ● Habitude de fonctionner avec le client CVS d’Eclipse ● Habitude de rester dans l’IDE pour les interactions SCM ● Migration des projets un par un plutôt que tout d'un coup ● Formation initiale sur le poste du développeur ● Différentes zones de travail : Workspace, Index, Repository Local, Repository Distant ● Les commandes à connaître : clone, commit, push, pull, stash, reset ● Explication du paramétrage pull --rebase ● Savoir où on en est : `git status` / vue historique Eclipse ● Incitation à créer des branches dès que le besoin s’en fait sentir (feature branch) ● Puis aide au fur et à mesure des besoins/problèmes. ● Dans l'équipe 2 autres personnes avaient déjà travaillé avec git, cela a facilité la monté en compétence car plusieurs personnes pouvaient aider. ● Pas de modification de commits déjà publiés (i.e. pas de push --force ) ● Interdit au niveau de Gitblit
  • 11. Ippon Technologies © 2015 Problèmes - Eclipse ● Impossible de comparer un fichier lors d'un merge ● Présente des fichiers comme modifiés alors qu'il ne sont pas modifiés ○ info différente de git status ● Impossible de comprendre ce que fait le "mark as merged" ● Résoudre un conflit en faisant add n'est pas intuitif sous eclipse ○ git status nous donne directement cette information ● Lorsqu'un push échoue, message d’échec que l'on prend pour un succès ● Obligation de jongler entre les vues Eclipse ○ Vue Projet ○ Vue Git Repositories ○ Vue Historique ○ Vue Staging
  • 12. Ippon Technologies © 2015 Problèmes - Habitudes ● Volonté de récupérer uniquement les changements sur certains fichiers ● plutôt que tous ceux ramenés par un pull ● Pull implique de commiter ou stasher ses changements au préalable ● Tendance à garder 1 projet par branche dans son workspace ● 1 branche sur master ● 1 branche sur develop ● Nouveau vocabulaire, nouveaux concepts ● Commit a un sens différent en CVS et en Git ● Stash est une pile si on sauve plusieurs fois ses fichiers temporaires ils ne sont plus sur le dessus de la pile et 'git stash pop' ne les ramène pas
  • 13. Ippon Technologies © 2015 Leçons tirées ● Il ne faut pas sous estimer le travail d'accompagnement pour passer à Git et oublier ses habitudes CVS. Il est important que personne ne reste bloqué à cause de l’outil, il faut donc qu’il y ait toujours une personne capable de dépanner sur Git. ● Mieux vaut passer petit à petit les projets sous Git : cela permet de monter sereinement en compétence sur Git et d'abord sur des petits projets ● Le client en ligne de commande donne souvent des informations plus pertinentes qu'Eclipse et est plus prédictible ● Changement d’habitude dans le workflow de travail : commits réguliers en local puis push après revue de ces commits, le fait d’avoir 2 étapes permet plus de vérification et de réorganiser ses commits avant de pusher (squash ou rebase interactif).
  • 14. Ippon Technologies © 2015 Bénéfices Ce qu’en tirent les développeurs ○ Un certain confort à travailler en local (plus de commits régulièrement) ○ Une préparation plus fine des commits avant de les publier ○ Un facilité à travailler sur des branches dès que le besoin s’en fait sentir ○ Renommages de fichiers bien suivis ○ Commits comme un ensemble cohérent de changements sur différents fichiers ○ Historique complet notamment lors du merge de branche (pas d’info sur les branches mergées en CVS) ○ Graphe historique/branches permet de bien se repérer dans les sources ○ Rapidité générale du système ○ Facilité de report d’un hotfix via cherry-pick Dans le futur On pourrait envisager d’utiliser des workflow de type Pull Request, notamment à des fins de code review systématisé
  • 15. Questions ? Contact : @ptemplier