web-dev-qa-db-fra.com

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 dans un autre référentiel en copiant tout l'historique?

58
Jakub Arnold

La manière la plus simple consiste à 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 ensuite utiliser

svnadmin load path/to/newrepos < repos.out

pour charger votre référentiel "vidée" dans le nouveau ou existant.

Chapitre 5. Maintenance du référentiel -> Migration des données du référentiel ailleurs contient cette note 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 verrouillages utilisateur sur les chemins du système de fichiers, les personnalisations de configuration du référentiel ou du serveur (y compris les scripts de raccordement), etc.

79
Adam

Comme suggéré dans le livre 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
34
Steve Schnepp

Si vous ne voulez pas d'historique, vous pouvez utiliser svn export pour obtenir un dossier propre sans .svn dossiers puis svn import dans votre autre référentiel.

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

Sujets à lire:

24
crashmstr

Utilisez la commande svnsync - Subversion Repository Mirroring :

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

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

svnsync est très sensible aux modifications apportées au référentiel miroir qui n'ont pas été apporté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.

9
Tomas Andrle

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 le même format de vidage que celui généré par le svnadmin dump commande. Cela vous permet d'utiliser svnrdump avec svnadmin load pour transférer un référentiel Subversion.

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

Dans le chapitre 5 du livre rouge, la section Migration des données de référentiel ailleurs a 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] signifie qu'au lieu d'exiger un accès direct au référentiel, svnrdump fonctionne à distance, en utilisant les mêmes protocoles d'accès 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 [sic] sont soumises à toute limitation d'autorisation configurée sur le serveur Subversion.

Je suppose également que les limites de svnadmin dump concernant les personnalisations de configuration du serveur telles que les hooks ne peuvent pas être transférés s'appliquerait également à svnrdump.

5
Richard Chambers

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

4
tomoe

Je pense qu'il convient de préciser que le fichier de vidage créé en utilisant

    svnadmin dump path/to/repos > dumpfile

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

   svnrdump dump url_to_repos > dumpfile

Ceci est utile lorsqu'il est effectué à partir d'un ordinateur distant et non du serveur.

3

Au cas où cela aiderait les autres, il y a svn2svn pour relire les changesets d'un dépôt Subversion à un autre:

https://github.com/tonyduckles/svn2svn

1
user2387519