Hgsubversionについて

7,398
-1

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,398
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
14
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Hgsubversionについて

  1. 1. hgsubversionについて TokyoMercurial#3 発表資料 2012/04/14@cointoss1973 Takayuki KONDO
  2. 2. hgsubversionとは• hgsubversionとは – MercurialのExtension • Mercurialには同梱されていません – Mercurialをsubversionクライアントとして使用 2
  3. 3. こんな人におすすめ• Mercurial中級者以上 – マルチプルヘッド、rebase を理解していれば OK• Subversionリポジトリをhg を使いたい – Mercurialに移行するためにはハードルが高い – Subversionのリポジトリのまま一人でも始めら れる • 少しずつhgを普及することも 3
  4. 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. 5. hgsubversion インストール方法適当な場所に clone する$ hg clone http://bitbucket.org/durin42/hgsubversion/ ~/hgsubversion~/.hgrc に追加する[extensions]hgsubversion = ~/hgsubversion/hgsubversionお疲れ様でした 5
  6. 6. hgsubversionのインストール確認$ hg version --svnMercurial - 分散構成管理ツール(バージョン 2.1.1)(詳細は http://mercurial.selenic.com を参照のこと)Copyright (C) 2005-2012 Matt Mackall 他本製品はフリーソフトウェアです。頒布条件に関しては同梱されるライセンス条項をお読みください。市場適合性や特定用途への可否を含め、 本製品は無保証です。hgsubversion: 8a226f0f99aaSubversion: 1.6.13bindings: SWIG 6
  7. 7. hgsubversion テストtkondou@zion3:~/hgext/hgsubversion$ python tests/run.py.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................----------------------------------------------------------------------Ran 493 tests in 413.744sOKtkondou@zion3:~/hgext/hgsubversion$ 7
  8. 8. リポジトリのclone方法• SVNリポジトリをcloneしてみましょう$ hg clone http://python-nose.googlecode.com/svn nose-hg• なお、大きいリポジトリをcloneする場合 は、hg init し [paths] を設定してから pull すると吉 8
  9. 9. TortoiseHg で歴史表示• subversion の revision が表示できる – Converted From にチェック 9
  10. 10. Converted Column 10
  11. 11. SVNに成果を反映 11
  12. 12. hgsubversionの作業フロー 5 4 4 4 hg commit 3 hg pull 3 5 3 2 2 2 hg rebase --svn 2 hg pushhg clone 1 1 1 1 rebaseの手順 $ (hg update –r 3) 自分がコミットしたRev $ hg rebase –svn $ hg push SVNに登録されたRev 12
  13. 13. よくあるケース:push できない• 現象:SVNにpush時、エラーメッセージが出る• 原因1 – SVN側が更新されており、pullする必要がある状態で pullしていない • 対策: pull して rebase すればOK• 原因2 – SVNにコミット済みのチェンジセットを誤って strip(削除)してしまった • 対策: hg rebuildmeta し hg pull すればOK 13
  14. 14. rebaseとは• rebaseが必要 – rebase とは指定したリビジョンの親リビジョ ンを差し替えること – マルチプルヘッドのマージした状態を解消する• なぜ必要? – SVNの歴史を直線にする必要がある • マルチプルヘッドをマージした状態はpushできな い 14
  15. 15. 削除したSVNコミット済みを復旧• hg svn rebuildmetaを使って再度pullすれば OK。 $ hg svn rebuildmeta $ hg pull $ hg update 15
  16. 16. hgsubversion の制約・注意点 16
  17. 17. hgsubversion layoutと機能の関係Subversionのレイアウ svn:externals 途中Revからのト clonestandard-layout ○ ×(trunk/branches/tags) 未対応single-layout × ○(trunk) 対応 17
  18. 18. hgsubversion の制約• × コミット時刻が変わる – コミットした時刻ではなく、push した時刻が コミットの時刻になる – push = svn commit であるため。• × 日本語ファイル名使えない – 日本語ファイル名が含まれているとcloneでき ない。またhg側で日本語ファイル名を含めて pushするとSVN側が破壊される 18
  19. 19. hgsubversion の制約• × merge : 使えない • マルチプルヘッドやブランチをマージした状態を push できない – 対策:rebase を用い履歴を直線にする• × tag : hg側でtag作成してpushしても反映 されない • SVN側で作成すればOK• × branch : hg側でbranch作成してpushして も反映されない • SVN側で作成すればOK 19
  20. 20. svn-externals属性を扱う 20
  21. 21. svn-externals 属性も扱える• .hgsvnexternals を作成 • 定義は“半角スペース”から始まることに注意 [lib] extlib http://svn.hoge.co.jp/svn/extlib• 追加および更新 $ hg add .hgsvnexternals $ hg svn updateexternals 21
  22. 22. まとめ• Mercurial初心者が、SVNからの移行で hgsubversionから導入することはおすすめ しません 22
  23. 23. ご清聴ありがとうございました• hgsubversionは素晴らしいので、SVNを生 で使うのはやめましょう• 参考リンク • http://mercurial.selenic.com/wiki/HgSubversion • https://bitbucket.org/durin42/hgsubversion/overview 23

×