Hgsubversionについて
- 3. こんな人におすすめ
• Mercurial中級者以上
– マルチプルヘッド、rebase を理解していれば
OK
• Subversionリポジトリをhg を使いたい
– Mercurialに移行するためにはハードルが高い
– Subversionのリポジトリのまま一人でも始めら
れる
• 少しずつhgを普及することも
3
- 4. Subversion リポジトリと連携するた
めのいくつかの方法
方法 良い点 悪い点
hgsubversionを使う • 簡単、準備が速い • でかいリポジトリのcloneが遅い
• 新しいリビジョンの取得可能 • svn python bindings に依存
• SVNに直接pushできる • 歴史に奇妙な要素がある場合イン
ポートに失敗することがある
MQだけ使う • セットアップ簡単。迅速かつ安 • リネームはSVNで直接行うこと
価 • SVNの歴史がないため、hg grep ,
• SVNクライアントと、MQ拡張 hg annotate, hg bisect が使えな
を使用するだけ いし、糞マージ
• 面倒かも
Convert拡張を使う • 完全なSVNの歴史。hg grep hg • リネームはSVNで直接行うこと
annotate, hg bisect が使え、良い • 変更のpushは面倒かも
マージが使える • 最近のMercurialが必要で、SVN
bindings のセットアップが難しい
かも。
• ヒント:TortoiseHgには含まれて
る
4
- 5. hgsubversion インストール方法
適当な場所に clone する
$ hg clone http://bitbucket.org/durin42/hgsubversion/ ~/hgsubversion
~/.hgrc に追加する
[extensions]
hgsubversion = ~/hgsubversion/hgsubversion
お疲れ様でした
5
- 6. hgsubversionのインストール確認
$ hg version --svn
Mercurial - 分散構成管理ツール(バージョン 2.1.1)
(詳細は http://mercurial.selenic.com を参照のこと)
Copyright (C) 2005-2012 Matt Mackall 他
本製品はフリーソフトウェアです。
頒布条件に関しては同梱されるライセンス条項をお読みください。
市場適合性や特定用途への可否を含め、 本製品は無保証です。
hgsubversion: 8a226f0f99aa
Subversion: 1.6.13
bindings: SWIG
6
- 7. hgsubversion テスト
tkondou@zion3:~/hgext/hgsubversion$ python tests/run.py
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
...................................................................................................................
----------------------------------------------------------------------
Ran 493 tests in 413.744s
OK
tkondou@zion3:~/hgext/hgsubversion$
7
- 12. hgsubversionの作業フロー
5
4 4
4
hg commit 3 hg pull 3 5
3
2 2 2 hg rebase --svn 2 hg push
hg clone
1 1 1 1
rebaseの手順
$ (hg update –r 3)
自分がコミットしたRev $ hg rebase –svn
$ hg push
SVNに登録されたRev
12
- 14. rebaseとは
• rebaseが必要
– rebase とは指定したリビジョンの親リビジョ
ンを差し替えること
– マルチプルヘッドのマージした状態を解消する
• なぜ必要?
– SVNの歴史を直線にする必要がある
• マルチプルヘッドをマージした状態はpushできな
い
14
- 17. hgsubversion
layoutと機能の関係
Subversionのレイアウ svn:externals 途中Revからの
ト clone
standard-layout ○ ×
(trunk/branches/tags) 未対応
single-layout × ○
(trunk) 対応
17
- 18. hgsubversion の制約
• × コミット時刻が変わる
– コミットした時刻ではなく、push した時刻が
コミットの時刻になる
– push = svn commit であるため。
• × 日本語ファイル名使えない
– 日本語ファイル名が含まれているとcloneでき
ない。またhg側で日本語ファイル名を含めて
pushするとSVN側が破壊される
18
- 19. hgsubversion の制約
• × merge : 使えない
• マルチプルヘッドやブランチをマージした状態を
push できない
– 対策:rebase を用い履歴を直線にする
• × tag : hg側でtag作成してpushしても反映
されない
• SVN側で作成すればOK
• × branch : hg側でbranch作成してpushして
も反映されない
• SVN側で作成すればOK
19