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

标签 mercurial

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

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

我错过了什么?

谢谢。

最佳答案

我假设你有这样的结构:

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:tip来自Lib文件夹(其中 Y 是在 LibTemp 存储库 中重命名 之后的修订版)。这应该干净地移植,因为您通过在转换期间进行重命名确保临时存储库中的文件结构相同。

然后留下 Lib包含您想要的历史记录和文件的存储库,可以删除 LibTemp存储库。

关于mercurial - 将 mercurial 存储库转换为具有完整历史记录的子存储库(如 hg log -f),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11105567/

相关文章:

windows - 在 IIS 6 上设置 Mercurial 服务器

mercurial - 如何使用多个hg mq修补程序队列(在一个存储库中与多个子存储库中)

git - 如何将一组 mercurial 存储库转换为 git 存储库?

mercurial - 如何在BitBucket上远程创建存储库?

mercurial - 如何在分支之间移动文件版本

mercurial - 为什么我不能在 Mercurial (hg) 中删除这个远程书签?

git - Hg 是否有相当于 git Revert/cherry-pick 的功能?

mysql - 开发环境Windows/Ubuntu切换

mercurial - 如果 Mercurial 中存在未提交的子存储库更改,如何使 "commit"中止?

python - 如何编写基本的 Mercurial 扩展?