20年前のプロジェクト 履歴を失うことなくRCSからgitに移行したいと思っています。すべてのWebページは、One TruePathがCVSを経由することを示唆しています。しかし、1時間グーグルしてさまざまなスクリプトを試した後、RCSプロジェクトツリーを正常に変換するものはまだ見つかりませんでした。 Stackoverflowの優秀な人々が、機能すると主張されているものと機能していないものではなく、実際に機能しているものを知ってくれることを願っています。
(ネイティブSO検索とGoogle検索の両方を使用してStackoverflowを検索しましたが、データベースに役立つ回答がある場合は、それを見逃しました。)
[〜#〜]更新[〜#〜]:rcs-fast-export
tool at http://git.oblomov.eu/rcs-fast-export は2009年4月14日に修復されましたが、このバージョンは私にとってはうまくいくようです。このツールは、straightを中間CVSなしでgitに変換します。ジュゼッペとヤクブに感謝します!!!
私がまだ覚えている、うまくいかなかったこと:
rcs-to-cvs
CVSソースのcontrib
ディレクトリに出荷されるスクリプト
rcs-fast-export
ツール http://git.oblomov.eu/rcs-fast-export 2010年4月13日より前のバージョン
rcs2cvs
「CVS-RCS-HOW-TODocumentforLinux」というドキュメントにあるスクリプト
Git Wikiの InterfacesFrontendsAndTools ページの「ツール」、「他のリビジョン管理システムとの相互作用」、「その他」を参照してください。そこに説明とrcs-fast-export( gitweb )Ruby Giuseppe "Oblomov" Bilottaによるスクリプト。
(Web検索では、Ohlohページと言及されたプロジェクトの発表も見つかります)。
OK、少しいじった後、RCSをCVSに変換するのは簡単だとわかりました。ファイルは同じ形式であるため、ファイルを既存のCVSルートに移動するだけです。これは、RCSファイルにアクセスできることを前提としています。
# Create CVS root dir. You only need to do this once.
mkdir $HOME/cvs/
cd $HOME/cvs/
cvs init
# Import a repository from RCS to CVS
cp -a _projectname_/RCS $HOME/cvs/_projectname_
私もこの問題を抱えていて、cvs2svn、parsecvsなどと格闘しました。 parsecvs が最も近くなりましたが、Keithがそれを残したようで、ランダムなフォークがポップアップしています。私が直面した問題は、RCSファイルを正常に解析することでしたが、最後に行ったのはgit rm
ファイルでした。そのため、削除を元に戻すにはgit reset
をいじくり回さなければなりませんでした。
次に、Mercurialのconvert
を発見しました: https://www.Mercurial-scm.org/wiki/ConvertExtension 問題は解決しました!
別々のRCSツリーからいくつかのものを段階的に追加しようとしましたが、うまくいったようです。
ちょうどこれを見つけました、それは私にとってうまくいきました:
http://cynic.cc/blog/posts/migrate-from-rcs-to-git/
そのページの「cvs-source-dir」は絶対パスである必要があることに注意してください。
原則として、実行するスクリプトには注意が必要です。 RCS-> GITの場合、RCS-> CVS-> GITの方法論に従うことが最善の利益になる可能性があります。
2011-01-12の時点でrcs-fast-export.rbをざっと見て、コードのこの部分に出くわしました。これはせいぜい怖いです。
# steal username/email data from other init files that may contain the
# information
def steal_username
[
# the user's .hgrc file for a username field
['~/.hgrc', /^\s*username\s*=\s*(["'])?(.*)\1$/, 2],
# the user's .(g)vimrc for a changelog_username setting
['~/.vimrc', /changelog_username\s*=\s*(["'])?(.*)\1$/, 2],
['~/.gvimrc', /changelog_username\s*=\s*(["'])?(.*)\1$/, 2],
[]
].each do |fn, rx, idx|
...