2012-06-19 19 views
6

CVSとRCSのリポジトリをSubversionに変換しています。毎度、破損したvファイルを実行します。私はこれらを手動で修復する方法を考え出しましたが、面倒になりました。最近のプロジェクトでは、手作業で修復するよりも多くのファイルが破損しています。RCS/CVS vファイルを修復するためのツールはありますか?

私は、RCSファイルを解析して修復するツールを用意したいと思います。それはまあ古いバージョンが不完全であることを意味するかもしれません。たとえば、バージョン1.1が見つからなかった場合を見てきました。そのため、空のリビジョンを追加して、欠落していることを示すコメントが追加されました。

私はこのようなツールを見つけようと多くの検索をしましたが、何も出ていませんでした。私は自分の道具を書き始めようとしていましたが、まずここで質問してみるべきだと思いました。

私は単にコードのスナップショットを取得し、それらをインポートすることができ知っている、と私は(ちょうどそれらの提案をオフに頭にする必要がある場合、私はそれに頼るよ:)私は個人的にやる

++おかげ

+0

何被害の本質だとどのようにあなたがそれを修復しています? –

+0

さまざまな種類の損傷があります。私が直面している最悪の事は、vファイルの一部がヌルに置き換えられていることです(私はディスクがいっぱいであると推測しています。遠い過去のある時点でディスクエラーが発生していました)。私ができることは、破損したリビジョン(常に古いバージョンです)を破損していることを示す空のリビジョンに置き換えることです。彼らが現在持っているものより悪くはありません。 – trent

答えて

2

をプロセスが非常に時間がかかるため、結果のレポに完全なデータ/メタデータセットが含まれているため、手動での移行はお勧めしません。

CVSをSVNに移行するツールがあり、cvs2svnと呼ばれています。これはCVSリポジトリをSubversion、git、Bazaarに移行するためのツールです。 クイックスタートアドバイスについては、this how-toを参照してください。

チェックthisアウト:

CVS RCSにちょうどフロントエンドだった、と* .Vファイルは実際にRCS ファイルです。ちょうどそれらをチェックしてください。たとえば、fooをお持ちの場合は、次のコマンドを実行してください:

co foo 

そして、vファイルからfooをチェックアウトします。

また、RCS to SVN converterもあります。あなたもその1つを試すことができます。

+0

はい、私はcvs2svnを使用しています。変換は問題ではありませんが、問題は、破損したvファイルを窒息させることです。手動で修正するのは退屈で、ややエラーが起こりやすいプロセスであり、何らかの方法で自動化されているようです。 – trent

+0

私は自分の答えを更新しました。 :) –

+0

RCSはこれらのファイルにも爆弾を送信します。それらのうちのいくつかは、rlogが失敗するようにダメージを受けますが、ダメージが存在するリビジョンをチェックアウトしようとすると残りの部分が失敗します。私は、rlogを実行しているすべてのvファイルを実行するスクリプトを作成し、各リビジョンでcoを実行しました。これがどのくらいの被害が広がっているかを知る方法です。 – trent

0

私はPythonライブラリeditrcsを書きました。これは、RCSファイルを変更して新しいRCSファイルとして書き出すことができるツリーに解析します。無効なRCSファイルに対処するようには設計されていませんが、破損がデータセクションのみにある場合、または破損したメタデータを回避するためにライブラリを変更する場合は合理的な出発点になります。また

あなたの特定の質問に関連する:

  1. RCSファイルstoreトランク上で後方に行くトランクや差分の最新版。したがって、歴史的なリビジョンのdiffが回復不能に壊れている場合、その変更が何だったのか、それとも矛盾しているのかを推測することができない限り、その前のものは使用できないか、少なくとも間違っている可能性があります。 (ブランチがそれほど破壊の点から、全分岐が問題かもしれない、その分岐点から前方差分として格納されている。)

  2. リビジョンが有することが、リビジョン番号のギャップを有することが有効であることができます"rcs -o"を使用してRCSファイルからremovedになりました。あなたはリビジョンがあるべきヌルの束を持っていればヌル の束が、これは例えば次のとおりです。

    # Setup 
    echo 1 > test 
    echo "initial commit" | ci -l test 
    echo 2 >> test 
    echo "2" | ci -l test 
    echo 3 >> test 
    echo "3" | ci -l test 
    
    # RCS file contains revisions 1.1, 1.2, 1.3 
    rlog test 
    
    # Remove revision 1.2 
    rcs -o1.2 test 
    
    # RCS file now contains revisions 1.1, 1.3 
    rlog test