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 TortoiseHG-如何在分支之间调整更新?_Mercurial_Branch_Sync_Tortoisehg_Synchronize - Fatal编程技术网

Mercurial TortoiseHG-如何在分支之间调整更新?

Mercurial TortoiseHG-如何在分支之间调整更新?,mercurial,branch,sync,tortoisehg,synchronize,Mercurial,Branch,Sync,Tortoisehg,Synchronize,考虑到具有3个分支(“默认值”,“第一阶段”,“第二阶段””)的龟甲项目,是否可以对一个分支进行更改,并使其反映在一个或两个其他分支中,而不合并它们 其思想是纠正一个分支中的错误,而不必“更新”到其他每个分支来纠正相同的错误 如果是,是如何做到的?是同步吗?推还有别的吗 有人能告诉我实现这一目标的步骤吗(假设可行) 谢谢 Setnara这本身是不可能的。由于可能存在潜在冲突,合并始终是一个单步过程。它们需要单独处理,一次一个 当然,如果更新是痛苦的,那么每个分支上都可能已经更新了多个克隆。这样,

考虑到具有3个分支(“默认值”,“第一阶段”,“第二阶段””)的龟甲项目,是否可以对一个分支进行更改,并使其反映在一个或两个其他分支中,而不合并它们

其思想是纠正一个分支中的错误,而不必“更新”到其他每个分支来纠正相同的错误

如果是,是如何做到的?是同步吗?推还有别的吗

有人能告诉我实现这一目标的步骤吗(假设可行)

谢谢
Setnara

这本身是不可能的。由于可能存在潜在冲突,合并始终是一个单步过程。它们需要单独处理,一次一个

当然,如果更新是痛苦的,那么每个分支上都可能已经更新了多个克隆。这样,您就可以通过它们合并新的修复分支

然而,这是一个典型的问题,您的发布过程可以帮助解决。例如,如果
default
是您的源分支,并且
Phase1
Phase2
最终将合并回
default
,为什么不在所有其他分支中频繁合并
default
?通常在开发分支中安装一个策略来合并
默认值
,这将有助于尽早解决冲突,并且在它被合并到
默认值
中后,它们将从偶尔的错误修复中获益


如果
default
不是您的源分支,请创建一个只包含修复的新分支,并经常将此分支合并到您的阶段分支中,但您会得到要点。

是的,这是可能的,我看到至少两个明显的解决方案和一个不错的解决方案,但是

以后不要使用“显而易见”并尽快修复无脑工作流!这是一个噩梦处理这样的项目从代码猴子以后


重基样式
  • 重新设置更改集的基础(
    hg help Rebase
    ),从bugfix的第一个更改集开始,进入新的目标(分支机构负责人)
    hg Rebase-s$bugfix\u START-d阶段1
    +
    hg Rebase-s$bugfix\u START-d阶段2
    (假设bugfix是默认分支机构的一部分),在原始分支<代码>hg rebase中保留重定基址的变更集--保留
  • 解决可能的冲突
  • 由于rebase将对$BUGFIX\u START的所有子代进行rebase处理,可能会有一些与BUGFIX无关的变更集,
    hg strip
    不会对来自rebase目标的BUGFIX变更集进行rebase处理
嫁接方式
  • 嫁接(
    hg help Graft
    )允许将单个变更集从树的一部分注入到另一部分(与rebase相反,rebase从自定义节点注入子树或merge从最伟大的共同祖先注入所有历史)。你必须:
    • 更新到目标分支(
      hg up Phase 1
      ),阅读
      hg help update
    • 选择所有需要的变更集并在rebase中枚举(请参见命令的选项)
      hg graft-r$BUGFIX\u START-r$BUGFIX 2-r$BUGFIXN-D-U--log
    • 对第2阶段分支执行前面的两个步骤
最后

“正确的道路”(tm)-命名为分支
  • 从点或父节点为$BUGFIX\u START创建命名分支
    hg up$BUGFIX\u START
    +更改某物+
    hg分支语义为$BUGFIX``hg ci-m“分支”
  • 如果需要的话,将与错误修复相关的变更集重新基址(,在需要后剥离,,不剥离,
    ——保留,
    )到这个新命名的分支中
  • 将SEMANTICNAMEOFBUGFIX合并到默认的第1阶段和第2阶段
  • 以后一定要使用“每个任务分支”,不要在代码和存储库历史记录中胡说八道

我向你的导师表达了一种蔑视:在授权公开提交之前,他必须告诉并解释这一点(本地个人存储库在任何程度上都可能是一场噩梦)

我强烈建议不仅要阅读代码,还要阅读明智而有经验的用户提供的文档、建议和提示,这样就不会不断地重新发明轮子

@Vince-我阅读了这个问题,顺便说一句,我区分了“OP说的”和“OP想说的”(与您相反)。Setnara不希望以避免“hg up”的形式“更新”其他分支,而是“手动重新键入错误修复2次”,对存储库中的交换数据一无所知,除了merge(很明显,在用例中这不是一个交易)Rebase样式,使用
--keep
-d
,我承认,这很好,我想考虑一下。但是更新是存在的,隐藏的,但是自动的。请记住,对于痛苦的
更新
,您仍然会得到痛苦的
重设基础
,如果这是避免它的原因的话。另外,您的变更集仍然需要是草稿。对于另外两个,更新是手动的。