subrepos的Mercurial工作流程,以避免“由于未提交的更改而无法合并”

时间:2013-02-07 09:56:04

标签: mercurial mercurial-subrepos

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

问题在于子存储库状态:.hgsubstate文件包含subrepo的变更集ID,该变量集ID实际上与subrepo工作副本变更集不同(或者,通常,subrepo中存在未提交的更改)

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

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

问题的例子:

更新 - 关于.hgsubstate

的工作说明

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

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

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

  3. 如果您更新子项目但未对外部项目进行任何更改,那么如果您执行hg status,外部将不显示任何更改。 但是,如果您运行hg status -S,您将获得subrepo(以及外部项目)的文件状态。显示的子报告的文件状态是以下的混合:

    a)任何未经注册的工作副本都会更改为subrepo

    中的文件

    b)任何已提交的更改为subrepo,这些更改比.hgsubstate

    中的变更集ID更新

    如果您尝试提交外部项目,即使hg st没有显示任何更改,它也会允许您提交.hgsubstate文件的udpated版本,如果subrepo确实有更新的tip更改集。因此,一个关键的策略是使用hg st -S来显示您的子报表中是否有任何待处理的内容,例如工作副本更改或比.hgsubstate中指定的ID更新的更改集。

0 个答案:

没有答案