Mercurial:如何合并手动控制变更和文件?

Ash*_*ppa 4 merge mercurial manual

注意:我在这里描述的场景在Stack Overflow中没有得到解答:完全手动的Mercurial合并.

我将用一个例子解释我的查询.假设我开始使用Mercurial存储库来设计汽车:

C:\Car$ dir
Car.cpp
Car.h
Run Code Online (Sandbox Code Playgroud)

我在Car的设计上工作了很长一段时间,存储库看起来像:

r0-r1-...-r100-(default)
Run Code Online (Sandbox Code Playgroud)

在某些时候,我将分支默认SolarCarBranch并行处理太阳能汽车:

C:\SolarCar$ dir
Car.cpp
Car.h
Solar.cpp
Solar.h
Run Code Online (Sandbox Code Playgroud)

经过一段时间后,存储库看起来像:

r0-r1-...-r100-...-r200-(default)
            \--r101-...-r201-(SolarCarBranch)
Run Code Online (Sandbox Code Playgroud)

如何将SolarCarBranch合并回默认值

请注意我想要的合并中的以下复杂情况:

  1. 我应该能够在合并后继续使用defaultSolarCarBranch.
  2. 有可能是燃油效率修复了Car.cppCar.hSolarCarBranch,我想拉成默认的,但我不希望这些文件中所有的变化.所以,我想在合并期间选择我希望包含在默认值中的更改(也称为手动合并).
  3. 希望Solar.cppSolar.h出现在默认情况下.世界可能还没有为太阳能汽车做好准备.;-)

我学到:

  1. 这是可能的 hg merge SolarCarBranch
  2. 这可以通过设置来实现kdiff3.premerge=FalseMercurial.ini
  3. 我不知道如何实现这一点,因为premerge=False仍合并/份Solar.cppSolar.h默认不问我的许可.

Ry4*_*ase 5

你真的很亲密,你不需要采取移植(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
Run Code Online (Sandbox Code Playgroud)

您可以看到变更集1将文件添加到solar分支 - 我们默认不需要的文件.虽然changeset 3调整了一个同样存在于main,afile中的文件,但我们想手动控制是否发生了这种变化.

那样做hg update default ; hg merge -r solar.合并工具将弹出,afile如果我们想要这些更改,我们逐行或逐块决定.保存后做一个hg stat:

% hg stat
M afile
M solar-only
Run Code Online (Sandbox Code Playgroud)

我们看到,仅限于太阳能排队等候默认提交. 只需删除它(带if).

% hg rm -f solar-only
Run Code Online (Sandbox Code Playgroud)

现在将其hg stat显示为已删除:

% hg stat
M afile
R solar-only
Run Code Online (Sandbox Code Playgroud)

当我们提交时,我们将在新的变更集中拥有我们想要的东西.