狠狠撸

狠狠撸Share a Scribd company logo
惭别谤肠耻谤颈补濒厂丑别濒惫别と惭蚕


                     2012/11/21
                      竹内孝志

                           1
アジェンダ
▌現状の開発
   ?現在のブランチ管理
   ?抱えている問題点

▌MQ
   ?MQとは
   ?使い方(コマンドラインから)
   ?使い方(TortoiseHGから)
   ?小技

▌MercurialSelve
   ?MercurialSelveとは
   ?使い方


                        2
现在のブランチ管理(1)

               develop

               default
               hotfix

               develop

               develop

ブランチが多い
                  3
现在のブランチ管理(2)

               develop

               default
               hotfix

               develop

               develop

マージ作業が多発
                  4
現在抱えている問題
▌リリースブランチがなく開発が開始できない
 ?同時に存在するブランチを極力少なくしたいため、
  現在のブランチのリリースが完了するまで次のブランチを切らない。


▌マージ作業が多い
 ?エンハンスTと改善Tと別れてから同時に存在するリリースブランチが増え
  た。
  以前に比べ、リリース後のdefaultからのマージ、開発ブランチ同士のマージ
  作業が 増加した。

▌マルチプルヘッドが発生しやすくなった
 ?開発者の人数が増えて同タイミングでpushする確率が増えた。




                                           5
解決するには
マージ作業を減らしたい。
→同時に存在するリリースブランチを減らした
 い。
→開発ブランチがなくても開発したい。
→MQやShelve を使用する。

※MQやShelveはマルチプルヘッドを解消するときにも役に立つ。



                                    6
MQとは
MQ は Mercurial に実装されている拡張機能で
  す。
利用する際は明示的に有効化の設定をする
必要があります。
(ダウンロードの必要はありませ ん。 MQ は
  通常の
 Mercurial の配布物に含まれています)。


                               7
MQの有効化
設定ファイルに次の記述を行うのみ
hgrc(設定ファイル)
[paths]
default = ssh://hg@bitbucket~

[ui]
                                Mq有効化の設定を記述する。
username = nekoneko

[extensions]
mq =


                                            8
基本コマンド
▌qnew
   ?MQのオプションを確認する。
▌qimport (-r XXXX)
   ?変更(リビジョンXXXX)をMQに入れる(パッチ化する)。
▌qseries
   ?MQに格納されているパッチを表示する。
▌qpop (-a)
   ?パッチの適応を1つ解除。 (-aで全て)
▌qpush (-a)
   ?パッチの1つ適応する。 (-aで全て)
▌qfinish (-a)
   ?MQに入れたものを元に戻す。

                                    9
使い方(コマンドライン)
▌コマンドラインを使って次のことを行う
 ?ブランチがない状態で開発。
 ?マルチプルヘッドの解消。




                      10
コマンドライン


  ブランチがない状態での開発手順
①コードを修正する。
②コミットする(適当なブランチ)。
③MQにインポート(パッチ化)。
④パッチ適用解除。
⑤作成されたリリースブランチを取り込む。
⑥ブランチに移動する。
⑦パッチの適用。
⑧通常リビジョン化。




default                    11
コマンドライン


   MQにインポート(パッチ化)
③MQにインポート
  直前にコミットした変更がMQにインポートされます。
  tipはリビジョン番号でもOK

 $ hg import -r tip




 default                      12
コマンドライン


   パッチの適用解除
④パッチの適用解除
  パッチを一つ解除する。
 ローカルのソースへの変更がなくなります。

 $ hg pop




 default                    13
コマンドライン


   パッチの適用
⑦パッチの適用
  直前に解除したパッチが一つ適応されます。
  ローカルのソースは変更されます。

 $ hg push




develop/2012XXXX             14
コマンドライン


   通常リビジョン化
⑧通常リビジョン化
  適応されているパッチが全てリビジョンとなります。


 $ hg qfinish -a




develop/2012XXXX             15
コマンドライン


      ブランチがない状態での開発手順
★コマンドのまとめ
                                  #①コードを修正する
$ hg commit –m ‘commit message’   #②コミットする
$ hg qimport –r tip               #③MQにインポート
$ hg qpop –r                      #④パッチ適用解除
$ hg pull -u                      #⑤ブランチを取り込
$ hg up develop/2012XXXX          む
$ hg qpush                        #⑥ブランチに移動す
$ hg qfinish –a                   る
                                  #⑦パッチの適用
                                  #⑧通常リビジョン化
                                           16
コマンドライン


  マルチプルヘッド解消手順
