{
Migration d'une base de code
subversion vers git
Geoffrey Bachelet – PMSIpilot
Forum PHP 2010
{ PMSIpilot
"Le groupe PMSIpilot conçoit, édite et distribue des
logiciels étudiés spécialement pour les
établissements de...
{ PMSIpilot
● 8 logiciels interdépendants
● 15 développeurs
● 250 000+ lignes de code
● 6.5G de dépôt subversion
● 24 000+...
{ Pourquoi ?
● Flexibilité des branches
● Gestion d'un gros projet
● Facilités de backport
● Fonctionnalités « bonus »
{ Flexibilité des branches
● Coût de création d'une branche très faible
● Branches locales
● « feature branches »
{ Gestion d'un gros projet
● Gère les sources du noyau Linux
● 17 000+ révisions
● Quelques surprises quand même
● Fichier...
{ Facilité des backports
● Une branche par version
● « git cherry-pick »
● « git rebase [--interactive] »
{ Bonus
● « git stash »
● « git add --interactive »
● « git rebase --interactive »
● « git commit --amend »
● Commit en mo...
{ Migration du dépôt
git-svn
{ Problèmes avec git-svn
● C'est long (7h d'import)
● Gère mal les tags
{ Solutions !
● Importer un dépôt local (file:///path/to/svn)
● Convertir les « branches tags » en vrais tags
● http://git...
{ Ne pas oublier !
git svn init --stdlayout
{ Hébergement du serveur
Par un tiers ou en interne ?
{ Tiers
● Pas de serveur à gérer
● Services autour du dépôt
● Large choix
● https://git.wiki.kernel.org/index.php/GitHosti...
{ Interne
● Contrôle des données
● Flexibilité
● Interfaçage avec l'existant
{ Gitosis
● Authentification des développeurs par clés RSA
● Gestion des droits par utilisateur et par dépôt
● Lecture seu...
{ Problème rencontré
Fichiers binaires volumineux
{Fichiers binaires volumineux
● Consommation mémoire lors du « repack »
● Problème connu
● http://www.google.com/search?q=...
{ Solution ?
● Avoir une version de git à jour
● « git repack -adf »
● Echoue sur notre serveur (4Go de RAM, 32bits)
{ Solution !
git help repack
--window
--window-memory
--max-pack-size
{
git filter-branch
Réécrire l'histoire
{ Réécrire l'histoire
git filter-branch --index-filter 'git rm bigfile' -- --all
{ Réécrire l'histoire
git filter-branch –index-filter 'git rm bigfile' -- --all
{ Réécrire l'histoire
● http://progit.org/book/ch9-7.html
● git help filter-branch
● Beaucoup d'outils dans git
● git coun...
{ Réécrire l'histoire
N'en faites pas trop quand même.
{
Les grafts
Réécrire l'histoire
{ Les grafts
Deux dépôts, zéro commits communs.
{ Les grafts
{ Les grafts
{ Les grafts
{ Les grafts
{ Les grafts
« .git/info/grafts »
{
<commit SHA1> <parent SHA1>
Les grafts
{ Les grafts
dc5b6cfa
{ Les grafts
746f0b6b
{ Les grafts
<commit> <parent>
dc5b6cfa 746f0b6b
{ Les grafts
{ Les grafts
git help filter-branch
NOTE: This command honors .git/info/grafts. If
you have any grafts defined, running th...
{ Les grafts
« git filter-branch -- dc5b6cfa..unrelated-master »
{ Les grafts
{ Les grafts
git reset –hard unrelated-master
{ Les grafts
{
BLACK MAGIC VOODOO
{
Les développeurs
{ Les développeurs
● Nouveau workflow
● Similaire à l'ancien pour commencer
● Nouveaux logiciels
● git, gitk, gitx
● Redmi...
{ Les développeurs
● Formation interne
● Réunions techniques
● Référents internes
● Auto-formation
{ Auto-formation
● http://progit.org/
● http://git-scm.com/documentation
● http://help.github.com/
● http://gitref.org/
● ...
{ Problème rencontré
Beaucoup de nouveaux concepts
{ Nouveaux concepts
● Fonctionnement en mode distribué
● Confusion entre « remote » et « branche »
● Confusion entre « com...
{ Nouveaux concepts
Oubliez tout ce que vous croyez savoir.
{
Vraiment.
{
Questions ?
{ C'est fini !
● Merci à l'AFUP
● Merci à PMSIpilot (on recrute !)
● Merci à vous !
Prochain SlideShare
Chargement dans…5
×

Migration d'une base de code subversion vers git

4 119 vues

Publié le

Publié dans : Technologie
0 commentaire
4 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
4 119
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 135
Actions
Partages
0
Téléchargements
38
Commentaires
0
J’aime
4
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Migration d'une base de code subversion vers git

  1. 1. { Migration d'une base de code subversion vers git Geoffrey Bachelet – PMSIpilot Forum PHP 2010
  2. 2. { PMSIpilot "Le groupe PMSIpilot conçoit, édite et distribue des logiciels étudiés spécialement pour les établissements de santé."
  3. 3. { PMSIpilot ● 8 logiciels interdépendants ● 15 développeurs ● 250 000+ lignes de code ● 6.5G de dépôt subversion ● 24 000+ révisions ● Fichiers binaires
  4. 4. { Pourquoi ? ● Flexibilité des branches ● Gestion d'un gros projet ● Facilités de backport ● Fonctionnalités « bonus »
  5. 5. { Flexibilité des branches ● Coût de création d'une branche très faible ● Branches locales ● « feature branches »
  6. 6. { Gestion d'un gros projet ● Gère les sources du noyau Linux ● 17 000+ révisions ● Quelques surprises quand même ● Fichiers binaires volumineux
  7. 7. { Facilité des backports ● Une branche par version ● « git cherry-pick » ● « git rebase [--interactive] »
  8. 8. { Bonus ● « git stash » ● « git add --interactive » ● « git rebase --interactive » ● « git commit --amend » ● Commit en mode déconnecté
  9. 9. { Migration du dépôt git-svn
  10. 10. { Problèmes avec git-svn ● C'est long (7h d'import) ● Gère mal les tags
  11. 11. { Solutions ! ● Importer un dépôt local (file:///path/to/svn) ● Convertir les « branches tags » en vrais tags ● http://gitready.com/advanced/2009/02/16/convert-git-svn ● http://blue-dwarf.de/wp/2008/08/30/converting-git-svn-ta ● http://progit.org/book/ch8-2.html ● …
  12. 12. { Ne pas oublier ! git svn init --stdlayout
  13. 13. { Hébergement du serveur Par un tiers ou en interne ?
  14. 14. { Tiers ● Pas de serveur à gérer ● Services autour du dépôt ● Large choix ● https://git.wiki.kernel.org/index.php/GitHosting ● http://stackoverflow.com/questions/109440/best-git-repo
  15. 15. { Interne ● Contrôle des données ● Flexibilité ● Interfaçage avec l'existant
  16. 16. { Gitosis ● Authentification des développeurs par clés RSA ● Gestion des droits par utilisateur et par dépôt ● Lecture seulement ● Lecture / écriture
  17. 17. { Problème rencontré Fichiers binaires volumineux
  18. 18. {Fichiers binaires volumineux ● Consommation mémoire lors du « repack » ● Problème connu ● http://www.google.com/search?q=git+fatal+out+memory ● 223 000 résultats
  19. 19. { Solution ? ● Avoir une version de git à jour ● « git repack -adf » ● Echoue sur notre serveur (4Go de RAM, 32bits)
  20. 20. { Solution ! git help repack --window --window-memory --max-pack-size
  21. 21. { git filter-branch Réécrire l'histoire
  22. 22. { Réécrire l'histoire git filter-branch --index-filter 'git rm bigfile' -- --all
  23. 23. { Réécrire l'histoire git filter-branch –index-filter 'git rm bigfile' -- --all
  24. 24. { Réécrire l'histoire ● http://progit.org/book/ch9-7.html ● git help filter-branch ● Beaucoup d'outils dans git ● git count-objects ● git rev-list ● git verify-pack ● etc
  25. 25. { Réécrire l'histoire N'en faites pas trop quand même.
  26. 26. { Les grafts Réécrire l'histoire
  27. 27. { Les grafts Deux dépôts, zéro commits communs.
  28. 28. { Les grafts
  29. 29. { Les grafts
  30. 30. { Les grafts
  31. 31. { Les grafts
  32. 32. { Les grafts « .git/info/grafts »
  33. 33. { <commit SHA1> <parent SHA1> Les grafts
  34. 34. { Les grafts dc5b6cfa
  35. 35. { Les grafts 746f0b6b
  36. 36. { Les grafts <commit> <parent> dc5b6cfa 746f0b6b
  37. 37. { Les grafts
  38. 38. { Les grafts git help filter-branch NOTE: This command honors .git/info/grafts. If you have any grafts defined, running this command will make them permanent.
  39. 39. { Les grafts « git filter-branch -- dc5b6cfa..unrelated-master »
  40. 40. { Les grafts
  41. 41. { Les grafts git reset –hard unrelated-master
  42. 42. { Les grafts
  43. 43. { BLACK MAGIC VOODOO
  44. 44. { Les développeurs
  45. 45. { Les développeurs ● Nouveau workflow ● Similaire à l'ancien pour commencer ● Nouveaux logiciels ● git, gitk, gitx ● Redmine ● PHPStorm
  46. 46. { Les développeurs ● Formation interne ● Réunions techniques ● Référents internes ● Auto-formation
  47. 47. { Auto-formation ● http://progit.org/ ● http://git-scm.com/documentation ● http://help.github.com/ ● http://gitref.org/ ● etc.
  48. 48. { Problème rencontré Beaucoup de nouveaux concepts
  49. 49. { Nouveaux concepts ● Fonctionnement en mode distribué ● Confusion entre « remote » et « branche » ● Confusion entre « commit » et « push » ● Confusion sur le « pull » et le « merge » ● Vocabulaire différent ● « revert » vs « checkout » / « reset »
  50. 50. { Nouveaux concepts Oubliez tout ce que vous croyez savoir.
  51. 51. { Vraiment.
  52. 52. { Questions ?
  53. 53. { C'est fini ! ● Merci à l'AFUP ● Merci à PMSIpilot (on recrute !) ● Merci à vous !

×