現在、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する方法はあるのでしょうか?
素人そのものの質問で申し訳ございませんが、よろしくお願いいたします。
| 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>
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
最新の 1.0 ではログビューアとコミットダイアログで MQ パネルが使えます。
さらに複数選択が可能になったので、複数チェンジセットをいっぺんに
qfold するのも簡単になりました。
それと Transplant も拡張機能を有効にしておくと TortoiseHg で実行可能です。
--
Yuki KODAMA
ご返答いただきありがとうございます。
理解ができて、うまくいってから返答させていただこうと思っていましたが、
未だMQやTransplant など、まだ mercurial の単語と挙動のイメージができておらず、
うまくいっておりません。
もう一度、ドキュメントなどを確認し、自分のやりたいことが実現できるよう、調査していこうと思います。
返答が遅れまして、申し訳ございませんでした。
なんとか mercurial を使いこなせるよう精進いたします。
フジワラです。
MQ などは、私も色々試行錯誤するまではいまひとつピンと来ない
状況でしたから、気長に試しながら進めるのが良いと思います。
また何か不明点が出てきましたら、どんどんMLに投げてください。