SlideShare una empresa de Scribd logo
1 de 23
hgsubversionについて

 TokyoMercurial#3 発表資料
          2012/04/14
@cointoss1973 Takayuki KONDO
hgsubversionとは
• hgsubversionとは
  – MercurialのExtension
    • Mercurialには同梱されていません
  – Mercurialをsubversionクライアントとして使用




                                      2
こんな人におすすめ
• Mercurial中級者以上
 – マルチプルヘッド、rebase を理解していれば
   OK
• Subversionリポジトリをhg を使いたい
 – Mercurialに移行するためにはハードルが高い
 – Subversionのリポジトリのまま一人でも始めら
   れる
   • 少しずつhgを普及することも


                              3
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
hgsubversion インストール方法
適当な場所に clone する
$ hg clone http://bitbucket.org/durin42/hgsubversion/ ~/hgsubversion




~/.hgrc に追加する
[extensions]
hgsubversion = ~/hgsubversion/hgsubversion


お疲れ様でした


                                                                       5
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
hgsubversion テスト

tkondou@zion3:~/hgext/hgsubversion$ python tests/run.py
..............................................................................................................................
..............................................................................................................................
..............................................................................................................................
...................................................................................................................
----------------------------------------------------------------------
Ran 493 tests in 413.744s

OK
tkondou@zion3:~/hgext/hgsubversion$



                                                                                                                             7
リポジトリのclone方法
• SVNリポジトリをcloneしてみましょう
$ hg clone http://python-nose.googlecode.com/svn nose-hg




• なお、大きいリポジトリをcloneする場合
  は、hg init し [paths] を設定してから pull
  すると吉


                                                           8
TortoiseHg で歴史表示
• subversion の revision が表示できる
  – Converted From にチェック




                                 9
Converted Column




                   10
SVNに成果を反映




            11
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
よくあるケース:push できない
• 現象:SVNにpush時、エラーメッセージが出る


• 原因1
 – SVN側が更新されており、pullする必要がある状態で
   pullしていない
   • 対策: pull して rebase すればOK
• 原因2
 – SVNにコミット済みのチェンジセットを誤って
   strip(削除)してしまった
   • 対策: hg rebuildmeta し hg pull すればOK

                                          13
rebaseとは
• rebaseが必要
 – rebase とは指定したリビジョンの親リビジョ
   ンを差し替えること
     – マルチプルヘッドのマージした状態を解消する

• なぜ必要?
 – SVNの歴史を直線にする必要がある
   • マルチプルヘッドをマージした状態はpushできな
     い



                                14
削除したSVNコミット済みを復旧
• hg svn rebuildmetaを使って再度pullすれば
  OK。
 $ hg svn rebuildmeta
 $ hg pull
 $ hg update




                                    15
hgsubversion の制約・注意点




                       16
hgsubversion
                layoutと機能の関係

Subversionのレイアウ         svn:externals   途中Revからの
ト                                       clone
standard-layout         ○               ×
(trunk/branches/tags)                   未対応



single-layout           ×               ○
(trunk)                                 対応


                                               17
hgsubversion の制約
• × コミット時刻が変わる
 – コミットした時刻ではなく、push した時刻が
   コミットの時刻になる
    – push = svn commit であるため。


• × 日本語ファイル名使えない
 – 日本語ファイル名が含まれているとcloneでき
   ない。またhg側で日本語ファイル名を含めて
   pushするとSVN側が破壊される

                                 18
hgsubversion の制約
• × merge : 使えない
   • マルチプルヘッドやブランチをマージした状態を
     push できない
     – 対策:rebase を用い履歴を直線にする
• × tag : hg側でtag作成してpushしても反映
  されない
   • SVN側で作成すればOK
• × branch : hg側でbranch作成してpushして
  も反映されない
   • SVN側で作成すればOK

                                    19
svn-externals属性を扱う




                     20
svn-externals 属性も扱える
• .hgsvnexternals を作成
     • 定義は“半角スペース”から始まることに注意
 [lib]
  extlib http://svn.hoge.co.jp/svn/extlib


• 追加および更新
 $ hg add .hgsvnexternals

 $ hg svn updateexternals

                                            21
まとめ
• Mercurial初心者が、SVNからの移行で
  hgsubversionから導入することはおすすめ
  しません




                              22
ご清聴ありがとうございました
• hgsubversionは素晴らしいので、SVNを生
  で使うのはやめましょう
• 参考リンク
   • http://mercurial.selenic.com/wiki/HgSubversion
   • https://bitbucket.org/durin42/hgsubversion/overview




                                                           23

