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

时间:2010-07-09 16:40:22

标签: mercurial

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

Project_A已在其自己的Mercurial存储库中存活了一段时间。 Project_A现在正在进入一个新的超级项目Super-Project_B。 Super-Project_B也有一个mercurial存储库。我们希望Project_A不是一个subrepo,而只是一个普通的孩子,但我们也不想失去历史。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:50)

呀。使用convert扩展将projectA向下移动到一个目录级别:

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

你的filemap.txt中有这一行:

rename . projectA

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

这会给你一个新的repo,projectA-redone,它具有A的所有历史记录,虽然所有的变更集都会有不同的哈希值,因为它们的内容(路径)已经改变,以便在所有变更集之前获得“projectA”。

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

最后你会在Super_project_b中做一个hg merge,它应该没有冲突(除非你已经有了一个projectA目录,在这种情况下你应该先选择一个不同的名字或hg remove d )。

执行此操作后,B将在projectA子目录中包含所有A,并且所有历史记录都将保持不变。