it-swarm.com.de

Wie kann ich unter Windows von SVN zu Mercurial (hg) migrieren/konvertieren?

Ich suche nach einem Werkzeug, um ein paar SVN-Repositorys zu Mercurial zu migrieren, mit Historie, Labels und so weiter.

Ich verwende TortoiseHg (Windows x32), daher werden ConvertExtensions verworfen. Es gibt einige Informationen dazu, wie Sie diesen Vorgang auf einer Linux-Box ( hgsvn ) ausführen können, aber ich habe keine Linux-Maschine verfügbar.

Kann ich diese Python-Skripts 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 grundsätzlich in Mercurial konvertieren?

120
David Lay

Ich musste dieses Problem nur selbst lösen. Ich habe einen Windows XP - Computer mit einem separaten Windows-Server, der VisualSVN Server hostet.

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, dass mit TortoiseHg 2.0 die Konvertierungserweiterung einfacher als je zuvor aktiviert werden kann. Wie er sagt

Mit TortoiseHG 2.0 wurde dies gemacht viel einfacher: Starten Sie den TortoiseHG Workbench aus dem Startmenü. Wählen Datei -> Einstellungen. Wählen Sie Erweiterungen von der Liste. Überprüfen Sie die "Konvertierung" Kontrollkästchen und klicken Sie auf OK. Das ist es! Nein müssen versuchen, die config .__ zu generieren. Datei mehr und suchen Sie in der Datei System. - bgever 11. März um 7:56 Uhr

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

Um ein Repository von SVN nach HG zu konvertieren, habe ich folgende Schritte ausgeführt:

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

EDIT

Zu Ihrer Information - Tortoise Hg hat diese Datei zu migriert 

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

Diese Datei ist größtenteils leer und Sie geben nur an, was Sie dort überschreiben möchten. Wenn dies der Fall ist, fügen Sie einfach diese beiden Zeilen 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) Finden Sie die Zeile, die besagt 

; convert =

und lösche das Semikolon, damit es gelesen wird 

convert =

</Enable Convert Extension Manually>

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

6) Verwenden Sie diesen Befehl

hg convert file: /// y:/yoursvnreponame

Ich habe festgestellt, dass das Konvertierungs-Tool Probleme mit vernetzten Repositorys haben kann, also musste ich ein Laufwerk zuordnen, aber dies funktionierte für mich gut.

92
Michael La Voie
  1. starten Sie den SVN-Server auf Localhost
  2. hg convert svn: // localhost/ihr_repo
  3. fertig, weil svn-Bindungen nur für das Protokoll file: // benötigt
