Mercurial:将现有文件夹转换为子回购

时间:2011-09-26 04:10:42

标签: mercurial-subrepos

我有一个Mercurial存储库,如下所示:

SWClients/
  SWCommon
  SWB
  SWNS

...其中SWCommon是另外两个项目共有的库。现在,我想将SWCommon转换为SWClients的子存储库,因此我按照herehere的说明进行操作。但是,与第一个链接中的示例相比,我希望我的子存储库与文件夹在开头具有相同的名称。详细而言,这就是我所做的:

按如下所示创建文件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更新?你如何让它在实践中发挥作用?

1 个答案:

答案 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