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?
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
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.
Mercurial hat eine eingebaute Konvertierungserweiterung für diese .
Um ein SVN-Repo in ein HG-Repo zu konvertieren und auf einen anderen Server zu kopieren, benötigen Sie einige Dinge.
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…
\\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:\
.CD /D Y:\
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"
)Zweitens das Klonen ...
File -> Clone Repository
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
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
unterirc.freenode.net
.
Es ist also anscheinend möglich - ich verwende Linux, also habe ich es nicht selbst versucht.
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.
Verwendung der convert
-Erweiterung von Mercurial:
convert=
zu dem [extensions]
-Abschnitt von .hgrc wie folgt hinzu: [Erweiterungen]
convert =
Sudo apt-get install python-Subversion
hg convert
-Befehl aus hg convert -h
für Hilfehg convert http://[svnserver]/[Project] --source-type svn [DestinationDir]
(siehe Hinweis 2)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]
besser spät als nie ...
Zwei Antworten zum Preis von einer ...
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.
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