Comment migrer un référentiel SVN vers un autre référentiel SVN?

Existe-t-il un moyen simple de copier un répertoire d’un référentiel vers un autre référentiel en copiant tout l’historique?

La manière la plus simple est d’utiliser:

svnadmin dump path/to/repos > repos.out 

Cela créera un format portable pour votre référentiel (avec historique) dans le fichier repos.out . Vous pouvez alors utiliser

 svnadmin load path/to/newrepos < repos.out 

pour charger votre référentiel «vidé» sur le nouveau ou existant.

Chapitre 5. Maintenance du référentiel -> La migration des données du référentiel ailleurs a cette remarque sur l'utilisation de svnadmin dump partir de la version 1.7:

Le format de vidage du référentiel Subversion décrit uniquement les modifications du référentiel versionné. Il ne contiendra aucune information sur les transactions non validées, les verrous utilisateur sur les chemins du système de fichiers, les personnalisations de la configuration du référentiel ou du serveur (y compris les scripts de hook), etc.

Comme suggéré dans le livre de Subversion :

 svnadmin dump path/to/repos_src \ | svndumpfilter include path/inside/svn/to/directory \ | svnadmin load path/to/repos_dst 

Avec un exemple:

 svnadmin dump /var/lib/svn/old_repo \ | svndumpfilter include trunk/my_project/common_dir \ | svnadmin load /var/lib/svn/new_repo 

Si vous ne voulez pas d’historique, vous pouvez utiliser svn export pour obtenir un dossier propre sans les dossiers .svn , puis svn import dans votre autre repository.

Avec l’historique, vous devez utiliser le svnadmin dump . Vous utiliseriez alors svndumpfilter pour filtrer uniquement les parties ou les chemins que vous souhaitez utiliser avant d’utiliser svnadmin load .

Sujets à lire:

  • Migration des données du référentiel ailleurs
  • Historique du référentiel de filtrage

Utilisez la commande svnsync – Subversion Repository Mirroring :

svnsync est l’outil de mise en miroir du référentiel distant Subversion. En d’autres termes, il vous permet de rejouer les révisions d’un référentiel dans un autre.

La documentation Subversion de la commande svnsync contient l’avertissement suivant (à partir de la version 1.7) qui implique qu’une fois que d’autres commandes SVN sont utilisées pour modifier un référentiel miroir, svnsync ne doit plus être utilisé avec ce miroir particulier:

svnsync est très sensible aux modifications apscopes au référentiel miroir qui n’ont pas été effectuées dans le cadre d’une opération de mise en miroir. Pour éviter cela, il est préférable que le processus svnsync soit le seul processus autorisé à modifier le référentiel miroir.

Vous pouvez créer un fichier de vidage à l’aide de svnadmin dump , puis l’importer dans un nouveau référentiel avec svnadmin load .

Dans Subversion version 1.7, il existe une nouvelle commande, svnrdump qui peut être utilisée pour accéder à un référentiel distant et générer la même sortie de format de vidage que celle générée par la commande svnadmin dump . Cela vous permet d’utiliser svnrdump avec svnadmin load pour transférer un repository Subversion.

Voir svnrdump – Migration des données du référentiel Subversion à distance qui contient une explication de la nouvelle commande.

Au chapitre 5 du livre rouge, la section Migration des données du référentiel ailleurs comporte une sous-section Migration des données du référentiel à l’aide de svnrdump qui mentionne:

La principale différence [entre svnrdump et svnadmin dump ] est que, au lieu d’accéder directement au référentiel, svnrdump fonctionne à distance, en utilisant les mêmes protocoles d’access au référentiel (RA) que le client Subversion. En tant que tel, vous devrez peut-être fournir des informations d’authentification. De plus, vos interactions à distance sont soumises à toute limitation d’autorisation configurée sur le serveur Subversion.

Je suppose également que les limitations de svnadmin dump concernant les personnalisations de la configuration du serveur telles que les hooks ne peuvent pas être transférées s’appliqueraient également à svnrdump .

Je pense qu’il devrait être indiqué que le fichier de vidage créé en utilisant

  svnadmin dump path/to/repos > dumpfile 

peut être créé (à partir de svn 1.7 et suivants) en utilisant la commande

  svnrdump dump url_to_repos > dumpfile 

Ceci est utile lorsque vous effectuez un travail à partir d’un ordinateur distant et non du serveur.

Au cas où cela aiderait les autres, il y a svn2svn pour rejouer les modifications d’un repository Subversion à un autre:

https://github.com/tonyduckles/svn2svn

Pour migrer le référentiel d’un serveur vers une autre version, suivez les étapes à suivre.

Étape 1: Dump de toutes les versions du référentiel dans un fichier de vidage. Vous avez peut-être des milliers de versions dans le référentiel existant. Vous pouvez donc créer un fichier de vidage à l’aide du script suivant.

dump.sh

 # Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository. j=4999; for ((i=0;i<=$j;i++)); do # your-unix-command-here echo $i svnadmin dump  -r $i –incremental > /$i.dump done 

Dans le script ci-dessus, vous pouvez obtenir un vidage complet de l’ancien référentiel en fonction de la disponibilité de l’espace, ou vous pouvez prendre le vidage dans un court intervalle (de 0 à 5 000, puis de 5001 à 1 000, etc.).

Étape 2: Exécutez le script ci-dessus en utilisant la commande ci-dessous. Selon la version du kernel, vous devez exécuter l’une des deux requêtes ci-dessous.

 $ bash dump.sh > stdout.sh $ ./sh dump.sh > stdout.sh 

Cela va écrire toutes les commandes que vous avez dû exécuter en utilisant la commande ci-dessus dans le fichier stdout.sh. Vous pouvez suivre ce fichier pour votre future référence.

Étape 3: Vérifiez si le pare-feu est ouvert pour le numéro de port 22 entre l’ancien et le nouveau serveur. Si ce n’est pas ouvert, demandez à votre administrateur de le rendre disponible.

Étape 4: Copiez maintenant tous les fichiers de vidage générés à partir de l’ancien référentiel SVN sur le nouveau serveur à l’aide de la commande ci-dessous.

 $ sftp xxxx@ Connecting to … Password: sftp> mput *.dump /dump_location 

Dans la commande ci-dessus, xxxx est l’utilisateur qui effectue l’opération. En faisant sftp, vous copiez les fichiers de vidage de l’ancien serveur vers le nouveau serveur.

Étape 5: Créer un nouveau référentiel sur le nouveau serveur

 $ svnadmin create  

Étape 6: Maintenant, utilisez le script ci-dessous pour charger tous les fichiers de vidage.

load.sh

 # Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository. j=4999; for ((i=0;i<=$j;i++)); do # your-unix-command-here echo $i svnadmin load –bypass-prop-validation  < dump_location /$i.dump done 

En suivant les six étapes simples ci-dessus, vous pourrez migrer votre référentiel existant vers un nouveau référentiel. Grâce à ce processus, vous n'avez pas à vous soucier des révisions corrompues de votre référentiel existant.