3

私は、ComponentSoftwareのCS-RCS Basicを長年使用して、さまざまな単一開発者プロジェクトを管理してきました。それは私にとっては非常にうまくいきましたが、今は最新のリビジョン管理システムに移行したいと思っています。オプションを検討した後、Mercurialを選択しました。

問題は、私が常にCS-RCSの中央リポジトリを使用していたことです。現在、RCSリポジトリの履歴を保持しながら、個々のプロジェクトに個別のMercurialリポジトリを使用したいと考えています。

いくつかの詳細なグーグルの後、これを行う唯一の方法は、RCSリポジトリを個々のCVSリポジトリに変換してから、それらをMercurialに変換することであると結論付けました。これらの2つのサイトはおそらく最も役に立ちました:

ジェフ・アトウッドが自分の質問をして答えるという考えに沿って、この状況で立ち往生している他の人のために、そして後でまた見つけなければならない場合に備えて、これに答えるつもりです。ご覧のとおり、私は解決策を見つけましたが、それは不格好で、少なくとも1つの重大な問題があります。他の誰かがもっと良い方法を持っているなら、私は確かにそれについて聞きたいです。

4

2 に答える 2

1

これが私が思いついた方法、いぼ、そしてすべてです。私は基本的にCVSについて何も知らず、Mercurialについても(まだ)あまり知らないので、これは少し「貨物カルト」です。

スナップショットを撮ることができるWindowsXP仮想マシンを持っているので、それを実行してから、CVSNTとWindowsコマンドラインバージョンのMercurialをインストールしました(メインマシンでTortoiseHgを使用しています)。これをVMで行ったので、CVSNT、Mercurial、およびこの1回限りの移行中に作成する必要のあるその他のものを簡単に取り除くことができました。ええ、私はおそらくこれを行う必要はありませんでしたが、VMはすでに利用可能であり、何年にもわたってインストール/アンインストールのサイクルから十分な数のアプリが残っています。:-)

私の知る限り、CVSNTは、Windowsマシン上でCVSサーバーを簡単にセットアップできる唯一のプログラムでした。これはかつては無料だったようですが、所有者の現在のサイトは現在お金を要求しています。それは悪いことではありませんが、1回限りの変換を行うためだけにお金を使うことを正当化することはできませんでした。私は最終的にGoogle検索で古いバージョンのCVSNTを追跡し、問題なくインストールしました。

この変換を機能させる方法を学習しているときに取ったメモは次のとおりです。

ロングバージョン

必要なソースコードフォルダをメインコンピュータのドライブからVMのドライブにコピーします。さまざまな「、v」ファイルをC:\RCSフォルダー構造からVM上のこの同じソースコードフォルダーにコピーします。C:\ RCSの対応するフォルダーから、vファイルをコピーするだけです。VMでコマンドプロンプトボックスを開き、次のように入力します。

path %PATH%;C:\Program Files\cvsnt
mkdir \cvs-repo  [or clean the folder out if it already exists]
cvs -d \cvs-repo init
[A DIR of \cvs-repo should show a CVSROOT folder in there.]

にソースコードフォルダのコピーを作成します\cvs-repo\cvs-repoこれで、CVSROOTと新しいフォルダーの2つのフォルダーが作成されます。適切な「、v」ファイルもコピーします。

mkdir \cvs-checkout [or clean that folder out if it already exists]
cd \cvs-checkout
cvs -d \cvs-repo co name_of_your_source_code_folder

「\cvs-checkout\ name_of_your_source_code_folder」のDIRには、CVSからチェックアウトされたすべてのソースコードファイルが表示されます。

まだ行っていない場合は、https: //www.mercurial-scm.org/からMercurialをダウンロードしてインストールしてください。メモ帳のコピーを開き、ファイル「C:\ ProgramFiles \ Mercurial \ hgrc.d\Mercurial.rc」をその中にドラッグします。「[extensions]」の下で、「;convert =」行の先頭にあるセミコロンを削除します。ファイルを「C:\ DocumentsandSettings \ user_name\Mercurial.ini」に保存します

VMコマンドラインに戻ります。

