WindowsでSVNからMercurial(HG)に移行/変換する方法


120

履歴、ラベルなどを含む、いくつかのSVNリポジトリをMercurialに移行するためのツールを探しています。

TortoiseHg(Windows x32)を使用しているため、ConvertExtensionsは破棄されます。Linuxボックス(hgsvn)でこのプロセスを実行する方法に関する情報はいくつかありますが、Linuxマシンを使用できません。

これらのPythonスクリプトをWindowsで使用できますか?その場合、何をする必要がありますか?または、このプロセスを実行するために他にどのようなツールを使用できますか?

基本的に、どうすればSVNプロジェクトをMercurialに変換できますか?

回答:


93

私はこの問題に自分で取り組む必要がありました。VisualSVNサーバーをホストする別のWindowsサーバーを備えたWindows XPマシンがあります

私も持ってTortoiseHgのはだけでなく、インストールCollabNetのSubversionのコマンドラインクライアント

<Enable Convert Extension w/ Tortoise Hg 2>

TortoiseHg 2.0を使用すると、変換拡張機能の有効化がこれまでになく簡単になることをコメントで指摘してくれたbgeverに感謝します。彼が言うように

TortoiseHG 2.0では、これがはるかに簡単になりました。[スタート]メニューからTortoiseHGワークベンチを起動します。[ファイル]-> [設定]を選択します。リストから「拡張機能」を選択します。[変換]チェックボックスをオンにして、[OK]をクリックします。それでおしまい!構成ファイルを生成してファイルシステムで検索する必要はありません。– bgever 3月11日7:56

</Enable Convert Extension w/ Tortoise Hg 2>

<Enable Convert Extension Manually>

リポジトリをSVNからHGに変換するには、次の手順に従いました。

1)C:\ Program Files \ TortoiseHg \ Mercurial.iniを開きます

編集

FYI-Tortoise Hgはこのファイルを

  • XP以前-C:\ Documents and Settings \ USERNAME \ Mercurial.ini
  • Vista以降-C:\ Users \ USERNAME \ Mercurial.ini

そのファイルはほとんど空であり、そこで上書きしたいものだけをリストします。それがあなたの手元にある場合は、次の2行をファイルの最後に追加するだけです。

[extensions]
convert =

2)で始まる行を検索します

【エクステンション】

3)その下に、各行にセミコロン(;)でコメント化されたキーワードのリストが表示されます

4)言う行を見つける

;変換=

セミコロンを削除して、

変換=

</Enable Convert Extension Manually>

5)コマンドプロンプトを開き、新しいhgフォルダーを作成するディレクトリに移動します(プロセスにより、コマンドプロンプトが開いているディレクトリにyoursvnreponame-hgという新しいフォルダーが作成されます)。

6)このコマンドを使用する

hg変換file:/// y:/ yoursvnreponame

変換ツールでネットワークリポジトリに問題が発生する可能性があることがわかったため、ドライブをドライブにマップする必要がありましたが、これで問題なく動作しました。


この質問の答えを選択することは困難でした。evilbloodydemonは、変換で変換拡張機能を有効にするように構成を編集するように彼の回答にコメントしたときに正しかったが、この回答はより明確で正確である
David Lay

1
私はSVNコマンドラインクライアントなしでこれをテストし、それも同様に機能したことを述べたかっただけです。これを行うために機能するSVNサーバーも必要ありません。リポジトリファイルのパスにアクセスするだけです。
マイケルラヴォワ

これはMercurial V1.4.3でうまく機能しました。1年前のsvnリポジトリは、完全な履歴をそのままにして非常に迅速に変換されました。どうもありがとう!
ジョナサンウェッブ

1
追加するだけ-デフォルトのTortoiseHGインストールでは、iniファイルは作成されません。最初にいくつかの設定を適用/保存するか、何をしているのかわかっている場合は空のファイルから開始する必要があります。
Ahmad

