Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial:如何与手动控制合并;文件夹?_Mercurial_Merge_Manual - Fatal编程技术网

Mercurial:如何与手动控制合并;文件夹?

Mercurial:如何与手动控制合并;文件夹?,mercurial,merge,manual,Mercurial,Merge,Manual,注意:我在这里描述的场景在中没有得到回答 我将用一个例子来解释我的疑问。假设我启动Mercurial存储库来设计一辆汽车: C:\Car$ dir Car.cpp Car.h 我在Car设计方面工作了很长一段时间,存储库如下所示: r0-r1-...-r100-(default) r0-r1-...-r100-...-r200-(default) \--r101-...-r201-(SolarCarBranch) 在某个时间点,我将默认值分支到SolarCarBra

注意:我在这里描述的场景在中没有得到回答

我将用一个例子来解释我的疑问。假设我启动Mercurial存储库来设计一辆汽车

C:\Car$ dir
Car.cpp
Car.h
我在Car设计方面工作了很长一段时间,存储库如下所示:

r0-r1-...-r100-(default)
r0-r1-...-r100-...-r200-(default)
            \--r101-...-r201-(SolarCarBranch)
在某个时间点,我将默认值分支到SolarCarBranch以并行处理太阳能汽车:

C:\SolarCar$ dir
Car.cpp
Car.h
Solar.cpp
Solar.h
再过一段时间,存储库看起来像:

r0-r1-...-r100-(default)
r0-r1-...-r100-...-r200-(default)
            \--r101-...-r201-(SolarCarBranch)
如何将SolarCarBranch合并回默认值

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

  • 合并后,我应该能够继续处理默认SolarCarBranch
  • Car.cpp
    SolarCarBranch中的
    Car.h
    中可能有燃油效率修正,我希望将其拉入default,但我不希望这些文件中的所有更改。因此,我想在合并(也称为手动合并)过程中挑选我想要包含在default中的更改
  • 我不想要
    Solar.cpp
    Solar.h
    出现在default中。世界可能还没有为太阳能汽车做好准备 我学到的是:

  • 这可以通过hg merge SolarCarBranch实现
  • 这可以通过在
    Mercurial.ini
  • 我不知道如何实现这一点,因为
    premerge=False
    仍然在未经我许可的情况下将
    Solar.cpp
    Solar.h
    合并/复制到default

  • 您的第一个条件,即能够在两个分支上继续工作,只需不关闭分支即可满足(您可以使用
    --close branch
    选项
    hg commit

    您可以使用选择要合并的变更集。这将允许您仅选择要合并到默认值中的特定变更集

    第三个条件是,如果您不在同一次提交中同时对普通汽车和太阳能汽车进行更改,您可以从太阳能分支机构中撤回更改集,而不必担心混合车型


    您可能还需要查看中的
    内部
    选项标志。

    您非常接近,通常不需要求助于移植(恶心)或樱桃采摘。关闭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
    
    我们看到solar only在默认情况下排队等待提交只需将其删除即可(如果,则使用

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

    % hg stat
    M afile
    R solar-only
    

    当我们做出承诺时,我们将在新的变更集中得到我们想要的。

    听起来像樱桃采摘是我们真正需要的吗?我认为没有必要采摘樱桃。只要“预合并”处于关闭状态,您仍然可以控制逐块或逐行添加每个更改。Cherry picking只是不必手动拒绝某些CSET中的更改的简写,但您始终可以对它们说“不”。我真的建议不要使用移植扩展,因为这样一来,您的回购协议中会有两次相同的更改,使用两个不同的哈希ID。@Ry4an我曾想过建议您使用您描述的手动提交,但当我编写它时,
    transport
    似乎更容易。但是你的解释让我相信这是更好的选择,特别是你关于用两个不同的哈希值来设置相同的变更集的观点。所以我对你的答案投了赞成票,并建议OP接受。删除那些文件!我怎么会错过这个!非常感谢!:-)