①MQにインポート(パッチ化)。
②パッチの適用解除。
③ブランチの移動(pullしてきたブランチに移動)。
④パッチの適用。
⑤通常リビジョン化。

            develop/2012XXXX



            develop/2012XXXX

                                   17
マルチプルヘッド解消手順
★コマンドのまとめ
$ hg qimport –r tip        #①MQにインポート
$ hg qpop –r               #②パッチの適用解除
$ hg up develop/2012XXXX   #③ブランチの移動
$ hg qpush                 #④パッチの適用
$ hg qfinish –a            #⑤通常リビジョン化




                                    18
使い方(TortoiseHg)
▌コマンドラインを使って次のことを行う
 ?ブランチがない状態で開発。
 ?マルチプルヘッドの解消。




                      19
TortoiseHG


  ブランチがない状態での開発手順
①コードを修正する。
②変更をパッチ化する。
③パッチ適応解除。
④作成されたリリースブランチを取り込む。
⑤ブランチに移動する。
⑥パッチの適応。
⑦通常リビジョン化。




default                       20
TortoiseHG


   変更をパッチ化する
②変更をパッチ化する
           a.右クリックしてメニューを選び『Hg Commit』を選択する。
           b.コミットの▼をクリックしてメニューを開きパッチを作成に変
           更する。
           c.『パッチを作成』のボタンをクリックする。




 default                                    21
TortoiseHG


   パッチの適用解除
③パッチの適用解除
              a.パッチ化したリビ
              ジョンを右クリックし
              てメニューを開く 。

              b.『履歴を修正』を選
              択。

              c.『パッチを適用解
              除』を選択。




 default                    22
TortoiseHG


   パッチの適用
⑦パッチの適応
                   a.パッチ化したリビ
                   ジョンを右クリックし
                   てメニューを開く 。

                   b.『パッチを適用』を
                   選択。




develop/2012XXXX                 23
TortoiseHG


   通常リビジョン化
⑧通常リビジョン化
                   a.パッチ化したリビ
                   ジョンを右クリックし
                   てメニューを開く 。

                   b.『履歴を修正』を選
                   択。

                   c.『パッチを通常リビ
                   ジョン化』を選択。




develop/2012XXXX                 24
TortoiseHG


  マルチプルヘッド解消手順
①MQにインポート(パッチ化)。
②パッチの適用解除。
③ブランチの移動(pullしてきたブランチに移動)。
④パッチの適用。
⑤通常リビジョン化。

            develop/2012XXXX



            develop/2012XXXX

                                      25
TortoiseHG


   MQへのインポート
①MQへのインポート
             a.パッチ化したいリビ
             ジョンを右クリックし
             てメニューを開く 。

             b.『履歴を修正』を選
             択。

             c.『MQへインポー
             ト』を選択。




 default                    26
小技の紹介
▌MQを使ったリビジョンの統合

▌TortoiseHGを使ったリビジョンの入れ替
 え




                       27
リビジョンの統合
★コマンドのまとめ
$ hg qimport –r 10001::10002::10003   #①MQにインポート
$ hg qpop -a                          #②パッチ適用解除
$ hg qfold 10001.diff                 #③パッチの統合
$ hg qrefresh                         #④変更を確定
$ hg qfinish -a                       #⑤パッチ適用




    10001         10002         10003          28
リビジョンの入れ替え

                ①入れ替えたいリビジョンをパッチ化
                する。
                ②パッチ適用を解除する。
                ③ドラック&ドロップで順番を入れ替
                える。
                ④パッチを適用する。
                ⑤通常リビジョン化する。




10001   10002    10002   10001   29
MercurialShelveとは
ShelveもMercurialの拡張機能。
ShelveはMQと違い標準拡張機能ではなくので
ソース類をダウンロードして配置する必要ある。
ただし、TortoiseHGをインストールすれば
GUIで仕様することが可能。




                      30
使い方

      ①Hg Workbenchを開く
      ②メニューから『リポジトリ』を選択
      ③『シェルフ』をクリックする。




                    31
変更の退避
        退避したいファイル
        を選択して右向きの
        矢印をクリック。




               32
退避した変更を戻す
        戻したいファイルを
        選択して左向きの矢
        印をクリック。




               33
退避する领域を选択可能
        ▼をクリックすると
        退避する領域を選択
        することが可能。




               34
まとめ
▌現在マージ作業の手間を省くためにリリース
 ブランチの作成を遅延させている。

▌リリースブランチがない場合でもMQやShelve
 を使えば開発しやすい。




                        35
ご清聴ありがとうございまし
た




                36

More Related Content

Mercurial shelveとmq