当使用具有子存储库(“内部”)的Mercurial存储库(“外部”)时,通常最终会遇到问题,即您尝试在外部进行合并但由于“未明确的更改“当没有明显的变化时(外部hg st
显示没有变化)。
问题在于子存储库状态:.hgsubstate
文件包含subrepo的变更集ID,该变量集ID实际上与subrepo工作副本变更集不同(或者,通常,subrepo中存在未提交的更改)
我可以在发生时修复它,但任何人都可以推荐Mercurial工作流程来进行拉动和合并,始终可以避免这个问题吗?我可以通过玩测试回购等来解决这个问题,但如果他们已经知道,也许有人可以节省我和其他人的时间。
工作流越简单越好,因为这是针对一个小团队而不仅仅是一个人。
问题的例子:
更新 - 关于.hgsubstate
的工作说明更新.hgsubstate
文件(使用命令行时)的唯一两个操作如下:
如果你拉出一个外部项目的版本,你会得到任何.hgsubstate签入(显然)
如果您提交外部项目,.hgsubstate
将更新为内部项目的当前父变更集
如果您更新子项目但未对外部项目进行任何更改,那么如果您执行hg status
,外部将不显示任何更改。 但是,如果您运行hg status -S
,您将获得subrepo(以及外部项目)的文件状态。显示的子报告的文件状态是以下的混合:
a)任何未经注册的工作副本都会更改为subrepo
中的文件 b)任何已提交的更改为subrepo,这些更改比.hgsubstate
如果您尝试提交外部项目,即使hg st
没有显示任何更改,它也会允许您提交.hgsubstate文件的udpated版本,如果subrepo确实有更新的tip更改集。因此,一个关键的策略是使用hg st -S
来显示您的子报表中是否有任何待处理的内容,例如工作副本更改或比.hgsubstate
中指定的ID更新的更改集。