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?
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.
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
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:
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 processussvnsync
soit le seul processus autorisé à modifier le référentiel miroir.
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
etsvnadmin 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
.
Vous pouvez créer un fichier de vidage à l'aide de svnadmin dump
, puis importez dans un nouveau référentiel avec svnadmin load
.
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.
Au cas où cela aiderait les autres, il y a svn2svn pour relire les changesets d'un dépôt Subversion à un autre: