Un de mes coéquipiers a demandé s'il était possible d'exporter d'un SVN à un autre, tout en conservant l'historique.
Pour moi, cela semble être une demande commune.
So: Est-il possible de migrer entre les référentiels SVN tout en conservant l'historique?
Il est important de noter que nous n’avons pas l’accès svnadmin sur la source, mais nous l’avons sur la destination.
Si cela revient à extraire chaque révision de la source et à l’archiver à la destination, tout ira bien, à condition qu’il existe un processus automatisé.
EDIT: J'ai oublié de mentionner que le repo de destination est sur Windows.
[Edit: la réponse d'origine ci-dessous provient de la version antérieure à SVN 1.7 et constituait la meilleure façon de résoudre le problème (bien que ce ne soit pas le cas d'utilisation principal de svnsync
). Dans SVN version 1.7 ou ultérieure, il existe l'outil svnrdump
qui fait plus directement ce que vous essayez d'atteindre))]
utilisez svnsync pour synchroniser la source sur la destination (nécessite un accès administrateur au référentiel de destination ou au moins un moyen d’ajouter des hooks, mais aucun accès spécial au référentiel source). Si la destination a déjà des révisions, synchronisez la source sur un référentiel temporaire, puis utilisez svn-merge-repos.pl
pour fusionner les deux référentiels locaux.
Pour ce faire, utilisez généralement la commande svnadmin dump
. Si vous n'avez pas accès à svnadmin, je demanderais à la personne qui en a la possibilité si elle peut vous fournir un vidage. Cela facilitera également beaucoup le processus d'importation.
Êtes-vous actuellement sur un référentiel partagé? Cela pourrait permettre à la personne à qui appartient le référentiel de vous donner un dump, car ce sera une copie du référentiel complet, pas seulement de votre pièce.
J'avais un besoin similaire (j'ai donc visité cette page) et j'ai fini par écrire mon propre programme pour faire le travail. Pensé que l'outil peut être utile à d'autres qui cherchent encore une solution:
Si quelqu'un est intéressé, regardez-le ici
Vous pouvez utiliser git-svn (ou peut-être un autre système SCM) pour accomplir cette tâche.
Les étapes seraient les suivantes:
1. Get a git svn clone of each repository:
git svn clone <SVN-REPOSITORY-FROM> source-repo
git svn clone <SVN-REPOSITORY-TO> dest-repo
2. Create patches to be imported:
cd source-repo/
export commitFrom=`git log --pretty=%H | tail -1`
git format-patch -o /tmp/mergepatchs ${commitFrom}..HEAD .
3. Import the patches
cd dest-repo/
git am /tmp/mergepatchs/*.patch
Si vous n'avez besoin que d'un référentiel de contrôle de version avec ensemble de modifications complet, vous pouvez utiliser bzr avec le plugin bzr-svn . Lorsque vous extrayez un référentiel svn, tout sera synchronisé.