Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

背景

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

移行環境

Ubuntu 12.04

方法1 git cvsimport (失敗)

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

方法2 cvs2git (成功)

ツールの準備

データの準備

  • cvs checkout の状態ではNG。***. v 等の生状態が必要。
  • CVSROOT 以下と移行したいリポジトリのディレクトリ以下をローカルにコピーしてくる

データのインポート

  • データをインポートさせたい場所に移動
    • 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 リポジトリを作成しておき、クローンする
  • インポートする
    • 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
uzyura
Embedded Systems Specialist
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away