9
TortoiseHG 2.0では、これがはるかに簡単になりました。[スタート]メニューからTortoiseHGワークベンチを起動します。[ファイル]-> [設定]を選択します。リストから「拡張機能」を選択します。[変換]チェックボックスをオンにして、[OK]をクリックします。それでおしまい!構成ファイルを生成してファイルシステムで検索する必要はありません。
Bart Verkoeijen、2011年

8
  1. ローカルホスト上のSVNサーバーの起動
  2. hg変換svn:// localhost / your_repo
  3. 完了、svnバインディングはfile://プロトコルにのみ必要であるため

いいえ、win32用のMercurialバイナリもTortoiseHgも変換拡張機能が付属していないため、「hg convert」はwin32では有効なコマンドではありません。
David Lay、

1
file://の代わりにsvn://を使用してみましたが、Pythonバインディングを求め続けます
fglez 2009年

file://の代わりにsvn://を使用すると、Pythonバインディングがなくても機能しました。SVNサーバーを起動するには、コマンドは次のとおりです。svnserve -r <
レポルート

7

2
私が知っている、それは私が偶然出会った最初のものですが、「Win32 Mercurialバイナリではこれを行うことができないことに注意してください。組み込みのPythonライブラリにSubversionバインディングをインストールする方法はありません」 TortoiseHg ...
デビッドレイ

LinuxライブCDまたは仮想マシンを使用しますか?
richq 2009年

これは正解です。私はこれをhg変換拡張のみを使用して(selenic.com/mercurial/wiki/…)、pysvn拡張なしのSVNリポジトリのファイルプロトコルを使用しています:hg convert file:/// X:/ HOME / REPOS / mysvnrep newhgrep
van

5

