Migrieren / Konvertieren von SVN nach Mercurial (hg) unter Windows


120

Ich suche nach einem Tool zum Migrieren einiger SVN-Repositorys nach Mercurial mit Verlauf, Beschriftungen usw.

Ich verwende TortoiseHg (Windows x32), daher werden ConvertExtensions verworfen. Es gibt einige Informationen darüber, wie dieser Prozess auf einer Linux-Box ( hgsvn ) ausgeführt wird, aber ich habe keinen Linux-Computer zur Verfügung.

Kann ich diese Python-Skripte unter Windows verwenden? Wenn ja, was muss ich tun? Oder welche anderen Tools kann ich für diesen Prozess verwenden?

Wie kann ich ein SVN-Projekt in Mercurial konvertieren?

Antworten:


93

Ich musste dieses Problem nur selbst angehen. Ich habe einen Windows XP-Computer mit einem separaten Windows-Server, auf dem VisualSVN Server gehostet wird .

Ich habe auch TortoiseHG installiert sowie den CollabNet Subversion Command-Line Client .

<Enable Convert Extension w/ Tortoise Hg 2>

Vielen Dank an bgever für den Hinweis in den Kommentaren, dass es mit TortoiseHg 2.0 einfacher als je zuvor ist, die Konvertierungserweiterung zu aktivieren. Wie er sagt

Mit TortoiseHG 2.0 wurde dies erheblich vereinfacht: Starten Sie die TortoiseHG Workbench über das Startmenü. Wählen Sie Datei -> Einstellungen. Wählen Sie Erweiterungen aus der Liste. Aktivieren Sie das Kontrollkästchen "Konvertieren" und klicken Sie auf "OK". Das ist es! Sie müssen nicht mehr versuchen, die Konfigurationsdatei zu generieren und im Dateisystem zu suchen. - Bgever 11. März um 7:56 Uhr

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

Um ein Repository von SVN in HG zu konvertieren, habe ich die folgenden Schritte ausgeführt:

1) Öffnen Sie C: \ Programme \ TortoiseHg \ Mercurial.ini

BEARBEITEN

Zu Ihrer Information - Tortoise Hg hat diese Datei auf migriert

  • XP oder älter - C: \ Dokumente und Einstellungen \ USERNAME \ Mercurial.ini
  • Vista oder höher - C: \ Users \ USERNAME \ Mercurial.ini

Diese Datei ist größtenteils leer und Sie listen nur auf, was Sie dort überschreiben möchten. Wenn Sie das haben, fügen Sie einfach diese beiden Zeilen ganz am Ende der Datei hinzu:

[extensions]
convert =

2) Suchen Sie nach der Zeile, die mit beginnt

[Erweiterungen]

3) Darunter sehen Sie eine Liste von Schlüsselwörtern, die in jeder Zeile mit einem Semikolon (;) auskommentiert sind

4) Suchen Sie die Zeile mit der Aufschrift

; convert =

und löschen Sie das Semikolon, damit es liest

konvertieren =

</Enable Convert Extension Manually>

5) Öffnen Sie die Eingabeaufforderung und navigieren Sie zu dem Verzeichnis, in dem der neue hg-Ordner erstellt werden soll (der Prozess erstellt einen neuen Ordner mit dem Namen yourvnreponame-hg in dem Verzeichnis, in dem die Eingabeaufforderung geöffnet ist).

6) Verwenden Sie diesen Befehl

hg Datei konvertieren: /// y: / yoursvnreponame

Ich habe festgestellt, dass das Konvertierungstool Probleme mit vernetzten Repositorys haben kann, daher musste ich ihm ein Laufwerk zuordnen, aber das hat für mich gut funktioniert.


Die Auswahl der Antwort auf diese Frage war schwierig. evilbloodydemon hatte recht, als er in seiner Antwort kommentierte, die Konfiguration zu bearbeiten, um die Konvertierungserweiterung zu aktivieren, aber diese Antwort ist klarer und präziser
David Lay

1
Ich wollte nur erwähnen, dass ich dies ohne den SVN-Befehlszeilenclient getestet habe und es auch funktioniert hat. Dazu benötigen Sie nicht einmal einen SVN-Server, sondern greifen nur auf den Repository-Dateipfad zu.
Michael La Voie

