我们有一个代码审查存储库,人们hg push -f
可以使用各种各样的东西.审核完成后,我们从项目的中央存储库,rebase和push中提取.我最近升级到mercurial 2.1并收到此消息:
abort: can't rebase immutable changeset 43ab8134e7af
(see hg help phases for details)
Run Code Online (Sandbox Code Playgroud)
当我尝试hg pull --rebase
从中央存储库.我如何解决它?
这可能看起来很矛盾,我知道秘密更改集应该是私有的,但如果我想备份这些秘密更改集怎么办?
我平行地与一些分支机构合作,有时候我想推一个分支机构,而不是其他分支机构.为了达到这个目的,我在不同的克隆工作,但我讨厌这个.
所以现在mercurial有阶段,我可以建立秘密分支,并在同一个存储库中拥有所有内容.问题是在秘密分支的开始和它的发布之间,我想要备份那些秘密变更集(我在另一台机器上有一个克隆,只是为了保存我的备份以防万一我的本地仓库或我的机器发生了什么).
有没有办法做到这一点或我的工作流程是完全错误的?
当我无法访问远程文件时,如何告诉mercurial远程服务器(例如bitbucket)是非发布的.hg/hgrc
?
最近版本的mercurial有一个阶段概念,允许用户跟踪哪些变更集已被共享(public
),哪些变量集没有(draft
).更改集rebase
允许存储库更改操作draft
,但不允许更改集,public
因为其他操作可能取决于后者.
将更改集推送到公共服务器将public
默认将其阶段更改为,但如果服务器是私有的或专用于代码审查(即人们不应该提取),则推送到"非发布"服务器不应更改相.
该记录的方式告诉善变的服务器是不公开的是将增加[phases]
部分到.hg/hgrc
文件服务器上:
[phases]
publishing = false
Run Code Online (Sandbox Code Playgroud)
在我看来应该有一种方法可以在我的一个本地hgrc
文件中包含一行说明特定服务器是非发布的,但我找不到任何文档来建议如何.也许这个行为可以用钩子定制?
使用Mercurial,我如何捆绑所有未知的更改集,包括秘密更改集?
我知道bundle
的--base
选项恰好包括秘密的变更,但我不希望--base
行为.(而且秘密变更集总是包含--base
但似乎非常奇怪,但是如果没有秘密变更集,它就不会包含在内.不应该有单独的选项吗?)
仅供参考,我通常希望在尝试潜在危险的历史记录重写之前备份仅在我的本地仓库中的所有变更集.
如何阻止mercurial将推动操作的变更设置为"公共"阶段?我希望他们留下"选秀".
我重新加入并进行了很多修改,我推送的存储库仅供我使用.而且不得不一直改变阶段是一件麻烦事.
我目前在一家使用 mercurial 的公司工作,但大多数开发人员使用 MQ 而不是新的进化流程。因此,大多数用户没有启用扩展。
每次我推送到主存储库时,.hg/store/obsstore
都会自动推送过时的变更集。这是有问题的,因为之后所有未启用扩展的用户都会收到以下消息:
未启用过时的功能,但找到了 33 个标记!
此答案中提出的一种解决方案涉及.obsstore
在本地删除,但这不是我想要的,因为我仍在使用evolve
,这意味着我希望过时的变更集保持隐藏状态。不仅如此,过时的标记和变更集应该在服务器存储库中可用,以便我们保持使用evolve
智能冲突解决等的好处。
我希望有一种方法可以不将过时的变更集推送到服务器存储库,或者(正确的方法)让服务器在未evolve
启用的情况下不将过时的数据推送到客户端。
这可能吗?如果没有,为什么不呢?
我有一个支持 Mercurial 主题的远程存储库的克隆。
在此版本的 hg-evolve 中,当更改集重新设置基础时(例如),它们将被隐藏。
我需要访问隐藏变更集的确切工作目录,而我的本地克隆上没有该变更集。我已经验证其他人的克隆确实可以通过大多数 Mercurial 命令的标志获得该变更集--hidden
。
我努力了:
hg --hidden clone
hg --hidden pull
但似乎都没有任何影响。
我想在Mercurial项目中默认创建“秘密”提交而不是“草稿”提交。有什么方法可以配置Mercurial,以便默认阶段是“秘密”而不是“草稿”?