我有许多带有子存储库的项目:
/project <- Main repository
/project/src <- Source code subrepository (subrepository to /project)
/project/src/module <- Module subrepository (subrepository to /project/src repository)
我现在处理了一个功能分支(feature1),它有一些修订,我现在想将其合并回默认分支。自创建feature1分支以来,默认分支没有任何更改。
我尝试将分支合并为默认值,但最终在子存储库中发生了一些奇怪的事情。
我已按照另一篇文章中的说明进行操作,并得到以下结果:
$ hg checkout default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg merge feature1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg status -S
M .hgsubstate
$ hg commit -S -m "branch merge test"
nothing changed
$ hg branches
default 19:c2398dc23428
feature1 17:98dc0efbad90 (inactive)
奇怪的是,即使模块子存储库中更改了许多文件,合并仅表明更新了 1 个文件。我假设这恰好是.hgsubstate。
当我显式更新子存储库时,我得到以下信息:
$ cd src/module
$ hg update
39 files updated, 0 files merged, 23 files removed, 0 files unresolved
$ cd ../..
$ hg commit -S -m "feature1 merge"
committing subrepository src
$ hg status -S
M .hgsubstate
因此,在进行hg update以将所有更改带入工作目录之后,我看到了需要提交的模块子存储库中的更改。但是,.hgsubstate始终保持修改状态。我试过hg remove。我试过hg forget。但无论我做什么,当我做hg status时它仍然被标记。
所以我的问题是:
- 我合并分支的过程是否正确(考虑到存在子存储库)?
- 是否有必要在子存储库中进行hg update以使主存储库识别更改?
- 为什么.hgsubstate行为不端?