SlideShare uma empresa 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

Mais conteúdo relacionado

Semelhante a Hgsubversionについて

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

Semelhante 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

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介: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...Toru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: 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 Gamesatsushi061452
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
論文紹介: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 UnderstandingToru Tamaki
 

Último (11)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: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...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/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
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
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の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介: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