10
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

巨大な CVS リポジトリを Git に移行したときの話

Last updated at Posted at 2016-11-11

背景

歴史の長いプロジェクトでは、バージョン管理に CVS を使っている場合がある。
メンテナンス性向上のため、Git に移行させたかった。
今回移行の対象となったのは、運用期間が長く、branch も多く存在していて、いわゆる巨大なリポジトリ。

移行環境

Ubuntu 12.04

方法1 git cvsimport (失敗)

  • branch も引き継がれるはずだが、すべての branch が import できなかった。
  • 新しめの branch が引き継げない模様
  • 個数制限がある?

方法2 cvs2git (成功)

ツールの準備

データの準備

  • 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
10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?