我有许多子存储库项目:
/project <- Main repository
/project/src <- Source code subrepository (subrepository to /project)
/project/src/module <- Module subrepository (subrepository to /project/src repository)
我现在已经开发了一个功能分支( feature1 ),它有一些修改,我现在想要合并回默认分支。自创建 feature1 分支以来,默认分支没有任何更改。
我已尝试将分支合并为默认值,但最终会在子存储库中发生一些奇怪的事情。
我已按照此other post中的说明操作,并获得以下结果:
$ 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)
奇怪的是,即使在 module 子存储库中更改了许多文件,但合并仅表示已更新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 以将所有更改带入工作目录后,我会看到需要提交的 module 子存储库中的更改。但是, .hgsubstate 始终保持修改状态。我试过 hg remove 。我试过 hg忘记了。但无论我做什么,当我执行 hg状态时,它仍然会被标记。
所以我的问题是:
答案 0 :(得分:2)
您没有说您正在使用哪个版本的hg - subrepo支持随着时间的推移已经改变了一定数量。我刚尝试了类似于你的测试的东西,在hg v2.8中有3个subrepo级别,它对我有用。
当您在顶层获得一个脏的.hgsubstate时,这在提交子参数时是正常的。 [如果只有一个subrepo被独立提交,那么只有.hgsubstate会在顶层变脏。]如果你然后上升到顶级并在该级别提交,则会提交.hgsubstate,一切都很好。请记住,顶级repo以与文件类似的方式跟踪subrepos - 它在每个顶级提交中从subrepo提交特定的变更集。
FWIW。建议的做法是单独提交subrepos,即如果subrepos是脏的,则避免在顶层提交。原因是subrepos通常需要一个不同的提交消息 - 毕竟它们是subrepos的原因;但如果你愿意,你可以在顶层提交。在您的情况下,有3个级别,序列将是:
cd src/module
hg commit -m "src/module commit reason"
cd ..
hg commit -m "src commit reason"
cd ..
hg commit -m "top level reason"
意图是subrepos不经常更改,例如第三方图书馆。如果您的子计划经常发生变化,您和您的团队必须保持警惕以避免错误,特别是在与其他人合作时。 [但考虑到问题的日期,你现在可能已经解决了这个问题。]