web-dev-qa-db-ja.com

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

履歴、ラベルなどを使用して、SVNリポジトリをMercurialに移行するツールを探しています。

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

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

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

120
David Lay

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

TortoiseHGCollabNet Subversion Command-Line Client もインストールされています。

<Enable Convert Extension w/ Tortoise Hg 2>

bgever に感謝します。TortoiseHg2.0では、変換拡張機能の有効化がこれまで以上に簡単になったことをコメントで指摘してくれました。彼が言うように

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を開きます

[〜#〜] edit [〜#〜]

参考までに、Tortoise Hgはこのファイルを

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

そのファイルはほとんど空であり、上書きしたいものをリストするだけです。それがあなたの持っているものなら、ファイルの最後に次の2行を追加するだけです:

[extensions]
convert =

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

[拡張子]

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

4)という行を見つけます

; convert =

そしてセミコロンを削除して

変換=

</Enable Convert Extension Manually>

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

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

hg convert file:/// y:/ yoursvnreponame

変換ツールにはネットワークリポジトリに問題がある可能性があることがわかったため、ドライブをそれにマッピングする必要がありましたが、これはうまくいきました。

92
Michael La Voie
  1. ローカルホスト上のsvnサーバーの起動
  2. hg convert svn:// localhost/your_repo
  3. svnバインディングはfile://プロトコルにのみ必要なため
8
evilbloodydemon

Mercurialには このための組み込み変換拡張機能 があります。

7
Chad Birch

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

  1. TortoiseHGがインストールされました。 (現在使用されているバージョンを確認してください)
  2. Pythonがインストールされました。 (現在使用されているバージョンを確認してください)
  3. Pythonモジュール(モジュールを見つけることができます http://pysvn.tigris.org/project_downloads.html
  4. Tortoiseにconvert拡張子を追加する必要があります。 [スタート]メニューからTortoiseHGワークベンチを起動します。 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. できました!!!
5
SueS

hgsubversionExtension Wiki )についてはまだ誰も言及していません。ほとんど頭痛なしでそれを行うことができます(まれなケースや特定のツリーを除く)。

拡張機能を追加して有効にし、hg clone SVN_REPOローカルMercurialリポジトリへ

3
Lazy Badger

これは TortoiseHg FAQ にあります:

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

Svn-win32-1.4.6コマンドラインツールをインストールしてから、パスに追加する必要があります。次に、変換拡張機能を有効にする必要があります。この時点で、「hg convert '変換を行うコマンド。変換拡張機能に関する問題/質問をMercurialメーリングリストまたは#Mercurial on irc.freenode.net

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

1
Martin Geisler

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

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

python setup.py install

これは、私のServer 2003ボックスでうまく機能しました。次のようなことを行うことで、SVNリポジトリを正しい方法で変換できます。

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

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

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

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

0
Alex Fort

Mercurialの convert extension を使用:

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

    [拡張子]
    convert =

  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]

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

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

0
R. Oosterholt

絶対に遅いより良い...

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

  1. パブリックなオープンソースのレポジトリである場合は、 http://svn2github.com/add/ を使用するだけです。

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

以下は、Codeplex SVNbridgeのゴミのために書いたバッチファイルです。この例のレポは、履歴全体を取得するのに数日かかりました(私はオーストラリアにいるので、待ち時間が要因だったかもしれません)。 TFSサーバーがどこか良い打撃を与えたと思います。

このバッチファイルは、実際にまだSVNを使用している唯一のものである場合、いつでも実行してSVNソースから更新をプルできます。私はそれをテストしていませんので、これを行うとどうなるかを確認してください。

robocopy shamapスタッフは、Hgリポジトリのクローンを作成する場合、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
CAD bloke