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