这听起来很复杂,所以让我解释一下:
Project_A已在其自己的Mercurial存储库中存活了一段时间。 Project_A现在正在进入一个新的超级项目Super-Project_B。 Super-Project_B也有一个mercurial存储库。我们希望Project_A不是一个subrepo,而只是一个普通的孩子,但我们也不想失去历史。有没有办法做到这一点?
答案 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,并且所有历史记录都将保持不变。