2

我有一个看起来像这样的 Mercurial 存储库:

SWClients/
  SWCommon
  SWB
  SWNS

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

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

4

1 回答 1

3

目前不可能。您可以创建一个新的仓库来转换原始仓库,例如:

$ hg --filemap excludemap.txt SWClients SWClients-without-SWCommon

使用 excludemap.txt ,例如:

exclude "SWCommon"

然后在那里添加子存储库。

$ hg --filemap map.txt SWCommon SWClients-without-SWCommon/SWCommon
$ cd SWClients-without-SWCommon
$ hg add SWCommon
$ hg ci -m "Created subrepo"

请参阅讨论此问题的邮件列表线程。

于 2012-01-23T20:55:50.033 回答