はじめに
CVS リポジトリを別のリポジトリに移行する方法 では CVS リポジトリを SVN/Git/Mercurial に移行する方法を解説しました。今回は、前回の記事で取り上げなかった、その他のリポジトリの移行方法について解説します。
今回は、CVS のリポジトリを別のリポジトリ(SVN, Git, Mercurial)に移行する方法を説明します。
- SVNからGitリポジトリに移行する
- SVNからMercurialリポジトリに移行する
- GitからMercurialリポジトリに移行する
- その他の移行方法
なお、構築に使用したマシン環境は、下記のとおりです。環境が異なっても移行する方法は同じですので 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
マスターリポジトリのクローン
SVNリポジトリをローカルにクローンします。
$ mkdir -p /tmp/svn2git && cd /tmp/svn2git
$ svn list file:///home/vagrant/svnrepo
$ git svn clone -s file:///home/vagrant/svnrepo
リモートリポジトリの設定
移行先のGitリポジトリを、リモートリポジトリとして設定し、設定内容を確認します。
$ git remote add origin git@gitserver:myrepos.git
$ git remote -v
リモートブランチの確認
git-svnによってローカルにクローンされたリポジトリは、マスターリポジトリへ追加するbranchが含まれていますので、追加すべきbranchを確認します。
今回は、移行元となったCVSリポジトリ中にbranchが含まれていませんので、trunkのみをbranchとして指定します。
$ git branch -a
$ git checkout -b svn2git remotes/trunk
checkoutコマンドの実行によって、マスターリポジトリに送信するbranchが指定できます。
マスターリポジトリへの送信
マスターリポジトリに送信するbranchを確認して、指定したbranchをマスターリポジトリに送信します。
$ git branch
$ git push origin svn2git
マスターリポジトリのクローン
マスターリポジトリ上のbranchを指定して、ローカルにクローンします。
$ mkdir -p /tmp/git && cd /tmp/git
$ git clone -b svn2git git@gitserver:myrepos.git
以上で、SVNリポジトリをGitリポジトリに移行できます。
SVNからMercurialリポジトリに移行する
SVNリポジトリをMercurialリポジトリに変換するには、Mercurialの拡張コマンドconvertを使用します。
なお、CVSの移行ではチェックアウトしたモジュールごとに逐一変換する必要がありましたが、SVNリポジトリは、一括変換が可能です。
リポジトリの変換
hgユーザーでMercurialサーバーに接続し、SVNリポジトリを変換します。
変換が終了したら、ログアウトします。
$ ssh hg@hgserver
$ hg convert file:///home/vagrant/svnrepo ~/svn2hg.hg
リモートリポジトリのクローン
変換したSVNリポジトリを、ローカルにクローンします。
$ mkdir -p /tmp/hg && cd /tmp/hg
$ hg clone ssh://hg@hgserver/svn2hg.hg
以上で、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
リポジトリの変換
hgユーザーでMercurialサーバーに接続し、ローカルにクローンしたGitリポジトリを変換します。
変換が終了したら、ログアウトします。
$ ssh hg@hgserver
$ cd /tmp/git2hg
$ hg convert myrepos ~/git2hg.hg
$ exit
リモートリポジトリのクローン
変換したGitリポジトリを、ローカルにクローンします。
$ mkdir -p /tmp/hg && cd /tmp/hg
$ hg clone ssh://hg@hgserver/git2hg.hg
以上で、GitリポジトリをMercurialリポジトリに移行できます。
その他の移行方法
今回の記事では、
- CVS -> SVN
- SVN -> Git
- Git -> Mercurial
の順にリポジトリを変換する方法を解説しましたので、例えば SVN -> CVS などのような逆変換は取り上げていません。
手動変換では、移行元のリポジトリ中のモジュールを全てチェックアウトして、移行先のリポジトリにインポートします。
ここでは、CVS -> SVNの手動変換を例にして解説します。
リポジトリのチェックアウト
移行元のリポジトリをチェックアウトします。
$ mkdir -p /tmp/cvs2svn && cd /tmp/cvs2svn
$ export CVSROOT=~vagrant/cvsrepo
$ cvs co cvstest
リポジトリのインポート
移行先のリポジトリにインポートします。
$ cd cvstest
$ svn import . file:///home/vagrant/svnrepo/trunk/manual1 -m 'manual import'
$ svn list file:///home/vagrant/svnrepo/trunk
移行先リポジトリのチェックアウト
移行先のリポジトリをチェックアウトします。
$ mkdir -p /tmp/svn && cd /tmp/svn
$ svn co file:///home/vagrant/svnrepo/trunk/manual1
以上で、CVSリポジトリをSVNリポジトリに移行できます。
ただし、移行元のモジュール数が多くなると作業に時間が掛かりますので、注意して下さい。
まとめ
ここまで、前回の記事で取り上げなかったリポジトリの移行方法について解説しました。前回と今回の記事で解説した変換の難易度と移行方法を参考にして、どのリポジトリに移行するのかを検討しましょう。
社内サーバにリモートリポジトリを作るのも一つですが、「開発にまつわる面倒事」をこの際全部、tracpath(トラックパス)に任せてみませんか?
バージョン管理サービス・プロジェクト管理サービスの「tracpath(トラックパス)」では、
ユーザー5名、リポジトリ数3つまで、無料で利用可能です。
さっそく実務でも使って見ましょう。
自らも開発を行う会社が作ったからこそ、開発チームの「作る情熱」を支える、やるべきことに集中出来るサービスになっています。
エンタープライズ利用が前提のASPサービスなので、セキュリティも強固です。