Dies hat bei Mercurial V1.4.3 gut funktioniert. Ein 1 Jahre altes SVN-Repository wurde sehr schnell konvertiert, wobei der gesamte Verlauf intakt war. Danke vielmals!
Jonathan Webb

1
Nur zum Hinzufügen: Die INI-Datei wird bei einer Standardinstallation von TortoiseHG nicht erstellt. Sie müssen zuerst einige Einstellungen anwenden / speichern oder mit einer leeren Datei beginnen, wenn Sie wissen, was Sie tun.
Ahmad

9
Mit TortoiseHG 2.0 wurde dies erheblich vereinfacht: Starten Sie die TortoiseHG Workbench über das Startmenü. Wählen Sie Datei -> Einstellungen. Wählen Sie Erweiterungen aus der Liste. Aktivieren Sie das Kontrollkästchen "Konvertieren" und klicken Sie auf "OK". Das ist es! Sie müssen nicht mehr versuchen, die Konfigurationsdatei zu generieren und im Dateisystem zu suchen.
Bart Verkoeijen

8
  1. Starten Sie den SVN-Server auf localhost
  2. hg convert svn: // localhost / your_repo
  3. erledigt, da SVN-Bindungen nur für das Protokoll file: // benötigt werden

Nein, weder Quecksilber-Binärdateien für win32 noch TortoiseHg werden mit Konvertierungserweiterungen geliefert, daher ist "hg convert" nicht einmal ein gültiger Befehl für win32.
David Lay

1
Ich habe versucht, svn: // anstelle von file: // zu verwenden, aber es wird immer wieder nach Python-Bindungen
gefragt

Die Verwendung von svn: // anstelle von file: // funktionierte bei mir ohne die Python-Bindungen. Um den SVN-Server zu starten, lautet der Befehl: svnserve -r <Pfad zum Repo-Root> -d
Petter Wigle

7

Mercurial verfügt hierfür über eine integrierte Konvertierungserweiterung .


2
Ich weiß, es ist das erste, worüber ich gestolpert bin, aber ich zitiere: "Beachten Sie, dass Sie dies mit den Win32 Mercurial-Binärdateien nicht tun können - es gibt keine Möglichkeit, die Subversion-Bindungen in der integrierten Python-Bibliothek zu installieren." TortoiseHg ...
David Lay

Verwenden Sie eine Linux-Live-CD oder eine virtuelle Maschine?
Richq

Dies ist eine absolut richtige Antwort. Ich habe dies nur mit der Erweiterung hg convert ( selenic.com/mercurial/wiki/… ) und mit dem Dateiprotokoll für das SVN-Repository ohne pysvn-Erweiterung getan: hg convert file: /// X: / HOME / REPOS / mysvnrep newhgrep
van

5

