mercurial shelveとmq

36
1 MercurialShelve と MQ 2012/11/21 とととと

Upload: takeuchi-tk

Post on 27-Jun-2015

1.667 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mercurial shelveとmq

1

MercurialShelve と MQ

2012/11/21竹内孝志

Page 2: Mercurial shelveとmq

2

アジェンダ▌現状の開発

►現在のブランチ管理►抱えている問題点

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

▌MercurialSelve►MercurialSelve とは►使い方

Page 3: Mercurial shelveとmq

3

現在のブランチ管理 (1)

develop

develop

develop

default

hotfix

ブランチが多い

Page 4: Mercurial shelveとmq

4

現在のブランチ管理 (2)

develop

develop

develop

default

hotfix

マージ作業が多発

Page 5: Mercurial shelveとmq

5

現在抱えている問題▌リリースブランチがなく開発が開始できない

►同時に存在するブランチを極力少なくしたいため、  現在のブランチのリリースが完了するまで次のブランチを切らない。

▌マージ作業が多い►エンハンスTと改善Tと別れてから同時に存在するリリースブランチが増え

た。  以前に比べ、リリース後の default からのマージ、開発ブランチ同士のマー

ジ作業が 増加した。

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

Page 6: Mercurial shelveとmq

6

解決するには

マージ作業を減らしたい。→ 同時に存在するリリースブランチを減らし

たい。→ 開発ブランチがなくても開発したい。→ MQや Shelve を使用する。

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

Page 7: Mercurial shelveとmq

7

MQ とは

MQ は Mercurial に実装されている拡張機能です。

利用する際は明示的に有効化の設定をする必要があります。(ダウンロードの必要はありませ ん。 MQ は

通常の Mercurial の配布物に含まれています)。

Page 8: Mercurial shelveとmq

8

MQ の有効化

設定ファイルに次の記述を行うのみ

[paths]default = ssh://hg@bitbucket ~

[ui]username = nekoneko

[extensions]mq =

hgrc( 設定ファイル )

Mq 有効化の設定を記述する。

Page 9: Mercurial shelveとmq

9

基本コマンド▌qnew

►MQ のオプションを確認する。▌qimport   (-r XXXX)

►変更 ( リビジョン XXXX) を MQ に入れる ( パッチ化する ) 。

▌qseries►MQ に格納されているパッチを表示する。

▌qpop   (-a)►パッチの適応を1つ解除。 (-a で全て )

▌qpush   (-a)►パッチの1つ適応する。 (-a で全て )

▌qfinish   (-a)►MQ に入れたものを元に戻す。

Page 10: Mercurial shelveとmq

10

使い方 ( コマンドライン )

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

Page 11: Mercurial shelveとmq

11

ブランチがない状態での開発手順

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

default

コマンドライン

Page 12: Mercurial shelveとmq

12

MQ にインポート ( パッチ化 )

$ hg import -r tip

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

default

コマンドライン

Page 13: Mercurial shelveとmq

13

パッチの適用解除

$ hg pop

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

default

コマンドライン

Page 14: Mercurial shelveとmq

14

パッチの適用

$ hg push

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

develop/2012XXXX

コマンドライン

Page 15: Mercurial shelveとmq

15

通常リビジョン化

$ hg qfinish -a

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

develop/2012XXXX

コマンドライン

Page 16: Mercurial shelveとmq

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にインポート#④ パッチ適用解除#⑤ ブランチを取り込む#⑥ ブランチに移動する#⑦ パッチの適用#⑧ 通常リビジョン化

コマンドライン

Page 17: Mercurial shelveとmq

17

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

④ パッチの適用。⑤ 通常リビジョン化。

develop/2012XXXX

develop/2012XXXX

コマンドライン

Page 18: Mercurial shelveとmq

18

マルチプルヘッド解消手順

$ hg qimport –r tip$ hg qpop –r$ hg up develop/2012XXXX$ hg qpush$ hg qfinish –a

★ コマンドのまとめ

#① MQにインポート#② パッチの適用解除#③ ブランチの移動#④ パッチの適用#⑤ 通常リビジョン化

Page 19: Mercurial shelveとmq

19

使い方 (TortoiseHg)

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

Page 20: Mercurial shelveとmq

20

ブランチがない状態での開発手順

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

default

TortoiseHG

Page 21: Mercurial shelveとmq

21

変更をパッチ化する② 変更をパッチ化する

default

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

TortoiseHG

Page 22: Mercurial shelveとmq

22

パッチの適用解除③ パッチの適用解除

default

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

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

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

TortoiseHG

Page 23: Mercurial shelveとmq

23

パッチの適用⑦ パッチの適応

develop/2012XXXX

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

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

TortoiseHG

Page 24: Mercurial shelveとmq

24

通常リビジョン化⑧ 通常リビジョン化

develop/2012XXXX

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

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

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

TortoiseHG

Page 25: Mercurial shelveとmq

25

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

④ パッチの適用。⑤ 通常リビジョン化。

develop/2012XXXX

develop/2012XXXX

TortoiseHG

Page 26: Mercurial shelveとmq

26

MQへのインポート①MQ へのインポート

default

TortoiseHG

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

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

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

Page 27: Mercurial shelveとmq

27

小技の紹介

▌MQ を使ったリビジョンの統合

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

Page 28: Mercurial shelveとmq

28

リビジョンの統合

$ hg qimport –r 10001::10002::10003$ hg qpop -a$ hg qfold 10001.diff$ hg qrefresh$ hg qfinish -a

★ コマンドのまとめ

#① MQにインポート#② パッチ適用解除#③ パッチの統合#④ 変更を確定#⑤ パッチ適用

10001 10002 10003

Page 29: Mercurial shelveとmq

29

リビジョンの入れ替え

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

10001 10002 10002 10001

Page 30: Mercurial shelveとmq

30

MercurialShelve とは

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

Page 31: Mercurial shelveとmq

31

使い方

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

Page 32: Mercurial shelveとmq

32

変更の退避

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

Page 33: Mercurial shelveとmq

33

退避した変更を戻す

戻したいファイルを選択して左向きの矢印をクリック。

Page 34: Mercurial shelveとmq

34

退避する領域を選択可能

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

Page 35: Mercurial shelveとmq

35

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

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

Page 36: Mercurial shelveとmq

36

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