Import / Export

L'exportation puis l'importation d'un dépôt subversion s'opére simplement à l'aide de la commande svnadmin exécuté depuis l'hôte hébergeant le dépôt :

Pour l'exportation :

svnadmin dump /path/to/svn/repository/ > my-repository.svn.dump

Pour l'importation :

svnadmin load /path/to/svn/repository/ < my-repository.svn.dump

Facile !

Limiter l'import/export à une partie du dépôt

Lorsque l'on ne souhaite récupérer qu'une partie du dépôt, il faut se tourner vers l'utilitaire svndumpfilter. Celui-ci permet de limiter l'export à certains répertoires uniquement (mode include) ou bien à supprimer certains répertoires (mode exclude). Notez bien qu'il n'est pas possible de combiner ces deux modes.

Si par exemple vous ne souhaitez exporter que le projet /trunk/genesis-commons/, procédez comme suit :

svnadmin dump /path/to/svn/repository/ | svndumpfilter include --drop-empty-revs --renumber-revs /trunk/genesis-commons/ > my-project.svn.dump

Les options --drop-empty-revs et --renumber-revs permettent de supprimer les révisions qui ne concernent pas le projet et de renuméroter les révisions restantes de sorte à ce qu'elles se suivent.

Lors de l'export vous pouvez obtenir des messages d'erreurs du type Invalid copy source path. Les causes de ce type de message sont le plus couramment qu'une partie du projet que vous exportez a été copiée depuis une autre partie du dépôt qui n'est pas exportée. Le plus simple, mais pas forcément le plus heureux, est d'inclure la partie originale de laquelle provient l'élément manquant dans l'export.

Une fois l'export effectuée, il y a fort à parier que vous souhaitiez modifier le répertoire de destination de votre projet dans le dépôt vers lequel vous allez l'importer. Pour cela pas de solution clé en main : il faut éditer le fichier d'export ! Une petite indication pour automatiser le processus : les chemins des ressources sont préfixés par Node-path:. Il est donc possible d'automatiser en partie le processus avec sed :

sed -i 's@Node-path: my/previous/resource/path/\(.*\)@Node-path: my/new/path/\1@' my-project.svn.dump

Attention également à prendre en compte les instructions Node-copyfrom-path:.

En comparaison le chargement de l'export est des plus direct :

svnadmin load /path/to/svn/repository/ < my-project.svn.dump

Si toutefois vous souhaitez importer le projet dans un sous-répertoire particulier du dépôt :

svnadmin load /path/to/svn/repository/ --parent-dir my/project/new/directory < my-project.svn.dump

Ressources

Je n'aurais certainement pas été en mesure d'écrire ce billet sans les ressources ci-dessous :