Más contenido relacionado

Similar a Hgsubversionについて

Mercurial shelveとmq
Mercurial shelveとmqMercurial shelveとmq
Mercurial shelveとmq
takeuchi-tk
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
Shota Umeda
 
GCをみればRTSが見えてくる、かも。。。
GCをみればRTSが見えてくる、かも。。。GCをみればRTSが見えてくる、かも。。。
GCをみればRTSが見えてくる、かも。。。
dec9ue
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
Takashi Takizawa
 

Similar a Hgsubversionについて (20)

Mercurial shelveとmq
Mercurial shelveとmqMercurial shelveとmq
Mercurial shelveとmq
 
EchoyaGinhanazeSu_inoka.pptx
EchoyaGinhanazeSu_inoka.pptxEchoyaGinhanazeSu_inoka.pptx
EchoyaGinhanazeSu_inoka.pptx
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
 
Git introduction2
Git introduction2Git introduction2
Git introduction2
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
 
GCをみればRTSが見えてくる、かも。。。
GCをみればRTSが見えてくる、かも。。。GCをみればRTSが見えてくる、かも。。。
GCをみればRTSが見えてくる、かも。。。
 
マジカルsvnとキュアgit
マジカルsvnとキュアgitマジカルsvnとキュアgit
マジカルsvnとキュアgit
 
KVM+cgroup
KVM+cgroupKVM+cgroup
KVM+cgroup
 
Git勉強会
Git勉強会Git勉強会
Git勉強会
 
はじめてのMercurial/Bitbucket その2
 はじめてのMercurial/Bitbucket その2 はじめてのMercurial/Bitbucket その2
はじめてのMercurial/Bitbucket その2
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Rookの基礎・バージョンアップ
Rookの基礎・バージョンアップRookの基礎・バージョンアップ
Rookの基礎・バージョンアップ
 
Wakame-vdc 開発苦労談
Wakame-vdc 開発苦労談Wakame-vdc 開発苦労談
Wakame-vdc 開発苦労談
 
kube-system落としてみました
kube-system落としてみましたkube-system落としてみました
kube-system落としてみました
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
 
130207 kyotorb
130207 kyotorb130207 kyotorb
130207 kyotorb
 
VCSクエスト
VCSクエストVCSクエスト
VCSクエスト
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacks
 

Último

Último (12)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

Hgsubversionについて

  • 1. hgsubversionについて TokyoMercurial#3 発表資料 2012/04/14 @cointoss1973 Takayuki KONDO
  • 2. hgsubversionとは • hgsubversionとは – MercurialのExtension • Mercurialには同梱されていません – Mercurialをsubversionクライアントとして使用 2
  • 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
  • 8. リポジトリのclone方法 • SVNリポジトリをcloneしてみましょう $ hg clone http://python-nose.googlecode.com/svn nose-hg • なお、大きいリポジトリをcloneする場合 は、hg init し [paths] を設定してから pull すると吉 8
  • 9. TortoiseHg で歴史表示 • subversion の revision が表示できる – Converted From にチェック 9
  • 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
  • 13. よくあるケース:push できない • 現象:SVNにpush時、エラーメッセージが出る • 原因1 – SVN側が更新されており、pullする必要がある状態で pullしていない • 対策: pull して rebase すればOK • 原因2 – SVNにコミット済みのチェンジセットを誤って strip(削除)してしまった • 対策: hg rebuildmeta し hg pull すればOK 13
  • 14. rebaseとは • rebaseが必要 – rebase とは指定したリビジョンの親リビジョ ンを差し替えること – マルチプルヘッドのマージした状態を解消する • なぜ必要? – SVNの歴史を直線にする必要がある • マルチプルヘッドをマージした状態はpushできな い 14
  • 15. 削除したSVNコミット済みを復旧 • hg svn rebuildmetaを使って再度pullすれば OK。 $ hg svn rebuildmeta $ hg pull $ hg update 15
  • 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
  • 21. svn-externals 属性も扱える • .hgsvnexternals を作成 • 定義は“半角スペース”から始まることに注意 [lib] extlib http://svn.hoge.co.jp/svn/extlib • 追加および更新 $ hg add .hgsvnexternals $ hg svn updateexternals 21
  • 22. まとめ • Mercurial初心者が、SVNからの移行で hgsubversionから導入することはおすすめ しません 22
  • 23. ご清聴ありがとうございました • hgsubversionは素晴らしいので、SVNを生 で使うのはやめましょう • 参考リンク • http://mercurial.selenic.com/wiki/HgSubversion • https://bitbucket.org/durin42/hgsubversion/overview 23