git en local avec un dépôt distant subversion

Pendant plusieurs années, j'ai contribué à piwigo qui utilise (encore et toujours) subversion. Pour cela j'ai utilisé l'excellente passerelle git-svn. Je dis excellent car en plusieurs années d'utilisation je n'ai jamais eu le moindre problème. Pour utiliser git, pour contribuer à piwigo, on commence par cloner le dépôt :

git svn clone http://piwigo.org/svn

Après en local c'est transparent, on a un "vrai" dépôt git, on peut créer des branches, faire des merge,... Et pour propager les modifications, on ne fait pas un simple git push mais

git svn dcommit

Une chose intéressante, quand on utilise une telle passerelle est de pouvoir communiquer avec ceux qui utilisent le gestionnaire original. Avec git-svn, c'est possible facilement, regardez par exemple les log :

commit 6a79d17d5dcd2b23be9ef72dd51cc0ff4dd39a04
Author: nikrou <nikrou@68402e56-0260-453c-a942-63ccdbb3a9ee>
Date:   Mon Sep 13 19:40:42 2010 +0000

   Fix bug 1856 : CSRF issue that allow to change admin password

   git-svn-id: http://piwigo.org/svn/trunk@6897 68402e56-0260-453c-a942-63ccdbb3a9ee

On peut échanger le numéro du commit (ici 6897) avec le reste de l'équipe pour parler de la modification et retrouver ce même numéro sur le dépôt officiel : http://piwigo.org/dev/changeset/6897

L'installation de git-svn est très simple :

apt-get install git-svn

git en local avec un dépôt distant mercurial

Depuis quelques temps, je contribue à dotclear qui utilise mercurial. Comme dit Franck, j'utilise git en local et je pousse mes modifications vers le dépôt mercurial de dotclear. Pour mercurial, il n'existe pas une unique passerelle mais de nombreuses (hg-git, fast-export, ...). J'ai choisi d'utiliser git-remote-hg développé par Felipe Contreras. Il a fait un fork "amical" de git qui contient ses modifications.

L'utilisation est très simple. On commence par cloner le dépôt:

git clone hg::https://hg.dotclear.org/dotclear

Notez bien le préfixe hg:: devant l'url du dépôt officiel de dotclear. C'est la seule chose "complexe". Après c'est entièrement transparent. Toutes les commandes permettant de gérer le dépôt sont identiques. On ne sait même pas qu'on travaille sur un dépôt distant mercurial. Pour propager les modifications on fait simplement (depuis la branche courante) :

git push

L'installation de git-remote-hg est un peu plus compliqué que git-svn mais pas beaucoup plus. En fait git-remote-hg fait partie du package officiel git, dans le répertoire /usr/share/doc/git/contrib/remote-helpers/ mais n'est pas exécutable ni dans le "bon" répertoire. Pour pouvoir l'utiliser, j'ai donné les droits d'exécution au script et fait un lien qui se trouve dans le PATH :

chmod +x /usr/share/doc/git/contrib/remote-helpers/git-remote-hg
ln -s /usr/share/doc/git/contrib/remote-helpers/git-remote-hg /home/nicolas/bin

J'ai évidemment ~/bin dans mon PATH