Um ein SVN-Repo in ein HG-Repo umzuwandeln UND auf einen anderen Server zu kopieren, benötigen Sie einige Dinge.

  1. TortoiseHG installiert. (Überprüfen Sie, welche Version derzeit verwendet wird.)
  2. Python installiert. (Überprüfen Sie, welche Version derzeit verwendet wird.)
  3. Die Python-Module (Sie finden sie unter http://pysvn.tigris.org/project_downloads.html )
  4. Sie müssen die convertErweiterung zu Tortoise hinzufügen . Starten Sie die TortoiseHG Workbench über das Startmenü. Wählen Sie File -> Settings. Wählen Sie Extensionsaus der Liste. Aktivieren Sie das convertKontrollkästchen und klicken Sie auf OK.

Zuerst die Umstellung…

  1. Es ist am besten, den Ordner, in dem sich das aktuelle SVN-Repo befindet, dem Computer zuzuordnen, an dem Sie arbeiten. (dh \\server\folder Ordnen Sie den SVN Repo-Ordner nicht selbst zu. Ordnen Sie den Ordner direkt darüber zu.) Geben Sie dem zugeordneten Laufwerk einen Buchstaben wieY:\
  2. Öffnen Sie eine Eingabeaufforderung und geben Sie Folgendes ein: CD /D Y:\
  3. Y:\Geben Sie an der Eingabeaufforderung Folgendes ein: hg convert y:/RepoName (Verwenden Sie den Namen des aktuellen Repo.) Achten Sie auf die Schrägstriche vor und zurück. Der Befehl ist ein Schrägstrich. Wenn der Name Leerzeichen enthält, setzen Sie den Namen in Anführungszeichen. (dh Y:/"My Repo folder")
  4. Jetzt sollte es laufen und neben dem alten einen weiteren Ordner erstellen. Und ein hg-Ordner sollte sich darin befinden. ES WIRD NICHT INITIIERT UND NICHT INITIIERT!
  5. Die Konvertierung ist abgeschlossen.

Zweitens das Klonen…

  1. Öffnen Sie die TortoiseHG Workbench. Gehe zuFile -> Clone Repository
  2. Quelle: Geben Sie den vollständigen Pfad des konvertierten Repos ein.
  3. Ziel: Geben Sie den vollständigen Pfad ein, auf dem das Repo geklont werden soll. Es ist nicht erforderlich, einen Ordner am neuen Ziel zu erstellen, da der Klonprozess ihn erstellt und initialisiert.
  4. Fügen Sie die Berechtigungen zum neuen geklonten Ordner hinzu.
  5. Du bist fertig!!!

Hallo, ist es möglich zu erklären, warum Sie nicht initdas erste Repository sollten?
Ben Seite

3

Noch immer erwähnt niemand hgsubversion ( Extension Wiki ), was ohne Kopfschmerzen (mit Ausnahme seltener Fälle und bestimmter Bäume) möglich ist.

Fügen Sie einfach die Erweiterung hinzu, aktivieren Sie sie und hg clone SVN_REPOdas lokale Quecksilber-Repo


1

Dies ist in den TortoiseHg FAQ :

Wie kann ich ein Subversion-Repository in Mercurial konvertieren?

Sie müssen die Befehlszeilentools svn-win32-1.4.6 installieren und dann Ihrem Pfad hinzufügen. Dann müssen Sie die Konvertierungserweiterung aktivieren. Zu diesem Zeitpunkt sollten Sie in der Lage sein, hg convertdie Konvertierung mit dem Befehl ' ' durchzuführen. Bitte richten Sie Probleme / Fragen zur Konvertierungserweiterung an die Mercurial-Mailingliste oder #mercurialan irc.freenode.net.

Es ist also anscheinend möglich - ich benutze Linux, also habe ich es nicht selbst versucht.


0

Ich habe gerade ein Remote-SVN-Repo mit HTTP-Authentifizierung in ein Mercurial-Repo konvertiert, und ich möchte Ihnen sagen, dass es nicht viele Dokumentationen dazu gibt. Ich musste die Mercurial-Quelle herunterladen und sie mithilfe des Quellpakets eigenständig installieren, damit die SVN-Bindungen ordnungsgemäß funktionieren.

Ich habe es wie folgt installiert:

python setup.py install

Was auf meiner Server 2003-Box gut funktioniert hat. Ich kann jetzt ein SVN-Repo richtig konvertieren, indem ich so etwas mache:

python c:\python26\scripts\hg convert <remote repo>

Die Dokumentation für ConvertExtension auf der Mercurial-Site ist nicht besonders klar, sagt aber Folgendes aus:

Es gibt keine Möglichkeit, die Subversion-Bindungen in der integrierten Python-Bibliothek von [Mercurial] zu installieren. Sie müssen also einen Mercurial verwenden, der auf einem eigenständigen Python installiert ist

Jetzt verwende ich nur die eigenständige Version zum Konvertieren und TortoiseHg für die eigentliche VCS-Arbeit.


0

besser spät als nie ...

Zwei Antworten zum Preis von einer ...

  1. Wenn es sich um ein öffentliches Open-Source-Repo handelt, können Sie einfach http://svn2github.com/add/ verwenden. Es dauerte ungefähr eine halbe Stunde, um dieses Repo auf GitHib zu klonen und es dann einfach in Hg zu ziehen.

  2. Der Vorteil der Verwendung hg convertist, dass sie wieder aufgenommen werden kann. Das Konvertieren von SVN in Hg kann Tage dauern . Wenn Sie dies beenden, wird es dort fortgesetzt, wo es aufgehört hat.

Unten ist eine Batch-Datei, die ich geschrieben habe, weil Codeplex SVNbridge Müll. Das Repo in diesem Beispiel hat einige Tage gedauert, um die gesamte Geschichte abzurufen (ich bin in Australien, daher war die Latenz möglicherweise ein Faktor). Ich würde gerne glauben, dass es einem TFS-Server irgendwo eine gute Chance gegeben hat.

Diese Batch-Datei kann jederzeit ausgeführt werden, um Aktualisierungen aus der SVN-Quelle abzurufen, wenn sie die einzigen auf der Welt sind, die SVN tatsächlich noch verwenden. Ich habe es nicht getestet. Sehen Sie also, was passiert, wenn Sie dies tun. Wenn ich Sie wäre, würde ich den ursprünglichen Zweig verlassen, wenn Sie das Repo bearbeiten möchten.

Das robocopy shamapZeug ist, den SVN-Verlauf beizubehalten, wenn Sie das Hg-Repo klonen. Shamap ist kurzlebig - überprüfen Sie die Batch-Datei und shamap in (ich würde das in einem neuen Zweig tun).

der Stapel...

@echo off
mode con:cols=100 lines=800

:: Change the SVN remote name here
::
set remote=https://cinch.svn.codeplex.com/svn
::

title Fetching SVN from %remote%. This could take...DAYS
echo .
echo Fetching SVN checkins from %remote%
echo .
echo Dependencies: Tortoise Hg and hg.exe in the Path would be ideal.
echo using hg convert
echo .
echo First, I will make a backup of shamap in the hg repo folder.
echo If shamap in .hg\ is newer then it will be copied to the repo.
echo You should commit it so hg clones of this repo work with this.
echo Commit this .BeeyATch file as well.
echo shamap keeps track of what has been fetched from SVN.
echo ok, that ends the educational part of this script...
echo Now I will fetch SVN changes from
echo %remote%
echo ...
echo ...(this could take quite some time)...
echo ...DAYS...yes...DAYS
echo ...especially if it's fecking Codeplex SVN...
echo .
echo If this craps out just run it again - it will resume from where it left off. 
echo and fetch the rest...eventually
echo .
echo Control C to abort or any other key to start:
echo .

pause

echo .
:: http://mercurial.selenic.com/wiki/ConvertExtension <== see for details of shamap
:: copy the shamap from the original convert into the .hg folder unless it is already there & newer
:: don't panic if shamap is much bigger than the original - diff it to see why
robocopy .\ .\.hg\ shamap /XO 
robocopy .\.hg\ .\ shamap /XO 
echo .

hg convert --verbose --debug %remote% "%CD%"
echo .
echo .
echo Finished fetching from %remote%
title Finished fetching from %remote%
echo Any  key to Exit
echo .
pause

exit

0

Verwenden der convertErweiterung von Mercurial:

  1. Konvertierungserweiterung aktivieren; fügen Sie convert=zu dem [extensions]Abschnitt von .hgrc wie folgt aus :

    [Erweiterungen]
    convert =

  2. Linux benötigt zusätzliche Python-Bindungen: sudo apt-get install python-subversion
  3. hg convertBefehl ausführen
    • Siehe hg convert -hfür Hilfe
    • Beispiel: hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir] (siehe Anmerkung 2)
  4. In neu erstelltes Mercurial-Repository verschieben: hg push https://[mercurialserver]/[Project]

Hinweis : Sie können den Befehl hg convert sogar wiederholen, um neue Änderungen aufzunehmen, die nach der vorherigen Konvertierung im svn-Repository vorgenommen wurden.

Hinweis 2 : Wenn hg convert nicht funktioniert http://oder svn://Sie zuerst das Subversion-Repository auschecken (oder ein vorhandenes aktualisieren) und mit der lokalen Kasse konvertieren können; Beispiel:hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.