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 - Fatal编程技术网

在Mercurial中留下分支头?

在Mercurial中留下分支头?,mercurial,Mercurial,我有一个本地存储库(没有远程)用于跟踪网站的更改。该网站有一个临时服务器和一个活动服务器,我想使用的分支方法是有一个命名的“活动”分支,它是活动服务器状态的文字表示(活动服务器可以克隆该分支的头,并且不应该有任何更改)。当前的开发更改为“live”的分支(以长项目命名,未命名(技术上也称为“live”)以短项目命名),而“live”在准备离开暂存服务器时将它们重新合并。所以我想要的理想分支是: --A---------E------------L----------O-- live \

我有一个本地存储库(没有远程)用于跟踪网站的更改。该网站有一个临时服务器和一个活动服务器,我想使用的分支方法是有一个命名的“活动”分支,它是活动服务器状态的文字表示(活动服务器可以克隆该分支的头,并且不应该有任何更改)。当前的开发更改为“live”的分支(以长项目命名,未命名(技术上也称为“live”)以短项目命名),而“live”在准备离开暂存服务器时将它们重新合并。所以我想要的理想分支是:

--A---------E------------L----------O-- live
   \       / \          / \        /
    B--C--D   F--I--J--K   \      /     minor features
               \            \    /
                G--H---------M--N       major feature
但是,如果我的工作目录更新为修订版A(在分支“live”上),并且我想开始一个新的次要项目,那么我如何分支到B

我可以创建一个新的分支名称,然后在a上提交(将“live”的标题保留在a上,并在B上创建一个新的分支/标题),完成我的工作,然后合并两个分支以创建我想要的a-E,但现在有一个命名的分支需要关闭。如果我要创建许多较小的功能,我需要它们的唯一名称,因为“关闭的”分支仍然存在,并且声称它们的名称,只是标记为不活动

如果我只是在没有新分支名称的情况下在A的顶部提交B,那么“tip”和“live”标记将向上移动到修订版B,并且A不再是头(这意味着在创建C和D之后,它不能与D合并生成E)。另外,如果我克隆'live'的头部,它并不代表live服务器(它回到了一个位置)

在创建B之后,我可以将我的工作目录更新为A,并执行无更改提交,这将创建一个新的头,但这意味着每次启动新功能时,我都必须对我的活动分支执行无用的提交

--A--A' live
   \
    B--C

那么,有没有一种方法可以在Mercurial中作为一个新的、未命名的头部提交提交提交呢?

您所面临的问题是,您不想为短期事件执行命名分支,但由于您正在执行
live
分支之外的操作,在
live
分支上,没有太多东西可以看到哪个头部实际上是
live
的正确表示

我认为这可以通过两个主要分支来解决:一个代表开发,一个代表发布的代码。在您的情况下,您可能会使用
default
live
,而不是分支

所有主要功能都将基于
default
命名为分支,而次要功能则只是
default
上的匿名分支。您可以在
default
上进行任意多的开发,当您从
live
提示进行克隆以更新live服务器时,它不会改变任何内容

  • 当您的一个主要功能完成时,您可以在
    default
    上将其合并到主分支
  • default
    上有东西准备发布时,您可以有选择地将其合并到
    live
因为您不希望将命名分支用于次要功能,所以您可能希望跟踪
default
的哪些变更集/变更头表示正在进行的次要功能,哪些变更集/变更头表示已完成的开发。为此,我推荐

另一种可能性

书签还允许您在a处有一个名为
livetip
的书签,然后同时创建一个书签
myMinorFeature
,进行更改并提交B、C和D。默认行为是
livetip
myMinorFeature
将移动到B,然后是C,然后是D,但是您可以通过将此书签添加到您的
.hgrc
/
Mercurial.ini
:

[bookmarks]
track.current = True
正如您所指出的,hg不会合并D和A,而是给出一条“NothingToMerge”消息,即使带有书签。一旦
myMinorFeature
为live server做好准备,您需要将
livetip
书签移动到
myMinorFeature
所在的位置


您还可以标记要为live server克隆的任何更改集,不过每次都必须手动移动该更改集。

书签看起来是一个不错的解决方案,除非核心中还有其他人想指出的内容……仅供参考,在a--B--C--D场景中,mercurial不允许您将a与D合并;给出了一个“无需合并”中止消息。鉴于此,我稍微修改了结尾。
[bookmarks]
track.current = True