SVNレポをHGレポに変換し、それを別のサーバーにコピーするには、いくつかのものが必要です。

  1. TortoiseHGがインストールされています。(現在使用されているバージョンを確認してください)
  2. Pythonがインストールされました。(現在使用されているバージョンを確認してください)
  3. Pythonモジュール(これらはhttp://pysvn.tigris.org/project_downloads.htmlにあります
  4. convertTortoiseに拡張機能を追加する必要があります。スタートメニューからTortoiseHG Workbenchを起動します。を選択しFile -> Settingsます。Extensionsリストから選択します。チェックconvertボックスをオンにして、[OK]をクリックします。

まず変換…

  1. 現在のSVNリポジトリがあるフォルダーを、作業しているコンピューターにマッピングするのが最適です。(つまり\\server\folder 、SVN Repoフォルダー自体をマップしないでください。その直上のフォルダーをマップします)マップされたドライブに次のような文字を与えますY:\
  2. コマンドプロンプトを開き、次のように入力します。 CD /D Y:\
  3. で、Y:\プロンプト: hg convert y:/RepoName 前進とバックスラッシュのように注意してください(現在のレポの名前を使用します)。コマンドの1つはスラッシュです。また、名前にスペースが含まれている場合は、名前を引用符で囲みます。(つまりY:/"My Repo folder"
  4. これで実行され、古いフォルダと並んで別のフォルダが作成されます。そしてhgフォルダが中にあるはずです。ITは開始されず、開始されません。
  5. 変換が完了しました。

次に、クローニング…

  1. TortoiseHGワークベンチを開きます。に行くFile -> Clone Repository
  2. ソース:変換されたリポジトリの完全なパスを入力します。
  3. 宛先:リポジトリのクローンを作成する場所の絶対パスを入力します。クローン作成プロセスによって作成および初期化されるため、新しい宛先にフォルダーを作成する必要はありません。
  4. 新しいクローンフォルダにアクセス許可を追加します。
  5. 完了しました!!!

こんにちは、なぜinit最初のリポジトリをすべきではないのか説明することは可能ですか?
ベンページ

3

誰もまだhgsubversionExtension Wiki)について言及していないため、ほとんど問題なく(まれなケースと特定のツリーを除いて)これを行うことができます。

拡張子を追加して有効にしhg clone SVN_REPO、ローカルのMercurialリポジトリに追加するだけです


1

これはTortoiseHg FAQにあります:

SubversionリポジトリをMercurialに変換するにはどうすればよいですか?

svn-win32-1.4.6コマンドラインツールをインストールしてから、パスに追加する必要があります。次に、変換拡張機能を有効にする必要があります。この時点で、 ' hg convert'コマンドを使用して変換を実行できるはずです。変換拡張機能に関する問題/質問はMercurialメーリングリストまたは#mercurialに直接送ってくださいirc.freenode.net

したがって、それは明らかに可能です-私はLinuxを使用しているので、自分で試したことはありません。


0

HTTP認証付きのリモートSVNリポジトリをMercurialリポジトリに変換しました。これを行う方法に関するドキュメントは多くありません。Mercurialソースをダウンロードし、ソースパッケージを使用してスタンドアロンでインストールする必要がありました。これにより、SVNバインディングが正しく機能します。

私はそれを次のようにインストールしました:

python setup.py install

私のServer 2003ボックスでは問題なく動作しました。次のようにして、SVNリポジトリを正しい方法で変換できます。

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

MercurialサイトのConvertExtensionのドキュメントはあまり明確ではありませんが、次のように書かれています。

[Mercurial]の組み込みPythonライブラリにSubversionバインディングをインストールする方法はありません。したがって、スタンドアロンのPythonの上にインストールされたMercurialを使用する必要があります。

そのため、変換にはスタンドアロンバージョンを、実際のVCS作業にはTortoiseHgを使用しています。


0

決して遅くないより良い...

1つの価格の2つの答え...

  1. 公開されているオープンソースのリポジトリであれば、http: //svn2github.com/add/を使用するだけで、そのリポジトリをGitHibに複製してHgにプルするのに約30分かかりました。

  2. 使用する利点hg convertは、再開できることです。SVNからHgへの変換には数日かかる場合があります。これを停止すると、中断したところから再開します。

以下は、Codeplex SVNbridgeのゴミのために私が作成したバッチファイルです。この例のリポジトリは、履歴全体をフェッチするのに数日かかりました(私はオーストラリアにいるため、レイテンシが要因であった可能性があります)。TFSサーバーがどこかで良い打撃を与えたと私は思います。

このバッチファイルはいつでも実行でき、実際にまだSVNを使用している唯一のものが地球上に残っている場合、SVNソースから更新をプルします。私はそれをテストしていませんので、これを実行するとどうなるかを確認してください。もし私があなただったら、リポジトリを編集するのであれば元のブランチを放棄します。

robocopy shamapHgリポジトリを複製する場合、SVN履歴を維持するためのものです。shamapは一時的なものです。バッチファイルとshamapを確認してください(新しいブランチでそれを行います)。

バッチ...

@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

Mercurial のconvert拡張機能を使用する:

  1. 拡張変換を有効にします。次のように.hgrc convert=[extensions]セクションに追加します。

    [拡張]
    変換=

  2. Linuxには追加のPythonバインディングが必要です。 sudo apt-get install python-subversion
  3. hg convertコマンドを 実行する
    • hg convert -hヘルプを参照してください
    • 例:(hg convert http://[svnserver]/[Project] --source-type svn [DestinationDir] 注2を参照)
  4. 新しく作成されたMercurialリポジトリにプッシュします。 hg push https://[mercurialserver]/[Project]

:hg convertコマンドを繰り返して、前回の変換後にsvnリポジトリで行われた新しい変更を含めることもできます。

注2:hg convertが使用できない場合、http://またはsvn://最初にSubversionリポジトリをチェックアウト(または既存のリポジトリを更新)して、ローカルチェックアウトを使用して変換する場合。例:hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.