Slide 1

Slide 1 text

{ Migration d'une base de code subversion vers git Geoffrey Bachelet – PMSIpilot Forum PHP 2010

Slide 2

Slide 2 text

{ PMSIpilot "Le groupe PMSIpilot conçoit, édite et distribue des logiciels étudiés spécialement pour les établissements de santé."

Slide 3

Slide 3 text

{ 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

Slide 4

Slide 4 text

{ Pourquoi ? ● Flexibilité des branches ● Gestion d'un gros projet ● Facilités de backport ● Fonctionnalités « bonus »

Slide 5

Slide 5 text

{ Flexibilité des branches ● Coût de création d'une branche très faible ● Branches locales ● « feature branches »

Slide 6

Slide 6 text

{ Gestion d'un gros projet ● Gère les sources du noyau Linux ● 17 000+ révisions ● Quelques surprises quand même ● Fichiers binaires volumineux

Slide 7

Slide 7 text

{ Facilité des backports ● Une branche par version ● « git cherry-pick » ● « git rebase [--interactive] »

Slide 8

Slide 8 text

{ Bonus ● « git stash » ● « git add --interactive » ● « git rebase --interactive » ● « git commit --amend » ● Commit en mode déconnecté

Slide 9

Slide 9 text

{ Migration du dépôt git-svn

Slide 10

Slide 10 text

{ Problèmes avec git-svn ● C'est long (7h d'import) ● Gère mal les tags

Slide 11

Slide 11 text

{ 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 ● …

Slide 12

Slide 12 text

{ Ne pas oublier ! git svn init --stdlayout

Slide 13

Slide 13 text

{ Hébergement du serveur Par un tiers ou en interne ?

Slide 14

Slide 14 text

{ 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

Slide 15

Slide 15 text

{ Interne ● Contrôle des données ● Flexibilité ● Interfaçage avec l'existant

Slide 16

Slide 16 text

{ Gitosis ● Authentification des développeurs par clés RSA ● Gestion des droits par utilisateur et par dépôt ● Lecture seulement ● Lecture / écriture

Slide 17

Slide 17 text

{ Problème rencontré Fichiers binaires volumineux

Slide 18

Slide 18 text

{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

Slide 19

Slide 19 text

{ Solution ? ● Avoir une version de git à jour ● « git repack -adf » ● Echoue sur notre serveur (4Go de RAM, 32bits)

Slide 20

Slide 20 text

{ Solution ! git help repack --window --window-memory --max-pack-size

Slide 21

Slide 21 text

{ git filter-branch Réécrire l'histoire

Slide 22

Slide 22 text

{ Réécrire l'histoire git filter-branch --index-filter 'git rm bigfile' -- --all

Slide 23

Slide 23 text

{ Réécrire l'histoire git filter-branch –index-filter 'git rm bigfile' -- --all

Slide 24

Slide 24 text

{ 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

Slide 25

Slide 25 text

{ Réécrire l'histoire N'en faites pas trop quand même.

Slide 26

Slide 26 text

{ Les grafts Réécrire l'histoire

Slide 27

Slide 27 text

{ Les grafts Deux dépôts, zéro commits communs.

Slide 28

Slide 28 text

{ Les grafts

Slide 29

Slide 29 text

{ Les grafts

Slide 30

Slide 30 text

{ Les grafts

Slide 31

Slide 31 text

{ Les grafts

Slide 32

Slide 32 text

{ Les grafts « .git/info/grafts »

Slide 33

Slide 33 text

{ Les grafts

Slide 34

Slide 34 text

{ Les grafts dc5b6cfa

Slide 35

Slide 35 text

{ Les grafts 746f0b6b

Slide 36

Slide 36 text

{ Les grafts dc5b6cfa 746f0b6b

Slide 37

Slide 37 text

{ Les grafts

Slide 38

Slide 38 text

{ 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.

Slide 39

Slide 39 text

{ Les grafts « git filter-branch -- dc5b6cfa..unrelated-master »

Slide 40

Slide 40 text

{ Les grafts

Slide 41

Slide 41 text

{ Les grafts git reset –hard unrelated-master

Slide 42

Slide 42 text

{ Les grafts

Slide 43

Slide 43 text

{ BLACK MAGIC VOODOO

Slide 44

Slide 44 text

{ Les développeurs

Slide 45

Slide 45 text

{ Les développeurs ● Nouveau workflow ● Similaire à l'ancien pour commencer ● Nouveaux logiciels ● git, gitk, gitx ● Redmine ● PHPStorm

Slide 46

Slide 46 text

{ Les développeurs ● Formation interne ● Réunions techniques ● Référents internes ● Auto-formation

Slide 47

Slide 47 text

{ Auto-formation ● http://progit.org/ ● http://git-scm.com/documentation ● http://help.github.com/ ● http://gitref.org/ ● etc.

Slide 48

Slide 48 text

{ Problème rencontré Beaucoup de nouveaux concepts

Slide 49

Slide 49 text

{ 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 »

Slide 50

Slide 50 text

{ Nouveaux concepts Oubliez tout ce que vous croyez savoir.

Slide 51

Slide 51 text

{ Vraiment.

Slide 52

Slide 52 text

{ Questions ?

Slide 53

Slide 53 text

{ C'est fini ! ● Merci à l'AFUP ● Merci à PMSIpilot (on recrute !) ● Merci à vous !