如何将一个mercurial回购(包括历史)导入另一个mercurial回购作为一个子目录,而不使用subrepos?

这听起来很复杂,所以让我解释一下:

Project_A已经在其自己的Mercurial存储库中生存了一段时间。 Project_A现在正在被折叠成一个新的超级项目Super-Project_B。 Super-Project_B也有一个mercurial仓库。 我们宁愿Project_A不是一个subrepo,而只是一个正常的孩子,但我们也不想失去历史。 有没有办法做到这一点?

是啊。 使用convert扩展将projectA移动到一个目录级别:

hg convert --filemap filemap.txt projectA projectA-redone 

你的filemap.txt有这一行:

 rename . projectA 

(这个点可能是一个斜线,但我不这么认为)。

这会给你一个新的repo,projectA-redone,它具有所有A的历史,尽pipe所有的变更集都会有不同的哈希值,因为它们的内容(path)已经改变,在它们前面得到“projectA”。

然后你进入Super-Project_B,做一个hg pull -f /path/to/projectA-redone 。 你需要-f ,否则你会被告知这个回购是无关的,因为他们没有共同的变更。

最后,你将在Super_project_b中进行hg merge ,除非你已经有了一个projectA目录,在这种情况下,你应该select一个不同的名字,或者先hg remove它。

做完之后,B将拥有projectA子目录中的所有A,并且所有的历史都将保持不变。