SSブログ

[Mercurial] MQによるパッチ作成からコミットまでの流れ [プログラミング]

ちょー久々にプログラミングネタ

複数人で作業していたりするときに、コミットではなくパッチ管理をしているが、他の人のパッチが自分のパッチに混入してくるとえらい手間になる。

で、Mercurialにはパッチ管理としてMQというものがあって、昔は拡張機能だったが今は標準搭載でしかも使いかってが最高なのでまとめ。

hg qnew [-f] [patch name]

qnewで今の作業予定をいれる。ここで、もし先に作業をしてしまった場合は-fを付けて強制的に新しいパッチを作成できる。個人的には-fはいらんかなと思う。

hg qrefresh

変更をパッチに反映させる。

hg qseriesでパッチの存在を確認する。
hg logでパッチがコミットのように見える。

hg qpush [-a]
hg qpop [-a]
パッチを1個(-aで全部)適用する/解除する
hg pull後にコンフリクトが発生する場合、これで1つずつ確認しながらやれるので該当パッチだけ修正すればよい。
というか、pullする前にqpop -aはデフォ。忘れるとめんどくさい。

ここで修正パッチを修正すれば適用されるようになるらしいのだが、いまいちどうやっていいかわからない。今は.hg/patches/[patch name] のファイルを直接編集しちゃってる。正しいやりかた誰かおせーて。

hg pullして誰も変更していないようだったら(余計なブランチも発生しないので)ローカルにコミットする。

hg qrefresh -e

hg qpush/qpopでパッチを移動しながらqrefresh -eでコミットメッセージを編集する。ちょっと前はこれの存在を知らなかったのでメッセージが勝手に変えられていまいちと思っていたが、これのおかげで最高のツールになった。

hg qfinish [-a]
キューを(全部)コミットに変更する。パッチで一時的にコミット化しておいて、コミットしていいタイミングでコミットしてプッシュする。複数人で作業する上で非常に助かるMercurial。プログラム以外でもテキスト管理するうえで非常に便利なので万人におすすめしたい。

※注意点
Mercurialの古いバージョンではMQがリモートにプッシュされてしまうバグがあったが、今はパッチがあたった状態でプッシュしようとするとやめてくれる。拡張機能を使うときはバージョンは豆にチェック。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

GoogleIMEオランダvsスペイン ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。