HgSubversion試してみた

夏休み突入しました。周りでは突入出来てない人もいるけど。。。--);

ネットワークがつながらない状況での分散開発をマジにやりそうなので、それにそなえてHgSubversionを調べてみました。
開発者はSVNしか意識しないで、構成管理担当者がcloneして差分をbundleファイルでやりとりするのをイメージしてます。

svn diffのやり取りでもいけるかもしれませんが、まずはMercurialSubversionの連携をやってみます。

試したOSはWindows Vistaです。

1.インストール

Subversion
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=11151&expandFolder=11151&folderID=91
からSetup-Subversion-1.6.6.msiをダウンロードしてインストール

いちおうTortoiseSVN
http://tortoisesvn.net/downloads
からTortoiseSVN-1.6.10.19898-win32-svn-1.6.12.msiをダウンロードしてインストールしておきます。

TortoiseHgは
http://tortoisehg.bitbucket.org/
からtortoisehg-1.1.1-hg-1.6.1023-x86.msiをダウンロードしてインストール

hgsubversionのclone。リビジョンは653です。

hg clone http://bitbucket.org/durin42/hgsubversion

C:\hgsvnにcloneしたので、C:\Users\ユーザ名\mercurial.iniに以下を追記

[extensions]
hgsubversion = C:\hgsvn\hgsubversion

2.Subversion側でプロジェクトのimport
Subversionの基礎練習
を途中までやってみます。

C:\> mkdir C:\home
C:\> mkdir C:\home\repos
C:\> svnadmin create C:\home\repos
C:\> mkdir work
C:\> cd work
C:\work> mkdir myproject
C:\work> cd myproject
C:\work\myproject> echo This is readme file. > readme.txt
C:\work\myproject> svn import file:///C:/home/repos/myproject -m "Initial import."
C:\work\myproject> cd ..
C:\work> del myproject
C:\work> rmdir myproject

この時点でこんな感じ。リビジョンは1です。


3.Subversion側のプロジェクトをhg clone

ではcloneしてみましょう。

こんな感じになります。リビジョンは0です。0からはじまるようですが、これはSubversion側のリビジョン1に相当します。


4.Subversion側でcommit

Subversion側でソースを編集してコミットします。

C:\work> svn checkout file:///C:/home/repos/myproject myproject
C:\work> cd myproject
C:\work\myproject> echo Nice to meet you. >> readme.txt
C:\work\myproject> svn commit -m "Add a greeting."

こんな感じになります。リビジョンは2です。

5.hg側での取り込み

上記のSubversion側でのcommitをhg側に取り込みます。

Pull incoming changesetsボタンを押します。

そうするとSubversion側の変更が取り込まれます。

しかし、この時点ではローカルのファイルは書き変わりません。
headsが1でparentsが0という状況なのでupdateしてリビジョン1にします。これはSubversion側のリビジョン2に相当します。


これでローカルも書き変わります。

6.hg側でcommit
hg側でもファイルを追加してコミットしてみます。

C:\>cd myproject
C:\myproject>ls
readme.txt
C:\myproject>cat readme.txt
This is readme file.
Nice to meet you.
C:\myproject>echo Hello. > hello.txt
C:\myproject>ls
hello.txt readme.txt
C:\myproject>hg status
? hello.txt
C:\myproject>hg add hello.txt
C:\myproject>hg commit hello.txt -m "Add hello.txt."

こんな感じになります。リビジョン2になりました。

Push outgoing changesetsボタンを押してSubversion側にpushします。

Subversion側はこんな感じになります。リビジョン3になりました。

いじょ。なかなか面白いですね。