質問

注:ここで説明するシナリオは、 スタックオーバーフロー:完全に手動の水銀マージ.

例で私の質問を説明します。私がマーキュリアルリポジトリから始めて設計すると仮定します :

C:\Car$ dir
Car.cpp
Car.h

私はしばらくの間、車のデザインに取り組んでいますが、リポジトリは次のように見えます。

r0-r1-...-r100-(default)

ある時点で、私は支部します デフォルトsolarcarbranch 太陽光発電車で並行して作業するには:

C:\SolarCar$ dir
Car.cpp
Car.h
Solar.cpp
Solar.h

もう少し時間を過ごした後、リポジトリは次のようになります。

r0-r1-...-r100-...-r200-(default)
            \--r101-...-r201-(SolarCarBranch)

マージするにはどうすればよいですか solarcarbranch 戻る デフォルト?

私が望むマージの次の合併症に注意してください:

  1. 私は両方の作業を続けることができるはずです デフォルトsolarcarbranch マージの後。
  2. 燃料効率の修正があるかもしれません Car.cppCar.hsolarcarbranch 私が引き込んでみたいと デフォルト, しかし、私はそれらのファイルのすべての変更を望んでいません。だから、私は私が含めたい変更を選びたい デフォルト マージ中(別名マニュアルマージ)。
  3. そうです いいえ 欲しいです Solar.cppSolar.h に表示されます デフォルト. 。世界はまだ太陽光発電車の準備ができていないかもしれません。 ;-)

私が学んだこと:

  1. これはaによって可能です hg merge SolarCarBranch
  2. これは、設定によって実現できます kdiff3.premerge=FalseMercurial.ini
  3. それ以来、これを達成する方法がわかりません premerge=False それでもマージ/コピー Solar.cppSolar.h の中へ デフォルト 許可を求めることなく。
役に立ちましたか?

解決

あなたは本当に近く、移植(Yuck)やチェリーピッキングに頼る必要はありません。 Premergeをオフにすることが最初のステップです。その後、マージした後、コミットする前にメインブランチで不要なファイルを削除するだけです。あなたはそれを一度だけする必要があります。

これがセットアップです:

o  changeset:   3:343d531512a3
|  branch:      solar
|  tag:         tip
|  parent:      1:cb26642f8db5
|  user:        Ry4an Brase <ry4an@msi.umn.edu>
|  date:        Wed Mar 10 11:16:48 2010 -0600
|  files:       afile
|  description:
|  solar-change
|
|
| @  changeset:   2:c5d14e34db07
| |  parent:      0:56465175b2fc
| |  user:        Ry4an Brase <ry4an@msi.umn.edu>
| |  date:        Wed Mar 10 11:05:44 2010 -0600
| |  files:       other-main-file
| |  description:
| |  moremain
| |
| |
o |  changeset:   1:cb26642f8db5
|/   branch:      solar
|    user:        Ry4an Brase <ry4an@msi.umn.edu>
|    date:        Wed Mar 10 11:04:32 2010 -0600
|    files:       solar-only
|    description:
|    solar-initial
|
|
o  changeset:   0:56465175b2fc
   user:        Ry4an Brase <ry4an@msi.umn.edu>
   date:        Wed Mar 10 11:04:14 2010 -0600
   files:       afile
   description:
   initial

Changeset 1がソーラーブランチにファイルを追加することを確認できます。これは、デフォルトで望まないファイルです。 Changeset 3は、メイン、距離にも存在するファイルを調整しますが、その変更が発生するかどうかを手動で制御したいと考えています。

そうする hg update default ; hg merge -r solar. 。マージツールがポップアップします afile そして、これらの変更が必要な場合、ラインごとまたはチャンクごとに決定します。保存後、します hg stat:

% hg stat
M afile
M solar-only

そして、ソーラーのみがデフォルトでコミットするためにキューに留められていることがわかります。 削除するだけです (と if).

% hg rm -f solar-only

hg stat 削除されているようにそれを示します:

% hg stat
M afile
R solar-only

そして、私たちがコミットするとき、私たちは新しい変更セットで私たちが望むものを持っています。

他のヒント

あなたの最初の条件は、両方のブランチで作業を継続できるようにするために、単に枝を閉じないことで満足しています(あなたは --close-branch のオプション hg commit).

Cherry Pick Changesetsを使用して使用してマージできます 移植延長. 。これにより、デフォルトにマージする特定の変更セットのみを選択できます。

3番目の条件は、同じコミットで通常の車と太陽光発電車の両方の変更を混ぜ合わせなかった場合に、太陽電池から変化を免責して引き戻すことができ、心配する必要がないという考えによって満たされます。車の種類を混ぜます。

あなたはを見たいかもしれません internal のオプションフラグ 構成ドキュメントをマージします それも。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top