69 votes

Copie SVN entre dépôts 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.

Il me semble qu'il s'agit d'une demande courante.

Donc : Est-il possible de migrer entre les dépôts SVN tout en conservant l'historique ?

Il est important de noter que nous n'avons pas l'accès svnadmin sur la Source, mais que nous l'avons sur la Destination.

S'il s'agit de vérifier chaque révision à la source et de l'enregistrer à la destination, cela nous convient, à condition qu'il y ait un processus automatisé pour cela.

EDITAR: J'ai oublié de mentionner que le repo de destination est sous Windows.

41voto

mihi Points 3476

[ Modifier : La réponse originale ci-dessous date d'avant le SVN 1.7, et là, c'était la meilleure façon de résoudre le problème (bien que ce ne soit pas le cas d'utilisation principal de la svnsync ). Dans le client SVN 1.7 ou plus récent, il existe la fonction svnrdump outil qui fait plus directement ce que vous essayez de réaliser)].


utilice svnsync pour synchroniser la source vers la destination (nécessite un accès administrateur au référentiel de destination ou au moins un moyen d'ajouter des hooks, mais pas d'accès spécial au référentiel source). Si la destination a déjà des révisions, synchronisez la source vers un référentiel temporaire, puis utilisez la commande svn-merge-repos.pl pour fusionner les deux référentiels locaux.

9voto

Lee Points 6659

Le moyen le plus courant d'y parvenir est le svnadmin dump commande . Si vous n'avez pas d'accès svnadmin, je demanderais à la personne qui l'a s'il peut vous fournir un dump. Cela rendra le processus d'importation beaucoup plus facile.

Êtes-vous actuellement sur un référentiel partagé ? Cela pourrait rendre la personne qui possède le référentiel réticente à vous donner un dump, car il s'agira d'une copie de l'ensemble du référentiel, et pas seulement de votre partie.

9voto

Kenneth Xu Points 851

J'avais un besoin similaire (d'où la visite de cette page) et j'ai fini par écrire mon propre programme pour faire le travail. J'ai pensé que cet outil pourrait être utile à d'autres personnes qui sont toujours à la recherche d'une solution :

  • L'outil n'a pas besoin d'un accès administrateur au référentiel des sources.
  • Il supporte l'ajout/la suppression/la copie/le déplacement, préserve les propriétés des nœuds (par exemple svn:ignore, svn:external) et les propriétés des révisions (c'est-à-dire que vous obtenez l'auteur et la date/heure corrects).
  • Peut également copier de manière incrémentielle les nouvelles révisions.
  • Possède à la fois une interface graphique et un utilitaire de ligne de commande.

Si quelqu'un est intéressé, consultez le site aquí

8voto

scottysb Points 71

Vous pouvez utiliser git-svn (ou peut-être un autre système SCM) pour accomplir cette tâche.

Les étapes seraient :

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érencé : http://blog.neutrino.es/2012/git-copy-a-file-or-directory-from-another-repository-preserving-history/

0voto

naan Points 11

Si vous avez seulement besoin d'un repo de contrôle de version avec un jeu de modifications complet, vous pouvez utiliser bzr avec le plugin bzr-svn. Lorsque vous extrayez un repo svn, tout sera synchronisé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X