Subgit ou la cohabitation heureuse de SVN et Git

Subgit est un projet tout jeune, initié par l’équipe de TMate. Subgit a pour vocation de synchroniser un dépôt SVN en temps réel avec un dépôt Git.

Présentation

Subgit est un ensemble de scripts java qui assure la synchronisation entre un dépôt SVN et son homologue Git. C’est à dire que tout commit poussé sur l’un ou l’autre des dépôts sera automatiquement présent sur les 2. Un jeu de hooks assure la cohérence et la synchronisation des dépôts.

Principe de fonctionnement de subgit
subgit.com

Organiser son dépôt SVN

La plupart des outils de versionning propose une logique d’historisation basée sur un trunk, des branches et des tags.
SVN en pratique propose une logique de répertoires dont le nommage est non figé. Par conséquent les 3 concepts précédemment indiqués peuvent être nommés comme on l’entend.

Toutefois dans cette première version, Subgit considère seulement la correspondance suivante :

SVN Git
trunk/ master
branches/ branches
tags/ tags

Le dépôt SVN ne peut aussi contenir qu’un projet à la racine. C’est le cas générique que l’on devrait trouver dans la plupart des dépôts SVN.

Dans les évolutions futures, il est prévu :

  • de personnaliser la correspondance SVN/Git
  • de gérer une hiérarchie de sous projets
  • dé déclarer sa propre structure de correspondance pour les cas plus complexes (famille de projets, nommage différent, ...)

Dans le cas présent, le minimum requis est la présence de trunk/ les 2 autres répertoires pourront être créés manuellement aussi bien du coté Git que SVN. Les hooks feront le necessaire pour maintenir la cohésion.

Pré requis

Dans la suite de l’article nous supposons l’existence d’un dépôt SVN et le souhait de mettre en place un dépôt Git synchrone.
Il est à noter que le projet permet aussi de passer d’un dépôt Git vers SVN, nous n’aborderons pas ce cas de figure pour la suite de cet article.

Pour utiliser subgit, nous aurons au préalable :

  • un serveur debian dont on aura la maitrise complète,
  • un dépôt SVN actif dont le répertoire de référence sera /var/subversion/monprojet/

Installation

Comme il a été indiqué précédemment Subgit utilise java pour assurer la cohérence des commits. Nous installons donc le necessaire :

apt-get install git-core  sun-java6-bin

Pour continuer nous téléchargeons et installons les scripts depuis la page officielle EAP

weisse:~#mkdir -p /var/subgit
weisse:~#wget http://subgit.com/download/subgit-1.0.0-EAP_391.zip -O /var/subgit/subgit.zip
weisse:~#unzip /var/subgit/subgit.zip -d /var/subgit

Traduire de SVN vers Git

En toute logique avant de synchroniser les commits à venir, il est utile de convertir l’existant. Subgit fournit un script dédié.

weisse:/var/subgit# subgit-1.0.0-EAP_391/bin/subgit init /var/subversion/monprojet/

SubGit version 1.0.0-EAP ('Miai') build #391
This is an EAP build, which you may not like to use in production environment.

Translating: '/var/subversion/monprojet'
Subversion revisions: 367

SubGit hooks installed.


TRANSLATION SUCCESSFUL

 Total time: 26 seconds

Run 'git clone /var/subversion/monprojet monprojet-git' to obtain Git clone of Subversion repository;
or  'svn co file:///var/subversion/monprojet monprojet-wc' to obtain Subversion working copy.

Comme on peut le voir dans cet exemple les 367 commits existants coté SVN ont été convertis.
Par défaut le dépôt créé est stocké au même endroit que le dépôt SVN, on peut le constater en remarquant la présence des répertoires .git et .subgit

Utiliser ses dépôts

Du fait que les 2 dépôts sont contenus dans le même répertoire, le chemin d’accès est donc le même aussi bien pour Git que pour SVN.
Pour des raisons pratiques il est possible de déclarer un autre répertoire cible pour Git (par exemple si on souhaite coupler gitosis/gitolite ou fournir un accès http)

Maintenant nous sommes libres de commiter aussi bien à l’aide d’un client Git ou de continuer à utiliser son client SVN.

Tout commit, branche, tag sera reporté automatiquement d’une dépôt à l’autre.

N’est elle pas belle la vie ?

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.