6

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

我面临的问题是新的存储库历史记录不完整,它只包括重命名后的文件历史记录。我得到的历史与执行相同hg log filename,我想要的是拥有文件的完整历史,比如hg log -f filename.

我错过了什么?

谢谢。

4

1 回答 1

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 LibTemp和以下内容转换存储库LibTempMap.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:tipLibYLibTemp

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

于 2012-06-19T18:57:36.887 回答