une - tortoise svn create branch




Copie SVN entre des référentiels avec historique (4)

J'avais un besoin similaire (d'où j'ai 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 sont toujours à la recherche d'une solution:

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

Si quelqu'un est intéressé, vérifiez here

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.

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 d'accès svnadmin sur la Source, mais nous l'avons sur la Destination.

Si cela revient à vérifier chaque révision de la source et à l'enregistrer dans la destination, nous serions d'accord, à condition qu'il y ait un processus automatisé pour cela.

EDIT: J'ai oublié de mentionner que le repo de destination est sur Windows.


La façon d'y parvenir est généralement la commande svnadmin dump . Si vous n'avez pas accès svnadmin alors je demanderais à la personne qui le fait si elle peut vous fournir une décharge. Cela rendra le processus d'importation beaucoup plus facile aussi.

Êtes-vous sur un référentiel partagé actuellement? Cela pourrait faire en sorte que la personne qui détient le référentiel apprenne à vous donner une décharge, car ce sera une copie de l'ensemble du dépôt, et pas seulement votre partie.


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/


[ Edit : La réponse originale ci-dessous est de pré 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 svnsync ). Dans le client SVN 1.7 ou plus tard, il y a l'outil svnrdump qui fait plus directement ce que vous essayez d'accomplir.

utilisez svnsync pour synchroniser la source avec 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 svn-merge-repos.pl pour fusionner les deux référentiels locaux.





data-migration