SVN/Git/Mercurial リポジトリを別のリポジトリに移行する方法

はじめに

CVS リポジトリを別のリポジトリに移行する方法 では CVS リポジトリを SVN/Git/Mercurial に移行する方法を解説しました。今回は、前回の記事で取り上げなかった、その他のリポジトリの移行方法について解説します。

今回は、CVS のリポジトリを別のリポジトリ(SVN, Git, Mercurial)に移行する方法を説明します。

  1. SVNからGitリポジトリに移行する
  2. SVNからMercurialリポジトリに移行する
  3. GitからMercurialリポジトリに移行する
  4. その他の移行方法

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_18.png

なお、構築に使用したマシン環境は、下記のとおりです。環境が異なっても移行する方法は同じですので CVS から SVN, Git, Mercurial リポジトリに変換することが出来ます。

項目 内容
OS Windows 7 Ultimate 32bit
IPアドレス 192.168.0.253
Cygwin Setup Version 2.831
VirtualBox 4.3.4 r91027
Vagrant 1.3.5

上記のソフトウェアと環境を使って解説を進めていきますが異なる環境でも同様の操作は可能です。また以下の記事を参考にして仮想環境の構築を解説していますので参考にしてください。

SVNからGitリポジトリに移行する

SVNリポジトリをGitリポジトリに変換するには、git-svnパッケージを使用します。

git-svnコマンドでは、移行元のCVSリポジトリを全てbranchとしてインポートしますので、既存のGitリポジトリを移行先のリポジトリとして使用することもできます。

git-svnパッケージのインストール

git-svnパッケージをインストールします。

$ sudo yum -y install git-svn

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_01.png
/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_02.png

マスターリポジトリのクローン

SVNリポジトリをローカルにクローンします。

$ mkdir -p /tmp/svn2git && cd /tmp/svn2git
$ svn list file:///home/vagrant/svnrepo
$ git svn clone -s file:///home/vagrant/svnrepo

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_03.png
/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_04.png

リモートリポジトリの設定

移行先のGitリポジトリを、リモートリポジトリとして設定し、設定内容を確認します。

$ git remote add origin git@gitserver:myrepos.git
$ git remote -v

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_05.png

リモートブランチの確認

git-svnによってローカルにクローンされたリポジトリは、マスターリポジトリへ追加するbranchが含まれていますので、追加すべきbranchを確認します。

今回は、移行元となったCVSリポジトリ中にbranchが含まれていませんので、trunkのみをbranchとして指定します。

$ git branch -a
$ git checkout -b svn2git remotes/trunk

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_06.png

checkoutコマンドの実行によって、マスターリポジトリに送信するbranchが指定できます。

マスターリポジトリへの送信

マスターリポジトリに送信するbranchを確認して、指定したbranchをマスターリポジトリに送信します。

$ git branch
$ git push origin svn2git

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_07.png

マスターリポジトリのクローン

マスターリポジトリ上のbranchを指定して、ローカルにクローンします。

$ mkdir -p /tmp/git && cd /tmp/git
$ git clone -b svn2git git@gitserver:myrepos.git

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_08.png

以上で、SVNリポジトリをGitリポジトリに移行できます。

SVNからMercurialリポジトリに移行する

SVNリポジトリをMercurialリポジトリに変換するには、Mercurialの拡張コマンドconvertを使用します。

なお、CVSの移行ではチェックアウトしたモジュールごとに逐一変換する必要がありましたが、SVNリポジトリは、一括変換が可能です。

リポジトリの変換

hgユーザーでMercurialサーバーに接続し、SVNリポジトリを変換します。

変換が終了したら、ログアウトします。

$ ssh hg@hgserver
$ hg convert file:///home/vagrant/svnrepo ~/svn2hg.hg

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_09.png

リモートリポジトリのクローン

変換したSVNリポジトリを、ローカルにクローンします。

$ mkdir -p /tmp/hg && cd /tmp/hg
$ hg clone ssh://hg@hgserver/svn2hg.hg

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_10.png

以上で、SVNリポジトリをMercurialリポジトリに移行できます。

GitからMercurialリポジトリに移行する

GitリポジトリをMercurialリポジトリに変換するには、Mercurialの拡張コマンドconvertを使用します。

なお、SVNの移行と同様に、Gitリポジトリの一括変換が可能です。

Gitリポジトリのクローン

Gitマスターリポジトリを、ローカルにクローンします。

$ mkdir -p /tmp/git2hg && cd /tmp/git2hg
$ git clone git@gitserver:myrepos.git

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_11.png

リポジトリの変換

hgユーザーでMercurialサーバーに接続し、ローカルにクローンしたGitリポジトリを変換します。

変換が終了したら、ログアウトします。

$ ssh hg@hgserver
$ cd /tmp/git2hg
$ hg convert myrepos ~/git2hg.hg
$ exit

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_12.png
/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_13.png

リモートリポジトリのクローン

変換したGitリポジトリを、ローカルにクローンします。

$ mkdir -p /tmp/hg && cd /tmp/hg
$ hg clone ssh://hg@hgserver/git2hg.hg

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_14.png

以上で、GitリポジトリをMercurialリポジトリに移行できます。

その他の移行方法

今回の記事では、

  1. CVS -> SVN
  2. SVN -> Git
  3. Git -> Mercurial

の順にリポジトリを変換する方法を解説しましたので、例えば SVN -> CVS などのような逆変換は取り上げていません。

手動変換では、移行元のリポジトリ中のモジュールを全てチェックアウトして、移行先のリポジトリにインポートします。

ここでは、CVS -> SVNの手動変換を例にして解説します。

リポジトリのチェックアウト

移行元のリポジトリをチェックアウトします。

$ mkdir -p /tmp/cvs2svn && cd /tmp/cvs2svn
$ export CVSROOT=~vagrant/cvsrepo
$ cvs co cvstest

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_15.png

リポジトリのインポート

移行先のリポジトリにインポートします。

$ cd cvstest
$ svn import . file:///home/vagrant/svnrepo/trunk/manual1 -m 'manual import'
$ svn list file:///home/vagrant/svnrepo/trunk

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_16.png

移行先リポジトリのチェックアウト

移行先のリポジトリをチェックアウトします。

$ mkdir -p /tmp/svn && cd /tmp/svn
$ svn co file:///home/vagrant/svnrepo/trunk/manual1

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_17.png

以上で、CVSリポジトリをSVNリポジトリに移行できます。

ただし、移行元のモジュール数が多くなると作業に時間が掛かりますので、注意して下さい。

まとめ

ここまで、前回の記事で取り上げなかったリポジトリの移行方法について解説しました。前回と今回の記事で解説した変換の難易度と移行方法を参考にして、どのリポジトリに移行するのかを検討しましょう。

/bootcamp/wp-content/themes/_btcp/images/repo-ikou_to_18.png


社内サーバにリモートリポジトリを作るのも一つですが、「開発にまつわる面倒事」をこの際全部、tracpath(トラックパス)に任せてみませんか?
バージョン管理サービス・プロジェクト管理サービスの「tracpath(トラックパス)」では、
ユーザー5名、リポジトリ数3つまで、永久無料で利用可能です。

さっそく実務でも使って見ましょう。
自らも開発を行う会社が作ったからこそ、開発チームの「作る情熱」を支える、やるべきことに集中出来るサービスになっています。
エンタープライズ利用が前提のASPサービスなので、セキュリティも強固です。