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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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_Tortoisehg - Fatal编程技术网

Mercurial仅合并某些变更集

Mercurial仅合并某些变更集,mercurial,tortoisehg,Mercurial,Tortoisehg,好的,我们最近从SVN转换成了Mercurial。 我们通常使用龟甲。 在我们的一个仓库中,我们有我们所有的项目,C++和.NET /ASP。我们有大约100个项目,都使用公共库项目。 因此,为每个项目创建多个回购协议将是一项相当困难的任务 现在,我们有了default分支,让我们说branchA 我正在处理BranchA并将我的uber更改添加到其中,我更改了一个公共库,比如一个扩展方法 我想把这个提交给branchA和default,我该怎么做 但是,我不希望将来自branchA的所有更

好的,我们最近从SVN转换成了Mercurial。
我们通常使用龟甲。

在我们的一个仓库中,我们有我们所有的项目,C++和.NET /ASP。我们有大约100个项目,都使用公共库项目。

因此,为每个项目创建多个回购协议将是一项相当困难的任务

现在,我们有了
default
分支,让我们说
branchA

我正在处理
BranchA
并将我的uber更改添加到其中,我更改了一个公共库,比如一个扩展方法

我想把这个提交给
branchA
default
,我该怎么做

但是,我不希望将来自
branchA
的所有更改合并到
default
,也不希望来自
default
的所有其他更改

希望这是足够的信息

您描述的是“樱桃采摘”或“部分合并”,这在Mercurial目前是不可能的。您有几个选择:

  • 将公共代码分离到它自己的存储库中
  • 生成对通用代码所做更改的差异,并将其应用于
    default
    分支

我们需要的不是合并,而是挑选。您可以使用,但要注意这里提到的复杂性。

如果您将公共代码分离到自己的存储库中,您可以使用Subrepo将其包含在每个项目中


顺便说一句,我建议每个项目都有一个单独的存储库,特别是如果有这么多的项目的话。

有一种方法可以避免这个问题。通常,您可以使用上一版本的标签或其他稳定点
S

这样,您的更改
X
将位于自己的分支上,该分支可以与其他分支合并(合并
M1
M2
),而不会引入不需要的更改集:

-----S--o----o---M1----o---> default
     |          /
     |---------X   feature or bugfix
     |          \
     \--o---o----M2----o-----> BranchA 

这只需要正常的
hg merge
操作;不需要补丁,或者。

只是为了保持更新:Mercurial中有一个实现樱桃采摘的工具

此命令使用Mercurial的合并逻辑来复制单个更改 来自其他分支,而不合并历史图中的分支。 这有时被称为“后移”或“樱桃采摘”。通过 默认情况下,嫁接将从源复制用户、日期和描述 变更集


因为mercurial支持樱桃采摘,所以被否决。Mercurial称之为“移植”,可以使用移植扩展。使用版本控制管理项目是错误的。如果有一个库在多个项目之间共享,那么该库应该有自己的存储库。从长远来看,手动处理这样的变化会给您带来无尽的问题。@PeterGraham mega repos在非常大的公司中使用,并取得了良好的成功。