branch in hgsubversion repo.

hgsubversionべんり。Subversionのリポジトリと対話できる。

hg clone svn+ssh://server/path/svnrepo hgrepo

てなかんじ。hgrepo が普通のMercurialリポジトリになるので, さらにそれをcloneして孫リポジトリで遊ぶこともできる。

さて,svnのリポジトリでは「お試しコミット」がしづらいので, hgリポジトリにcloneしてそこでお試しコミットなんかをするといい。 クローンしてきたhgrepoにcdして,そこで名前つきブランチを作って そこで作ったローカルパッチをコミットしまくればいい。 ただ, http://mercurial.selenic.com/wiki/HgSubversion にもあるように,名前つきブランチとdefaultブランチをマージすると もう二度と元のsvnリポジトリに対して hg push できなくなる。

どうするか。

hg branch my-branch
# ローカル修正開始
hack
hg ci -m hack-1
hack
hg ci -m hack-2
  :
# 一息ついたら上流の修正を取り込む
hg pull
# rebaseする
hg rebase --svn
hack
hg ci -m hack-3
hack
hg ci -m hack-4
  :
# ここまでのローカルな修正をpushするぞ!
hg pull
hg rebase --svn
hg push

push直前に pull と rebase を忘れない。pushすると名前つきブランチ も消えて,default に一本化される。またローカルハックを続けたいときは hg branch my-branch して臨む。ちょっと手順を間違えるとすぐpush できなくなる。繊細だな。