1

使用具有子存储库(“内部”)的 Mercurial 存储库(“外部”)时,通常会遇到问题,即您尝试在外部进行合并,但由于“未提交的更改”而失败当没有明显变化时(hg st外部显示没有变化)。

问题归结为子存储库状态:该.hgsubstate文件包含子存储库的变更集 ID,它实际上与子存储库工作副本变更集不同(或者,简单地说,子存储库中有未提交的更改)。

我可以在它发生时修复它,但是任何人都可以推荐一个用于拉取和合并的 Mercurial 工作流程,它总是可以避免这个问题吗?我可以通过玩测试回购等来解决它,但如果他们已经知道的话,也许有人可以为我和其他人节省一些时间。

工作流程越简单越好,因为这是针对一个小团队而不仅仅是一个人。

问题示例:

更新 - 关于 .hgsubstate 工作原理的说明

更新文件的唯一两个操作.hgsubstate(使用命令行时)如下:

  1. 如果你拉取外部项目的一个版本,你会得到任何 .hgsubstate 被签入(显然)

  2. 如果您提交外部项目,则将.hgsubstate更新为内部项目的当前父变更集

如果您更新子存储库但未对外部项目进行任何更改,那么如果您这样做,外部将不会显示任何更改hg status但是,如果您运行hg status -S,您将获得子存储库(以及外部项目)的文件状态。显示的子存储库的文件状态是以下几种的混合:

a)对 subrepo 中文件的任何未提交的工作副本更改

b)对子存储库的任何已提交的比更改集 ID 更新的更改.hgsubstate

如果您尝试提交外部项目,即使没有hg st显示任何更改,如果 subrepo 确实具有更新的提示变更集,它也将允许您提交 .hgsubstate 文件的更新版本。因此,一个关键的策略是使用hg st -S它将显示您的子存储库中是否有任何待处理的内容,例如工作副本更改或比 in 中命名的 id 更新的更改集.hgsubstate

4

0 回答 0