CVSで管理していたソースをGitへ移行する
作業環境
CVSのみ入ってなかったので、brew install cvs
でインストール
cvs2gitインストール
移行方法はいくつかありましたが、情報が多かったcvs2gitを使うことにしました
ただし公式サイトがリンク切れになっているので、こちらからダウンロードしたcvs2gitを使いました
https://github.com/mhagger/cvs2svn
移行手順
管理ファイル取得
移行に必要なのはCVSの管理ファイル(xxx,vファイル)です
まずはこれを取得します
scp -r username@URL:/リポジトリパス ./cvsdump
日本語が含まれている場合は取得できないかもしれません
その場合はサーバーにログインして取得してください
変換
Gitへ移行する際に、ユーザーの紐付けが不要であれば以下でOKです
CVSのコメントが文字化けしたのでencodingはsjisをつけています、環境に合わせてください
cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --encoding=sjis --fallback-encoding=sjis import/
CVSとGitユーザーを紐付ける場合はoptionファイルを利用します
cvs2git --options=cvs2git.options --encoding=sjis --fallback-encoding=sjis
- cvs2gitと同じ場所にcvs2git-example.optionsがあるので、cvs2git.optionsにリネームします
- author_transformsに
CVSユーザー名:Gitユーザー名 <メールアドレス>
を記載します - 正常終了すると、cvs2git-tmpフォルダにblob.dat、git-dump.datができます
インポート
事前に移行先のGitリポジトリを作成しておいてください
作業場所にcloneします
git clone URL
cloneしたディレクトリに移動したあと、blob.dat、git-dump.datをインポートします
cat cvs2git-tmp/git-blob.dat cvs2git-tmp/git-dump.dat | git fast-import
インポートが終わったらプッシュして完了です
git push origin master
ERROR: A CVS repository cannot contain both
こちらを参考に対処します
cvs2svn FAQ
optionファイルを使ってretain-conflicting-attic-files optionを有効にする場合は、
ctx.retain_conflicting_attic_files = False
を
ctx.retain_conflicting_attic_files = True
に変えます