Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
hgsubversionについて TokyoMercurial#3 発表資料          2012/04/14@cointoss1973 Takayuki KONDO
hgsubversionとは• hgsubversionとは  – MercurialのExtension    • Mercurialには同梱されていません  – Mercurialをsubversionクライアントとして使用        ...
こんな人におすすめ• Mercurial中級者以上 – マルチプルヘッド、rebase を理解していれば   OK• Subversionリポジトリをhg を使いたい – Mercurialに移行するためにはハードルが高い – Subversi...
Subversion リポジトリと連携するた           めのいくつかの方法方法                良い点                              悪い点hgsubversionを使う   •   簡単、準...
hgsubversion インストール方法適当な場所に clone する$ hg clone http://bitbucket.org/durin42/hgsubversion/ ~/hgsubversion~/.hgrc に追加する[exte...
hgsubversionのインストール確認$ hg version --svnMercurial - 分散構成管理ツール(バージョン 2.1.1)(詳細は http://mercurial.selenic.com を参照のこと)Copyrigh...
hgsubversion テストtkondou@zion3:~/hgext/hgsubversion$ python tests/run.py......................................................
リポジトリのclone方法• SVNリポジトリをcloneしてみましょう$ hg clone http://python-nose.googlecode.com/svn nose-hg• なお、大きいリポジトリをcloneする場合  は、hg ...
TortoiseHg で歴史表示• subversion の revision が表示できる  – Converted From にチェック                                 9
Converted Column                   10
SVNに成果を反映            11
hgsubversionの作業フロー                                                              5                           4             ...
よくあるケース:push できない• 現象:SVNにpush時、エラーメッセージが出る• 原因1 – SVN側が更新されており、pullする必要がある状態で   pullしていない   • 対策: pull して rebase すればOK• 原...
rebaseとは• rebaseが必要 – rebase とは指定したリビジョンの親リビジョ   ンを差し替えること     – マルチプルヘッドのマージした状態を解消する• なぜ必要? – SVNの歴史を直線にする必要がある   • マルチプ...
削除したSVNコミット済みを復旧• hg svn rebuildmetaを使って再度pullすれば  OK。 $ hg svn rebuildmeta $ hg pull $ hg update                         ...
hgsubversion の制約・注意点                       16
hgsubversion                layoutと機能の関係Subversionのレイアウ         svn:externals   途中Revからのト                                 ...
hgsubversion の制約• × コミット時刻が変わる – コミットした時刻ではなく、push した時刻が   コミットの時刻になる    – push = svn commit であるため。• × 日本語ファイル名使えない – 日本語フ...
hgsubversion の制約• × merge : 使えない   • マルチプルヘッドやブランチをマージした状態を     push できない     – 対策:rebase を用い履歴を直線にする• × tag : hg側でtag作成して...
svn-externals属性を扱う                     20
svn-externals 属性も扱える• .hgsvnexternals を作成     • 定義は“半角スペース”から始まることに注意 [lib]  extlib http://svn.hoge.co.jp/svn/extlib• 追加およ...
まとめ• Mercurial初心者が、SVNからの移行で  hgsubversionから導入することはおすすめ  しません                              22
ご清聴ありがとうございました• hgsubversionは素晴らしいので、SVNを生  で使うのはやめましょう• 参考リンク   • http://mercurial.selenic.com/wiki/HgSubversion   • http...
Upcoming SlideShare
Loading in …5
×

Hgsubversionについて

8,285 views

Published on

Published in: Technology
  • Be the first to comment

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

×