09 novembre 2012

from svn to git

Ce billet est plus un mémo pour moi-même afin de ne pas chercher à chaque fois comment effectuer une conversion svn -> Git. (billet fortement inspiré de http://john.albin.net/git/convert-subversion-to-git)

Le but ici n'est pas "juste" de migrer vers git mais de maintenir un lien entre les deux repositories, autrement dit de créer un miroir git du repo subversion.

1. lister les committers

il faut fournir à git le mapping entre les committers SVN et les méta-données associées dans git. Pour cela un petit parsing du svn log va nous aider. En se plaçant dans une copie de travail du repo subversion :

svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors.txt

Il peut être nécessaire de faire un peu de ménage dans le fichier généré

2. faire un clone git du repo svn

git svn nous fournit toute la mécanique nécessaire. Attention ça peut prendre un bon moment sur de gros repositories ... 

git svn clone [URL] -A authors.txt --stdlayout


3. extraire les tags

git svn n'est pas très doué avec les tags et les converti en branches - ce qu'ils sont techniquement dans subversion me direz-vous. Un petit script va nous aider à en faire de "vrai" tags git.

git for-each-ref --format='%(refname)' refs/remotes/tags |
cut -d / -f 4 |
while read ref
do
  git tag "$ref" "refs/remotes/tags/$ref";
  git branch -D "tags/$ref";
done

A ce stade, j'applique un recette utilisée sur Jenkins pour la migration en douceur des plugins du SVN java.net vers github

4. conserver une branche de synchro svn

Je crée une branche "svn" initialement identique au master issu de subversion, et je la pousse sur mon repo git 

git checkout -b svn
git remote add origin git@github.com:ndeloof/foo.git
git push origin svn

Cette branche pourra être maintenue synchronisée avec le svn par un job jenkins (git svn rebase), pendant que les pull-requests et autres évolutions seront intégrées dans master.

d'ailleurs, nous allons créer un fichier ignore adapté :

git checkout master
git svn show-ignore > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore to .gitignore.'
git push origin master



voilà, j'espère que ça aidera. Si vous avez d'autre "recettes"  je suis preneur

06 novembre 2012

BreizhCamp 2013, "WAR-RAOK"

L'an dernier, à la même période, je bloggais un appel à volontaire pour m'aider à organiser le breizhcamp.

J'ai porté quasiment seul la première édition de cette conférence, profitant d'une période charnière dans ma vie professionelle qui me laissait pas mal de temps libre - comprenez, ma démission d'Orange. L'exercice est enrichissant et très formateur, mais particulièrement éprouvant. Disons qu'il faut avoir les reins solides pour prolonger ce mode de fonctionnement.




Pour la seconde édition, j'ai voulu m'entourer de lieutenants, chacun se chargeant d'un "silo" et me soulageant de ce poids. Avantage pour moi : garder le contrôle dans le role du "dictateur". Inconvénient, lorsqu'un lieutenant ne peut pas assurer pour diverses raisons, je suis seul apte à venir jouer les pompiers, ayant une vision globale de l'organisation. Au final, entre les contraintes de chacun, je me suis retrouvé à gérer bien plus de choses que prévu. Par ailleurs, difficile de motiver les gens si on ne leur laisse pas voix au chapitre.



C'est ainsi qu'en octobre, après un démarrage en cacahuète pour la rentrée du BreizhJug, j'ai du annoncer à contre coeur à mes camarades que je ne pourrais pas assurer un nouveau breizhcamp. 

Heureusement, pour l'un de ces silos j'avais eu le plaisir de recruter Guillaume Collic, une figure de l'écosystème Agile Rennais. Il nous a donc proposé de mettre un peu d'agilité dans notre organisation, laissant les casquettes tourner et les responsabilités se répartir au sein d'une équipe pluri-disciplinaire.


Sur le modèle bien rodé d'Agile Tour, BreizhCamp est donc en train de se convertir en Conférence Agile, portée par une équipe sans leader-dictateur, en fonction des disponibilités de chacun, et en totale transparence. Evidemment, cela suppose beaucoup plus de communication et de synchronisation pour que les casquettes puissent changer de tête, mais on ne part pas non plus dans l'inconnu avec deux éditions réussies du BreizhCamp et l'expérience d'Agile Tour.


Au final, cela me permet de m'investir dans la conférence maintenant que j'ai du temps tout en sachant qu'il y aura du monde pour prendre le relai lorsque j'en aurais moins (JenkinsConf@Paris). Ca m'oblige aussi à tenir compte des avis des autres - ça c'est plus dur :P

L'organisation concrète sera mouvante et est encore à définir (par l'équipe, me souffle guillaume), mais on a déjà un nouveau logo, conçu à quatre mains et adopté à l'unanimité :

(version non définitive)

Dans le même esprit, l'application qui va gérer le call-for-paper est développé par une équipe de volontaires en mode auto-organisé-distribué "carte blanche", avec comme seule contrainte un trello des fonctionnalités donnant les priorités, et avec la liberté de définir leur propres stories techniques pour se faire plaisir. 



Nous avons aussi testé Google Hangout pour notre premier meeting, et poursuivrons avec skype et un simple google docs partagé, ce qui ouvre la porte à des contributeurs non-Rennais. Il s'avère en effet qu'il ya très peu d'actions dans les phases amont de la conférence qui nécessitent d'être physiquement présent à Rennes !



Bref, j'espère être capable de réfréner mes tendances dictatoriales (vous aurez peut être noté dans les couleurs du logo que je n'ai pas lâché sur le orange :P) et que cette expérience sera riche d'enseignements et de fierté pour chacun de nous, avec un troisième BreizhCamp encore plus réussi !