La première étape pour contribuer à un projet est de faire un fork de ce projet que ce projet soit hébergé sur bitbucket ou github n'y change rien. J'ai donc un fork de dotclear sur bitbucket comme si j'étais un contributeur extérieur. Cela a l'avantage de simplifier certaines soumissions, par exemple faire une pull-request sur un sujet un peu compliqué qui demande des discussions ultérieures. Il me suffit ensuite de cloner ce dépôt en local. Mais comme je veux utiliser git en local, il faut installer des outils supplémentaires, c'est-à-dire une passerelle qui permet de communiquer avec un dépôt externe qui n'est pas git. Ces outils s'appuient sur les remote-helpers et j'utilise en particulier git-remote-hg qui a longtemps fait partie de la distribution officielle de git :https://github.com/git/git/blob/master/contrib/remote-helpers/git-remote-hg. Mais ce projet a désormais son propre dépôt, maintenu par Felipe Contreras : git-remote-hg.

La première étape est de cloner le dépôt git-remote-hg:

$ git clone git-remote-hg

Ensuite il faut rendre accessible l'exécutable git-remote-hg. Personnellement, le répertoire ~/bin est dans mon PATH et du coup j'ai fait un lien symbolique de ce script dans ~bin. C'est tout. Désormais il n'y a qu'une seule chose qui change c'est la manière de cloner le dépôt distant :

$ git clone hg::ssh://hg@bitbucket.org/nikrou/dotclear

Je n'ai pas fait d'erreur ; il y a bien deux points après hg ! En local on a bien un dépôt git et presque rien ne pourrait le différencier d'un vrai dépôt git. En fait pour que cela puisse fonctionner git-remote-hg une partie de la correspondance est faite dans un sous répertoire hg dans le répertoire .git.

dotclear utilise un sous module mercurial appelé clearbricks. Il est peut-être possible de le récupérer directement mais je n'ai pas tellement cherché n'ayant que rarement le besoin. Pour le récupérer, j'ai aussi un fork de clearbricks que je clone dans le répertoire inc/libs de mon clone de dotclear.

J'ai maintenant un dépôt pleinement fonctionnel et qui utilise git. On peut créer des vraies branches, commiter, pusher et même faire des pull-request...

Une dernière chose, on peut aussi cette même installation pour développer des plugins pour dotclear. Pour ce faire, il suffit d'utiliser une astuce qui n'est pas documentée (ou alors je n'ai pas trouvé) qui permet de mettre ces propres plugins où l'on souhaite. On peut par exemple les mettre dans un répertoire frère du clone dotclear et les modifications de code liées aux plugins n'impactent pas les commits de dotclear. Pour ce faire il suffit de modifier la constante  DC_PLUGINS_ROOT situé dans le fichier de configuration inc/config.php, en ajoutant le nouveau répertoire, par exemple :

define('DC_PLUGINS_ROOT',dirname(__FILE__).'/../plugins'.PATH_SEPARATOR.dirname(__FILE__).'/../../my_plugins');