wake-up-neo.com

SVN-Kopie zwischen Repositorys mit Historie

Einer meiner Teamkollegen hat gefragt, ob es möglich ist, von einem SVN zu einem anderen zu exportieren, während der Verlauf beibehalten wird.

Für mich scheint dies eine allgemeine Anfrage zu sein.

Also: Ist es möglich, zwischen SVN-Repositories zu migrieren, während der Verlauf beibehalten wird?

Es ist wichtig anzumerken, dass wir keinen svnadmin-Zugriff auf die Quelle haben, aber den haben wir auf dem Ziel.

Wenn dies erforderlich ist, müssen Sie lediglich jede Revision aus der Quelle heraus überprüfen und sie am Ziel einchecken. Damit wäre alles in Ordnung, solange es dafür einen automatisierten Prozess gibt.

EDIT: Ich habe vergessen zu erwähnen, dass das Ziel-Repo unter Windows läuft.

67
John Gietzen

[Edit: Die ursprüngliche Antwort unten stammt aus SVN 1.7, und dies war der beste Weg, um das Problem zu lösen (obwohl dies nicht der primäre Anwendungsfall von svnsync ist). In SVN 1.7-Client oder höher gibt es das svnrdump , das direkt das tut, was Sie erreichen wollen.]]


verwenden Sie svnsync , um die Quelle mit dem Ziel zu synchronisieren (benötigt Administratorzugriff auf das Zielrepository oder mindestens eine Möglichkeit, Hooks hinzuzufügen, aber kein spezieller Zugriff auf das Quellrepository). Wenn das Ziel bereits überarbeitete Versionen aufweist, synchronisieren Sie die Quelle mit einem temporären Repository, und verwenden Sie dann svn-merge-repos.pl , um die beiden lokalen Repositorys zusammenzuführen.

41
mihi

Dies erreichen Sie normalerweise mit dem Befehl svnadmin dump . Wenn Sie keinen svnadmin-Zugriff haben, würde ich die Person fragen, die Sie dazu auffordert, einen Dump zu liefern. Dadurch wird auch der Importvorgang wesentlich vereinfacht.

Befinden Sie sich aktuell in einem gemeinsam genutzten Repository? Dies kann dazu führen, dass die Person, der das Repository gehört, sich darauf auslegt, Ihnen einen Dump zu geben, da es sich um eine Kopie des gesamten Repositorys handelt, nicht nur Ihres Teils.

8
Lee

Ich hatte ein ähnliches Bedürfnis (besuchte diese Seite also) und schrieb am Ende mein eigenes Programm, um die Arbeit zu erledigen. Das Tool kann für andere nützlich sein, die noch nach einer Lösung suchen:

  • Das Tool benötigt keinen Administratorzugriff auf das Quell-Repository. 
  • Es unterstützt das Hinzufügen/Löschen/Kopieren/Verschieben und behält die Knoteneigenschaft (z. B. svn: ignore, svn: external) und die Revisionseigenschaft (d. H., Sie erhalten den richtigen Autor und Datum und Uhrzeit). 
  • Kann auch neue Versionen inkrementell kopieren.
  • Hat sowohl eine grafische Benutzeroberfläche als auch ein Befehlszeilenprogramm.

Wenn jemand interessiert ist, schau es dir an hier

8
Kenneth Xu

Sie können git-svn (oder möglicherweise ein anderes SCM-System) verwenden, um diese Aufgabe auszuführen.

Die Schritte wären:

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

Referenziert: http://blog.neutrino.es/2012/git-copy-a-file-or-directory-von-another-repository-preserving-history/

8
scottysb

Wenn Sie nur ein Versionskontroll-Repo mit vollständigem Changeset benötigen, können Sie bzr mit dem bzr-svn-Plugin verwenden.

0
naan