我有一个本地存储库,仅供我(无遥控器)跟踪网站的更改。该网站有一个登台服务器和一个实时服务器,我想要使用的分支方法是有一个命名的“实时”分支,它是实时服务器状态的字面表示(实时服务器可以克隆头部那个分支,应该没有变化)。当前的开发更改为“live”的侧支(以长项目命名,未命名(技术上也是“实时”)用于短项目),并且'live'在他们准备离开登台服务器时将它们合并回来。所以我喜欢的理想分支是这样的:
--A---------E------------L----------O-- live
\ / \ / \ /
B--C--D F--I--J--K \ / minor features
\ \ /
G--H---------M--N major feature
但是,如果我的工作目录更新为修订版A(在分支'实时'上),并且我想开始一个新的小项目,我该如何分支到B?
我可以创建一个新的分支名称,然后在A之上提交(在A处留下'live'的头部,在B处创建一个新的分支/头部),做我的工作,然后合并两个分支创建我想要的AE,但现在我需要关闭一个命名分支。如果我正在创建许多较小的功能,我需要为它们提供唯一的名称,因为“封闭”分支仍然存在,并声称它们的名称,只是标记为非活动状态。
如果我只是在A之上提交B而没有新的分支名称,则“tip”和“live”标签向上移动到版本B,而A不再是头部(意味着在创建C和D之后,它不能与D合并制E)。另外,如果我克隆“live”的头部,它不代表实时服务器(它回到A)。
--A--B--C--D live
在创建B之后,我可以将我的工作目录更新为A并执行无变更提交,这将创建一个新的头部,但这意味着每次我开始时我都必须在我的实时分支上执行无用的提交一个新功能。
--A--A' live
\
B--C
那么有没有办法在Mercurial中提交一个新的,未命名的头部提交?
答案 0 :(得分:1)
你面临的问题是你不想为短命的东西做命名分支,但是因为你正在做live
分支,所以没什么可看的live
分支上的哪个头实际上是live
的正确表示。
我认为这可以通过2个主要分支来解决:一个代表开发,一个代表已发布的代码。在您的情况下,您可能会default
和live
而不是分支default
and stable
。
所有主要功能都将基于default
命名为分支,而您的次要功能只是default
上的匿名分支。根据{{1}},您可以根据需要进行大量开发,当您从default
tip
克隆以更新实时服务器时,它不会发生任何变化。
live
上的主分支。 default
上的内容已准备好发布时,您可以根据需要将其合并到default
。因为您不想对次要要素使用命名分支,所以您可能希望跟踪live
的哪些变更集/头部代表正在进行的次要要素以及哪个变更集/头部代表已完成的开发。为此,我建议bookmarks。
另一种可能性
书签还允许您在A处有一个名为default
的书签,然后同时创建书签livetip
并执行更改并提交B,C和D.默认行为是这样myMinorFeature
和livetip
会转移到B,然后转移到C,然后转移到D,但是您可以更改它,以便只有当前的书签才能添加到myMinorFeature
/ {{1 }}:
.hgrc
正如您所指出的,hg不会合并D和A,而是提供“无需合并”消息,即使是书签也是如此。在Mercurial.ini
为实时服务器做好准备后,您需要自己将[bookmarks]
track.current = True
书签移至myMinorFeature
所在的位置。
您还可以标记要为实时服务器克隆的更改集,但每次都必须手动移动它。