1
MercurialShelve と MQ
2012/11/21竹内孝志
2
アジェンダ▌現状の開発
►現在のブランチ管理►抱えている問題点
▌MQ►MQ とは►使い方 ( コマンドラインから )►使い方 (TortoiseHG から )►小技
▌MercurialSelve►MercurialSelve とは►使い方
3
現在のブランチ管理 (1)
develop
develop
develop
default
hotfix
ブランチが多い
4
現在のブランチ管理 (2)
develop
develop
develop
default
hotfix
マージ作業が多発
5
現在抱えている問題▌リリースブランチがなく開発が開始できない
►同時に存在するブランチを極力少なくしたいため、 現在のブランチのリリースが完了するまで次のブランチを切らない。
▌マージ作業が多い►エンハンスTと改善Tと別れてから同時に存在するリリースブランチが増え
た。 以前に比べ、リリース後の default からのマージ、開発ブランチ同士のマー
ジ作業が 増加した。
▌マルチプルヘッドが発生しやすくなった►開発者の人数が増えて同タイミングで push する確率が増えた。
6
解決するには
マージ作業を減らしたい。→ 同時に存在するリリースブランチを減らし
たい。→ 開発ブランチがなくても開発したい。→ MQや Shelve を使用する。
※MQ や Shelve はマルチプルヘッドを解消するときにも役に立つ。
7
MQ とは
MQ は Mercurial に実装されている拡張機能です。
利用する際は明示的に有効化の設定をする必要があります。(ダウンロードの必要はありませ ん。 MQ は
通常の Mercurial の配布物に含まれています)。
8
MQ の有効化
設定ファイルに次の記述を行うのみ
[paths]default = ssh://hg@bitbucket ~
[ui]username = nekoneko
[extensions]mq =
hgrc( 設定ファイル )
Mq 有効化の設定を記述する。
9
基本コマンド▌qnew
►MQ のオプションを確認する。▌qimport (-r XXXX)
►変更 ( リビジョン XXXX) を MQ に入れる ( パッチ化する ) 。
▌qseries►MQ に格納されているパッチを表示する。
▌qpop (-a)►パッチの適応を1つ解除。 (-a で全て )
▌qpush (-a)►パッチの1つ適応する。 (-a で全て )
▌qfinish (-a)►MQ に入れたものを元に戻す。
10
使い方 ( コマンドライン )
▌コマンドラインを使って次のことを行う►ブランチがない状態で開発。►マルチプルヘッドの解消。
11
ブランチがない状態での開発手順
① コードを修正する。② コミットする (適当なブランチ )。③ MQにインポート (パッチ化 )。④ パッチ適用解除。⑤ 作成されたリリースブランチを取り込む。⑥ ブランチに移動する。⑦ パッチの適用。⑧ 通常リビジョン化。
default
コマンドライン
12
MQ にインポート ( パッチ化 )
$ hg import -r tip
③ MQにインポート 直前にコミットした変更がMQにインポートされます。 tip はリビジョン番号でもOK
default
コマンドライン
13
パッチの適用解除
$ hg pop
④ パッチの適用解除 パッチを一つ解除する。 ローカルのソースへの変更がなくなります。
default
コマンドライン
14
パッチの適用
$ hg push
⑦ パッチの適用 直前に解除したパッチが一つ適応されます。 ローカルのソースは変更されます。
develop/2012XXXX
コマンドライン
15
通常リビジョン化
$ hg qfinish -a
⑧ 通常リビジョン化 適応されているパッチが全てリビジョンとなります。
develop/2012XXXX
コマンドライン
16
ブランチがない状態での開発手順
$ hg commit –m ‘commit message’ $ hg qimport –r tip$ hg qpop –r$ hg pull -u$ hg up develop/2012XXXX$ hg qpush$ hg qfinish –a
★ コマンドのまとめ
#① コードを修正する#② コミットする#③ MQにインポート#④ パッチ適用解除#⑤ ブランチを取り込む#⑥ ブランチに移動する#⑦ パッチの適用#⑧ 通常リビジョン化
コマンドライン
17
マルチプルヘッド解消手順① MQにインポート (パッチ化 )。② パッチの適用解除。③ ブランチの移動 (pullしてきたブランチに移動 )。
④ パッチの適用。⑤ 通常リビジョン化。
develop/2012XXXX
develop/2012XXXX
コマンドライン
18
マルチプルヘッド解消手順
$ hg qimport –r tip$ hg qpop –r$ hg up develop/2012XXXX$ hg qpush$ hg qfinish –a
★ コマンドのまとめ
#① MQにインポート#② パッチの適用解除#③ ブランチの移動#④ パッチの適用#⑤ 通常リビジョン化
19
使い方 (TortoiseHg)
▌コマンドラインを使って次のことを行う►ブランチがない状態で開発。►マルチプルヘッドの解消。
20
ブランチがない状態での開発手順
① コードを修正する。② 変更をパッチ化する。③ パッチ適応解除。④ 作成されたリリースブランチを取り込む。⑤ ブランチに移動する。⑥ パッチの適応。⑦ 通常リビジョン化。
default
TortoiseHG
21
変更をパッチ化する② 変更をパッチ化する
default
a. 右クリックしてメニューを選び『 Hg Commit 』を選択する。b. コミットの▼をクリックしてメニューを開きパッチを作成に変更する。c. 『パッチを作成』のボタンをクリックする。
TortoiseHG
22
パッチの適用解除③ パッチの適用解除
default
a. パッチ化したリビジョンを右クリックしてメニューを開く 。
b. 『履歴を修正』を選択。
c. 『パッチを適用解除』を選択。
TortoiseHG
23
パッチの適用⑦ パッチの適応
develop/2012XXXX
a. パッチ化したリビジョンを右クリックしてメニューを開く 。
b. 『パッチを適用』を選択。
TortoiseHG
24
通常リビジョン化⑧ 通常リビジョン化
develop/2012XXXX
a. パッチ化したリビジョンを右クリックしてメニューを開く 。
b. 『履歴を修正』を選択。
c. 『パッチを通常リビジョン化』を選択。
TortoiseHG
25
マルチプルヘッド解消手順① MQにインポート (パッチ化 )。② パッチの適用解除。③ ブランチの移動 (pullしてきたブランチに移動 )。
④ パッチの適用。⑤ 通常リビジョン化。
develop/2012XXXX
develop/2012XXXX
TortoiseHG
26
MQへのインポート①MQ へのインポート
default
TortoiseHG
a. パッチ化したいリビジョンを右クリックしてメニューを開く 。
b. 『履歴を修正』を選択。
c. 『 MQ へインポート』を選択。
27
小技の紹介
▌MQ を使ったリビジョンの統合
▌TortoiseHG を使ったリビジョンの入れ替え
28
リビジョンの統合
$ hg qimport –r 10001::10002::10003$ hg qpop -a$ hg qfold 10001.diff$ hg qrefresh$ hg qfinish -a
★ コマンドのまとめ
#① MQにインポート#② パッチ適用解除#③ パッチの統合#④ 変更を確定#⑤ パッチ適用
10001 10002 10003
29
リビジョンの入れ替え
① 入れ替えたいリビジョンをパッチ化する。② パッチ適用を解除する。③ ドラック&ドロップで順番を入れ替える。④ パッチを適用する。⑤ 通常リビジョン化する。
10001 10002 10002 10001
30
MercurialShelve とは
Shelve も Mercurial の拡張機能。Shelve は MQ と違い標準拡張機能ではなくのでソース類をダウンロードして配置する必要ある。ただし、 TortoiseHG をインストールすればGUI で仕様することが可能。
31
使い方
①Hg Workbench を開く② メニューから『リポジトリ』を選択③ 『シェルフ』をクリックする。
32
変更の退避
退避したいファイルを選択して右向きの矢印をクリック。
33
退避した変更を戻す
戻したいファイルを選択して左向きの矢印をクリック。
34
退避する領域を選択可能
▼ をクリックすると退避する領域を選択することが可能。
35
まとめ▌現在マージ作業の手間を省くためにリリースブランチの作成を遅延させている。
▌リリースブランチがない場合でも MQ やShelve を使えば開発しやすい。
36
ご清聴ありがとうございました