Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将mercurial回购(包括历史)作为子目录导入另一个mercurial回购,而不使用子回购?_Mercurial - Fatal编程技术网

如何将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