web-dev-qa-db-fra.com

Copie SVN entre les référentiels avec historique

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.

67
John Gietzen

[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.

41
mihi

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.

8
Lee

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:

  • L'outil n'a besoin d'aucun accès administrateur au référentiel source. 
  • Il prend en charge l’ajout/la suppression/la copie/le déplacement, préserve la propriété du noeud (par exemple, svn: ignore, svn: external) et la propriété de révision (c’est-à-dire que vous obtenez le bon auteur ainsi que la date/heure). 
  • Peut également copier progressivement de nouvelles révisions.
  • Possède une interface graphique et un utilitaire de ligne de commande.

Si quelqu'un est intéressé, regardez-le ici

8
Kenneth Xu

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

Référence: http://blog.neutrino.es/2012/git-copy-a-file-or-directory-from-another-repository-preserving-history/

8
scottysb

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é.

0
naan