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

mos*_*ald 41 mercurial

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

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

Ry4*_*ase 50

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

hg convert --filemap filemap.txt projectA projectA-redone
Run Code Online (Sandbox Code Playgroud)

filemap.txt有这条线的地方:

rename . projectA
Run Code Online (Sandbox Code Playgroud)

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

这将为您提供一个新的repo,projectA-redone,它具有A的所有历史记录,但是所有的变更集都会有不同的哈希值,因为它们的内容(路径)已经改变,以便在所有变更集之前获得"projectA".

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

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

完成后,B将在projectA子目录中包含所有A,并且所有历史记录都将保持不变.