4

注: ここで説明するシナリオは、Stack Overflow: Completely manual Mercurial mergeでは回答されていません。

私の質問を例で説明します。を設計するために Mercurial リポジトリを開始するとします。

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

私はかなり長い間 Car の設計に取り組んでおり、リポジトリは次のようになっています。

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. マージ後、defaultSolarCarBranchの両方で作業を続行できるはずです。
  2. SolarCarBranchCar.cpp内およびCar.h内に、defaultに取り込みたい燃料効率の修正がある可能性がありますが、それらのファイルのすべての変更は必要ありません。したがって、マージ中にデフォルトに含めたい変更をチェリーピックしたいと思います(手動マージとも呼ばれます)。
  3. デフォルトでは表示されたくありませ。世界はまだソーラーカーの準備ができていないかもしれません。;-)Solar.cppSolar.h

私が学んだこと:

  1. これはhg merge SolarCarBranch
  2. これはkdiff3.premerge=FalseMercurial.ini
  3. 許可を求めずにpremerge=Falseマージ/コピーSolar.cppSolar.hデフォルトにするため、これを達成する方法がわかりません。
4

2 に答える 2

5

あなたは本当に近くにいるので、一般的に移植やチェリーピッキングに頼る必要はありません. 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 がファイルを solar ブランチに追加することがわかります。これは、デフォルトでは不要なファイルです。変更セット 3 は、メインの afile にも存在するファイルを微調整しますが、その変更が発生するかどうかを手動で制御したいと考えています。

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

% hg stat
M afile
M solar-only

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

% hg rm -f solar-only

hg stat削除されたものとして表示されます。

% hg stat
M afile
R solar-only

コミットすると、必要なものが新しい変更セットに含まれます。

于 2010-03-10T17:24:41.270 に答える
2

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

Transplant 拡張機能を使用して、変更セットを選択してマージすることができます。これにより、特定の変更セットのみを選択してデフォルトにマージできます。

3 番目の条件は、同じコミットで通常の車と太陽光発電の車の両方への変更を混在させない限り、変更セットをソーラー ブランチから免責で引き戻すことができ、心配する必要がないという考えによって満たされます。あなたの車のタイプを混合します。

マージ構成ドキュメントinternalのオプション フラグも参照することをお勧めします。

于 2010-03-10T06:54:25.173 に答える