CVSで管理していたソースをGitへ移行する

表題の通り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に変えます

参考