我有一个Mercurial存储库,如下所示:
SWClients/
SWCommon
SWB
SWNS
...其中SWCommon是另外两个项目共有的库。现在,我想将SWCommon转换为SWClients的子存储库,因此我按照here和here的说明进行操作。但是,与第一个链接中的示例相比,我希望我的子存储库与文件夹在开头具有相同的名称。详细而言,这就是我所做的:
按如下所示创建文件map.txt
include SWCommon
rename SWCommon .
按如下方式创建.hgsub文件
SWCommon = SWCommon
然后运行
$ hg --config extensions.hgext.convert= convert --filemap map.txt . SWCommon-temp
...lots of stuff happens...
然后
$ cd SWCommon-temp
$ hg update
101 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd ..
$ mv SWCommon SWCommon-old
$ mv SWCommon-temp SWCommon
$ hg status
abort: path 'SWCommon/SWCommon.xcodeproj/xcuserdata/malte.xcuserdatad/xcschemes/SWCommon.xcscheme' is inside nested repo 'SWCommon'
......确实如此,但为什么这是中止的理由?另一个奇怪的事情是,如果我最后没有那个'mv'并且我执行'hg status'那么,我最终会在SWCommon中找到许多'丢失'文件,就像你期望的那样。链接中的示例从未使它成为现实,基本上停止在上面的hg更新?你如何让它在实践中发挥作用?
答案 0 :(得分:3)
目前无法实现。您可以创建一个新的仓库转换原始仓库,如:
$ hg --filemap excludemap.txt SWClients SWClients-without-SWCommon
使用excludemap.txt,如:
exclude "SWCommon"
然后在那里添加subrepo。
$ hg --filemap map.txt SWCommon SWClients-without-SWCommon/SWCommon
$ cd SWClients-without-SWCommon
$ hg add SWCommon
$ hg ci -m "Created subrepo"
请参阅讨论此问题的mailing list thread。