branchの一部の修正をdefaultへマージ

470 views
Skip to first unread message

Takaken

unread,
Mar 25, 2010, 10:36:00 AM3/25/10
to mercurial-ja
初めまして、たかけんと申します。

現在、Subversion を使用しており、Mercurial(TortoiseHg) に移行しようと検討しております。
そこで、疑問が出てきましたので、質問させていただきたいと思います。

1、
default で作成していたプロジェクトから、リリース用に Aというbranchを作成しました。
途中A専用の修正と、default にも取り込む必要のある修正を A上で行いました。
この default にも取り込む必要のある修正のみをAからdefault にマージすることは可能でしょうか?

たいていの運用では、branchの内容は、すべて default に取り込まれるのだと思いますが、
Subversion のマージのように、あるリビジョンのみをマージすることが可能すが、それを行いたいと考えております。

また、逆に default での修正の一部のみを branch に取り込むことは可能でしょうか?
TortoiseHg を使用しておりますが、あるdefault上のリビジョンを選択すると、ブランチした時点からの
変更点が、すべて反映されてしまいます。branchへも反映させる必要のあるバグのみ、マージをしたいと考えております。

2、
こちらは、挙動の確認となります。
リポジトリのクローンを作成した後、何度からローカルのリポジトリにコミットさせたものを、
クローン元にpush する際に、ローカルで編集した内容がすべて、push されてしまいます。
途中の恥ずかしい修正は、表に出さず、ローカルの最終版のみを、クローン元にpushする方法はあるのでしょうか?

素人そのものの質問で申し訳ございませんが、よろしくお願いいたします。

KOIE Hidetaka

unread,
Mar 25, 2010, 11:19:24 PM3/25/10
to mercur...@googlegroups.com
Message-Id: <729dd85d-ae99-4e96...@h4g2000pre.googleg..
Date: Thu, 25 Mar 2010 07:36:00 -0700 (PDT)
From: Takaken <tak...@gmail.com>
Subject: [mercurial-ja:440] branchの一部の修正をdefaultへマージ

| 1、
| default で作成していたプロジェクトから、リリース用に Aというbranchを作成しました。
| 途中A専用の修正と、default にも取り込む必要のある修正を A上で行いました。
| この default にも取り込む必要のある修正のみをAからdefault にマージすることは可能でしょうか?

たぶんTransplant extensionでできるとおもいます。つかったことはないです。
http://mercurial.selenic.com/wiki/TransplantExtension

| 2、
| こちらは、挙動の確認となります。
| リポジトリのクローンを作成した後、何度からローカルのリポジトリにコミットさせたものを、
| クローン元にpush する際に、ローカルで編集した内容がすべて、push されてしまいます。
| 途中の恥ずかしい修正は、表に出さず、ローカルの最終版のみを、クローン元にpushする方法はあるのでしょうか?

これはhg push --branch XXX でできます。

--
鯉江英隆 <hi...@koie.org>

フジワラ

unread,
Mar 26, 2010, 12:20:11 AM3/26/10
to mercurial-ja
フジワラです。

On 3月26日, 午後12:19, KOIE Hidetaka (鯉江英隆) <h...@koie.org> wrote:

> | 1、
> | default で作成していたプロジェクトから、リリース用に Aというbranchを作成しました。
> | 途中A専用の修正と、default にも取り込む必要のある修正を A上で行いました。
> | この default にも取り込む必要のある修正のみをAからdefault にマージすることは可能でしょうか?
>
> たぶんTransplant extensionでできるとおもいます。つかったことはないです。
> http://mercurial.selenic.com/wiki/TransplantExtension

障害修正のような用途の場合に、障害と修正が Trac や Redmine のような
ものできちんと管理されている状況であれば:

1. hg export で修正を取り出す
2. hg import で修正を取り込む

というメチャクチャ原始的な方法もアリですね(笑)。

受託開発のように、修正提供の決定権を持たないケースだと、
このような原始的な手法を取らざるを得ない場合も多々
あったりします .... orz

> | 2、
> | こちらは、挙動の確認となります。
> | リポジトリのクローンを作成した後、何度からローカルのリポジトリにコミットさせたものを、
> | クローン元にpush する際に、ローカルで編集した内容がすべて、push されてしまいます。
> | 途中の恥ずかしい修正は、表に出さず、ローカルの最終版のみを、クローン元にpushする方法はあるのでしょうか?
>
> これはhg push --branch XXX でできます。

たかけんさんの意図しているのは、こちらの方じゃないですかね?

"Concatenating multiple changesets into one"
http://mercurial.selenic.com/wiki/ConcatenatingChangesets?highlight=%28branch%29|%28revert%29

# 和題を付けるなら「複数チェンジセットの統合」といったところでしょうか?

wiki 上の図だと、リポジトリ間連携の図解が無いのでちょっとわかりづらい
かもしれませんが、要するに:

1. 作業領域を変更前のリビジョンに戻す@A
2. 作業領域を最終イメージで上書きする@A
3. 作業領域の状態を commit する=名無しブランチの新規作成@A
4. クローン元から、もう一つクローンする=B
5. AからBに、 3 で commit した変更だけを取り込む
6. B からクローン元に反映
7. A は破棄(しても良い)して、以後は B を使う

という感じですね。

wiki ページにもあるように、MQ を使って qfold した方が早いと言えば
早いのですが、TortoiseHG って最新版から対応したんでしたっけ? > MQ

Yuki KODAMA

unread,
Mar 26, 2010, 1:20:36 AM3/26/10
to mercur...@googlegroups.com
2010/3/26 フジワラ <flying...@gmail.com>:

最新の 1.0 ではログビューアとコミットダイアログで MQ パネルが使えます。
さらに複数選択が可能になったので、複数チェンジセットをいっぺんに
qfold するのも簡単になりました。

それと Transplant も拡張機能を有効にしておくと TortoiseHg で実行可能です。

--
Yuki KODAMA

Takaken

unread,
Mar 31, 2010, 11:50:21 AM3/31/10
to mercurial-ja
鯉江様、フジワラ様、KODAMA様

ご返答いただきありがとうございます。
理解ができて、うまくいってから返答させていただこうと思っていましたが、
未だMQやTransplant など、まだ mercurial の単語と挙動のイメージができておらず、
うまくいっておりません。

もう一度、ドキュメントなどを確認し、自分のやりたいことが実現できるよう、調査していこうと思います。

返答が遅れまして、申し訳ございませんでした。
なんとか mercurial を使いこなせるよう精進いたします。

フジワラ

unread,
Apr 1, 2010, 1:21:49 AM4/1/10
to mercurial-ja
たかけんさん:

フジワラです。

MQ などは、私も色々試行錯誤するまではいまひとつピンと来ない
状況でしたから、気長に試しながら進めるのが良いと思います。

また何か不明点が出てきましたら、どんどんMLに投げてください。

Reply all
Reply to author
Forward
0 new messages