背景
歴史の長いプロジェクトでは、バージョン管理に CVS を使っている場合がある。
メンテナンス性向上のため、Git に移行させたかった。
今回移行の対象となったのは、運用期間が長く、branch も多く存在していて、いわゆる巨大なリポジトリ。
移行環境
Ubuntu 12.04
方法1 git cvsimport (失敗)
- branch も引き継がれるはずだが、すべての branch が import できなかった。
- 新しめの branch が引き継げない模様
- 個数制限がある?
方法2 cvs2git (成功)
ツールの準備
- http://cvs2svn.tigris.org/servlets/ProjectDocumentList ここから cvs2svn をダウンロードする
- 名前は svn だけど git 用も一緒に入っている
- 解凍して適当に make install
- cvs2git が使えるように適当に PATH 通しておく
データの準備
- cvs checkout の状態ではNG。***. v 等の生状態が必要。
- CVSROOT 以下と移行したいリポジトリのディレクトリ以下をローカルにコピーしてくる
- scp -r -P 22 uzyura@xxx.xxx.co.jp:/data/cvs/CVSROOT /home/uzyura/work/soft/import/
- scp -r -P 22 uzyura@xxx.xxx.co.jp:/data/cvs/ProjectName /home/uzyura/work/soft/import/
データのインポート
- データをインポートさせたい場所に移動
- cd /home/uzyura/work/soft/
- データをインポートする
- cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=uzyura--encoding=utf-8 --fallback-encoding=utf-8 import/
- 今回1時間ぐらいかかった。5GB ぐらいのファイルが生成
リポジトリへ反映
- あらかじめ Git リポジトリを作成しておき、クローンする
- git clone https://xxx/リポジトリ名.git
- インポートする
- cd リポジトリ名
- cat ../git-blob.dat ../git-dump.dat | git fast-import
とある cvs ブランチ を Git の master ブランチにする
- git checkout ブランチ名
- git merge -s ours master
- git checkout master
- git merge ブランチ名
- git push origin master