Mercurial:如何与手动控制合并;文件夹?
注意:我在这里描述的场景在中没有得到回答 我将用一个例子来解释我的疑问。假设我启动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
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合并回默认值
在我想要的合并过程中,请注意以下复杂情况:
Car.cpp
和SolarCarBranch中的Car.h
中可能有燃油效率修正,我希望将其拉入default,但我不希望这些文件中的所有更改。因此,我想在合并(也称为手动合并)过程中挑选我想要包含在default中的更改Solar.cpp
和Solar.h
出现在default中。世界可能还没有为太阳能汽车做好准备李>
我学到的是:
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接受。删除那些文件!我怎么会错过这个!非常感谢!:-)