如何将mercurial回购(包括历史)作为子目录导入另一个mercurial回购,而不使用子回购?
这听起来有点复杂,让我解释一下:如何将mercurial回购(包括历史)作为子目录导入另一个mercurial回购,而不使用子回购?,mercurial,Mercurial,这听起来有点复杂,让我解释一下: Project_A在其自己的Mercurial存储库中已经存在了一段时间。项目A现在被合并成一个新的超级项目,超级项目B。超级项目B也有一个mercurial存储库。我们更希望项目A不是次级回购,而是一个普通的孩子,但我们也不想失去历史。有办法吗?是的。使用convert扩展将projectA向下移动一个目录级别: hg convert --filemap filemap.txt projectA projectA-redone 您的filemap.txt中有
Project_A在其自己的Mercurial存储库中已经存在了一段时间。项目A现在被合并成一个新的超级项目,超级项目B。超级项目B也有一个mercurial存储库。我们更希望项目A不是次级回购,而是一个普通的孩子,但我们也不想失去历史。有办法吗?是的。使用convert扩展将projectA向下移动一个目录级别:
hg convert --filemap filemap.txt projectA projectA-redone
您的filemap.txt
中有以下行:
rename . projectA
(那个点可能是斜线,但我不这么认为)
这将为您提供一个新的repo,projectA redone,它具有a的所有历史记录,尽管所有更改集都将具有不同的哈希,因为它们的内容(路径)已更改为在所有更改集前面显示“projectA”
然后进入超级项目B并执行一个hg pull-f/path/to/projectA重做
。你需要-f
,否则你会被告知回购协议是不相关的,因为它们没有共同的变更集
最后,您将在Super_project_b中执行hg merge
,这应该没有冲突(除非您已经有一个projectA目录,在这种情况下,您应该先选择一个不同的名称或hg remove
d它)
完成此操作后,B将在projectA子目录中包含所有A,并且所有历史记录都将保持完整。是点还是斜线起作用。我原以为是斜杠,但“帮助”中说,如果你要往另一个方向走,请使用点(重命名projectA。将其移动到顶层),所以我猜是这样。@Ry4an,它是点。仍然可以完美地工作。我首先必须在mercurial.ini中启用convert扩展,然后才能找到它!将
--branchmap branchmap.txt
添加到转换中,branchmap.txt包含默认xyz
对于OrtoiseHG用户,转换扩展名在OrtoiseHG Workbench的文件->设置中为windows用户启用,转换扩展必须添加到当前用户目录下的mercurial.ini中-c:\Users\currentUserName\mercurial.ini