path %PATH%;C:\Program Files\Mercurial
mkdir \my-repo.hg  [or clean that folder out if it already exists]
hg convert --datesort \cvs-checkout\source_code_folder_name \my-repo.hg
cd \my-repo.hg
[A DIR of \my-repo.hg should show a new ".hg" folder.]
hg update
[A DIR should now show the ".hg" folder and all the checked-out files.]

「.hg」フォルダを\my-repoからメインコンピュータのハードドライブのソースコードフォルダにコピーします。宛先フォルダーがTortoiseHgに表示され、適切な変更履歴がすべて表示されますが、すべてのファイルが変更済みとしてマークされます(赤い円の感嘆符のアイコンオーバーレイ)。これは、新しいMercurialリポジトリが、ファイルがWindows(0x0D、0x0A)ではなくUnix行末(0x0A)でチェックインされたと見なすためです。これは「hgconvert」プロセスで発生するようですが、それを回避する方法は見つかりませんでした。

ショートバージョン

すべてがVMに設定されたら、次のようにします。

  • \ cvs-repo、\ cvs-checkout、および\my-repo.hgのすべてを削除します。
  • コマンドラインで、cvs -d \cvs-repo init
  • メインマシンに戻り、ソースコードフォルダーを仮想マシンの共有フォルダーにコピーします(これはVirtualBoxで行う方法です。他のVMソフトウェアでは、フォルダーをVMにドラッグアンドドロップするだけでよい場合があります)。
  • 適切な「、v」ファイルを仮想マシン共有フォルダーのソースコードフォルダーにコピーします。
  • VMに戻り、ソースコードフォルダーを\cvs-repoに移動します。
  • cd \cvs-checkout
  • cvs -d \cvs-repo co name_of_your_source_code_folder
  • hg convert --datesort \cvs-checkout\name_of_your_source_code_folder \my-repo.hg
  • cd \my-repo.hg
  • hg update
  • .hgフォルダーを\my-repoからVMのL:ドライブにコピーします(LはVM共有フォルダーのマップされたドライブ文字です)。
  • そのフォルダーを仮想マシン転送フォルダーからホストコンピューターの最終的なソースコードフォルダーに移動します。

便利なバッチファイル

これが機能するようになったら、VMにこのバッチファイルを設定して、プロセスを可能な限り自動化します。

@echo off
rem Converts source code under RCS control to a Mercurial repository.
rem This batch takes one argument: the name of the source-code folder (in quotes if necessary).
rem
rem This is for a VirtualBox VM that already has CVSNT and Mercurial installed, and has a Shared Folder mapped to drive L.
@echo On the host, copy the source-code folder into the Virtual Machine Transfer folder.  Copy the appropriate ",v" files into the source-code folder in the Virtual Machine Transfer folder.
pause
@echo on
cd \
rmdir /S/Q \cvs-repo
mkdir \cvs-repo 
rmdir /S/Q \cvs-checkout
mkdir \cvs-checkout
rmdir /S/Q \my-repo.hg
mkdir \my-repo.hg
cvs -d \cvs-repo init
xcopy L:\%1 \cvs-repo\%1 /E/I
cd \cvs-checkout
cvs -d \cvs-repo co %1
hg convert --datesort %1 \my-repo.hg
cd \my-repo.hg
hg update
xcopy \my-repo.hg\.hg L:\.hg /E/I

結論

したがって、これはすべて機能しましたが、行末が間違っているファイルが残りました。この質問を見ると、この問題を抱えているのは私だけではないことがわかります。私はこれで生きることができますが、誰かが解決策を知っているなら、それでも修正したいと思います。

于 2010-08-20T23:43:12.523 に答える
0

Mercurialがfast-import/fast-exportをサポートしていて、マルチファイルリポジトリがブランチを使用していない場合は、おそらく私のrcs-fast-exportツール(http://git.oblomov.eu/rcsで入手可能)を使用してみてください。 -fast-export)。これまでRCSからgitにエクスポートするためにのみ使用しましたが、使用されているgit固有のfast-exportコマンドを認識していないため、機能する可能性があります。

于 2010-10-16T09:20:38.793 に答える