如何在保留目录结构的同时组合存储库?

时间:2013-06-18 13:45:47

标签: version-control mercurial

我有很多项目“融合在一起”。他们共享源文件。

enter image description here

每个项目(包括数十个测试)都有自己的Mercurial存储库。

我想将所有这些存储库加入主存储库并保留相同的目录结构。

mkdir MasterProject
cd MasterProject
mkdir "Common_sources"
hg init
hg pull ../Common_sources Common_sources 

最后一句话显然不会那样,但完全我想要的行为。也就是说,复制所有文件及其历史记录并将它们放入Common_sources目录。

如何在Mercurial中实现这一目标?

1 个答案:

答案 0 :(得分:2)

您需要使用convert extension来执行此操作。

您需要做的是使用文件映射转换源存储库,以将存储库中的所有文件移动到子文件夹中。要对 Common_sources 文件夹执行此操作,您将使用以下命令:

hg convert --filemap filemap.txt Common_sources Common_sources.tmp

filemap.txt 文件将包含以下文本行:

rename . Common_sources

转换后,您有一个名为 Common_sources.tmp 的存储库,其历史记录与 Common_sources 相同,但所有文件都在子目录中。

您将在要组合的所有存储库上执行类似的任务,然后将它们组合到一个项目中,如下所示:

mkdir MasterProject
hg init
hg pull ../Common_sources.tmp
hg pull ../Integration_tests -f
hg merge
hg commit -m "Merging integration tests"

为要添加到存储库项目的每个项目重复提取,合并和提交。

完成所有操作后,您可以使用hg update完成查看主存储库中的所有新文件夹。