履歴、ラベルなどを使用して、SVNリポジトリをMercurialに移行するツールを探しています。
TortoiseHg(Windows x32)を使用しているため、ConvertExtensionsは破棄されます。 Linuxボックスでこのプロセスを実行する方法についての情報はありますが( hgsvn )、Linuxマシンは使用できません。
これらのPythonスクリプトをWindowsで使用できますか?その場合、何をする必要がありますか?または、このプロセスを実行するために他のどのツールを使用できますか?
基本的に、SVNプロジェクトをMercurialに変換するにはどうすればよいですか?
私はこの問題に自分で取り組む必要がありました。 Windows XP別のWindowsサーバーホスティング VisualSVNサーバー のマシンがあります。
TortoiseHG と CollabNet 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はこのファイルを
そのファイルはほとんど空であり、上書きしたいものをリストするだけです。それがあなたの持っているものなら、ファイルの最後に次の2行を追加するだけです:
[extensions]
convert =
2)で始まる行を検索する
[拡張子]
3)その下には、各行にセミコロン(;)でコメントアウトされたキーワードのリストが表示されます
4)という行を見つけます
; convert =
そしてセミコロンを削除して
変換=
</Enable Convert Extension Manually>
5)コマンドプロンプトを開き、新しいhgフォルダーを作成するディレクトリに移動します(プロセスにより、コマンドプロンプトが開いているディレクトリにyoursvnreponame-hgという新しいフォルダーが作成されます)。
6)このコマンドを使用します
hg convert file:/// y:/ yoursvnreponame
変換ツールにはネットワークリポジトリに問題がある可能性があることがわかったため、ドライブをそれにマッピングする必要がありましたが、これはうまくいきました。
Mercurialには このための組み込み変換拡張機能 があります。
SVNリポジトリをHGリポジトリに変換して別のサーバーにコピーするには、いくつかのものが必要です。
convert
拡張子を追加する必要があります。 [スタート]メニューからTortoiseHGワークベンチを起動します。 File -> Settings
を選択します。リストからExtensions
を選択します。 [convert
]チェックボックスをオンにして、[OK]をクリックします。まず変換...
\\server\folder
SVN Repoフォルダー自体をマップしないでください。そのすぐ上のフォルダーをマップします)マップされたドライブにY:\
のような文字を付けますCD /D Y:\
」と入力しますY:\
プロンプトタイプで:hg convert y:/RepoName
(現在のリポジトリの名前を使用)スラッシュとバックスラッシュに注意してください。コマンド内の1つはスラッシュです。また、名前にスペースが含まれる場合は、名前を引用符で囲みます。 (つまりY:/"My Repo folder"
)第二にクローニング...
File -> Clone Repository
に移動しますhgsubversion ( Extension Wiki )についてはまだ誰も言及していません。ほとんど頭痛なしでそれを行うことができます(まれなケースや特定のツリーを除く)。
拡張機能を追加して有効にし、hg clone SVN_REPO
ローカルMercurialリポジトリへ
これは TortoiseHg FAQ にあります:
SubversionリポジトリをMercurialに変換するにはどうすればよいですか?
Svn-win32-1.4.6コマンドラインツールをインストールしてから、パスに追加する必要があります。次に、変換拡張機能を有効にする必要があります。この時点で、「
hg convert
'変換を行うコマンド。変換拡張機能に関する問題/質問をMercurialメーリングリストまたは#Mercurial
onirc.freenode.net
。
だからそれは明らかに可能です-私はLinuxを使っているので、自分で試したことはありません。
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を使用します。
Mercurialの convert
extension を使用:
convert=
セクションに[extensions]
を追加します:[拡張子]
convert =
Sudo apt-get install python-Subversion
hg convert
コマンドを実行しますhg convert -h
を参照してくださいhg convert http://[svnserver]/[Project] --source-type svn [DestinationDir]
(注2を参照)hg Push https://[mercurialserver]/[Project]
note:hg convertコマンドを繰り返して、前回の変換後にsvnリポジトリで行われた新しい変更を含めることもできます。
注2:http://
またはsvn://
を使用してhg変換が機能しない場合、まずSubversionリポジトリをチェックアウト(または更新)できます既存のもの)、ローカルチェックアウトを使用して変換します。例:hg convert [DirectoryOfLocalCheckout] --source-type svn [DestinationDir]
絶対に遅いより良い...
1つの価格で2つの答え...
パブリックなオープンソースのレポジトリである場合は、 http://svn2github.com/add/ を使用するだけです。
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