将mercurial存储库转换为具有完整历史记录的子存储库(如hg log -f)

时间:2012-06-19 16:46:45

标签: mercurial

最近我将mercurial存储库中的一些文件移动到子目录(作为模块)以保持一切整洁。几天后,我发现我需要在另一个项目中使用该模块,所以我试图将其转换为自己的mercurial存储库。

我遇到的问题是新的存储库历史记录未完成,它只包含重命名后的文件历史记录。我得到的历史与执行hg log filename相同,我想要的是拥有文件的完整历史记录,例如hg log -f filename的输出。

我错过了什么?

感谢。

1 个答案:

答案 0 :(得分:8)

我认为你有类似这样的结构:

main.c
lib1.c
lib2.c

您重命名了文件并得到了类似的内容:

main.c
lib/lib1.c
lib/lib2.c

您现在需要像lib存储库那样的内容:

lib1.c
lib2.c

我假设这最后一部分是因为,当您将其作为子存储库包含时,它将看起来像您的原始存储库在重命名后所做的那样。

我会在几个阶段做到这一点。

第一阶段将是您可能已经做过的事情。使用命令行hg convert --filemap LibTempMap.txt Main LibTempLibTempMap.txt的以下内容转换存储库:

exclude *
include lib
rename lib .

这为您提供了一个存储库,其中包含重命名后的历史记录。

第二阶段是使用命令行hg convert --rev X --filemap LibMap.txt Main Lib(其中X是重命名前的修订版)和LibMap.txt的以下内容在重命名之前转换存储库:

exclude *
include lib1.c
include lib2.c

这为您提供了一个存储库,其中包含重命名之前的历史记录。

然后,我会在LibTemp文件夹中使用Lib将后续更改从hg transplant -s ..\LibTemp Y:tip移植到Lib(其中Y是重命名后的修订版本LibTemp存储库中的)。这应该干净地移植,因为在转换期间通过重命名确保临时存储库中的文件结构相同。

然后,您将获得包含所需历史记录和文件的Lib存储库,并可以删除LibTemp存储库。