8
evilbloodydemon
7
Chad Birch

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

  1. TortoiseHG installiert. (Prüfen Sie, welche Version aktuell verwendet wird.)
  2. Python installiert. (Prüfen Sie, welche Version aktuell verwendet wird.)
  3. Die Python-Module (Sie finden sie http://pysvn.tigris.org/project_downloads.html )
  4. Sie müssen Tortoise die Erweiterung convert hinzufügen. Starten Sie die TortoiseHG Workbench über das Startmenü. Wählen Sie File -> Settings. Wählen Sie Extensions aus der Liste aus. Aktivieren Sie das Kontrollkästchen convert und klicken Sie auf OK.

Zuerst die Konvertierung…

  1. Am besten ordnen Sie den Ordner, auf dem sich das aktuelle SVN-Repo befindet, dem Computer zu, an dem Sie arbeiten. (d. h. \\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 wie Y:\.
  2. Öffnen Sie eine Eingabeaufforderung und geben Sie Folgendes ein: CD /D Y:\
  3. Geben Sie an der Eingabeaufforderung Y:\ 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 im Befehl ist ein Schrägstrich. Wenn der Name Leerzeichen enthält, geben Sie den Namen in Anführungszeichen ein. (d. h. Y:/"My Repo folder")
  4. Jetzt sollte es laufen und erstellt einen neuen Ordner neben dem alten. Und ein hg-Ordner sollte drin sein. Es wird nicht initiiert und nicht initialisiert! 
  5. Die Konvertierung ist abgeschlossen.

Zweitens das Klonen ...

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

hgsubversion ( Extension Wiki ) wird von niemandem immer noch nicht erwähnt, was fast ohne Kopfschmerzen auskommt (ausgenommen seltene Fälle und spezifischer Baum).

Fügen Sie einfach die Erweiterung hinzu, aktivieren Sie sie und hg clone SVN_REPO zum lokalen Repository von Mercurial

3
Lazy Badger

Dies ist in der TortoiseHg FAQ :

Wie kann ich ein Subversion-Repository in Mercurial konvertieren?

Sie müssen die Befehlszeilen-Tools svn-win32-1.4.6 installieren und diese dann Ihrem Pfad hinzufügen. Dann müssen Sie die Konvertierungserweiterung aktivieren. An diesem Punkt sollten Sie den Befehl 'hg convert' verwenden können, um die Konvertierung durchzuführen. Bitte richten Sie Probleme/Fragen zur Konvertierungserweiterung an die Mercurial-Mailingliste oder #Mercurial unter irc.freenode.net.

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

1
Martin Geisler

Ich habe gerade ein Remote-SVN-Repo mit HTTP-Authentifizierung in ein Mercurial-Repo konvertiert. Ich musste die Mercurial-Quelle herunterladen und eigenständig mit dem Quellpaket installieren. Auf diese Weise funktionieren die SVN-Bindungen richtig.

Ich habe es installiert wie:

python setup.py install

Was auf meiner Server 2003 Box gut funktioniert hat. Ich kann jetzt ein SVN-Repo auf die richtige Art und Weise konvertieren, indem Sie Folgendes tun:

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

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

Es gibt keine Möglichkeit, das .__ zu installieren. Subversion-Bindungen in [Mercurial] eingebautes Python-Bibliothek. Sie müssen also .__ verwenden. ein Mercurial, der auf einem .__ installiert ist. Stand-alone-Python

Jetzt verwende ich nur die Stand-Alone-Version zum Konvertieren und TortoiseHg für die eigentliche VCS-Arbeit.

0
Alex Fort

Verwendung der convert-Erweiterung von Mercurial:

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

    [Erweiterungen]
    convert =

  2. Linux benötigt zusätzliche Python-Bindungen: Sudo apt-get install python-Subversion
  3. Führen Sie den hg convert-Befehl aus
    • Siehe hg convert -h für Hilfe
    • Beispiel: hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir](siehe Hinweis 2)
  4. Zum neu erstellten Mercurial-Repository wechseln: hg Push https://[mercurialserver]/[Project]

note: Sie können sogar den Befehl hg convert wiederholen, um nach der vorherigen Konvertierung vorgenommene Änderungen im svn-Repository einzubeziehen.

note 2: Wenn hg convert mit http:// oder svn:// nicht funktioniert, können Sie zunächst das Subversion-Repository auschecken (oder ein vorhandenes aktualisieren) und mit dem lokalen Checkout konvertieren. Beispiel: hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

0
R. Oosterholt

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. Dies hat ungefähr eine halbe Stunde gedauert, um dieses Repo in GitHib zu klonen und dann in Hg zu ziehen.

  2. Die Verwendung von hg convert hat den Vorteil, dass sie fortgesetzt werden kann. Die Konvertierung von SVN in Hg kann days dauern. Wenn Sie damit aufhören, wird der Vorgang dort fortgesetzt, wo er aufgehört hat.

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

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

Das robocopy shamap-Zeug ist, die SVN-Historie beizubehalten, wenn Sie das Hg-Repo klonen, shamap ist vergänglich - checken Sie die Batch-Datei und shamap ein (ich würde das für einen 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
CAD bloke