使用convert在Mercurial Repo中从子文件夹创建一个新的repo

时间:2011-07-27 11:22:51

标签: mercurial repository extract subdirectory

我正在尝试使用Mercurial转换为Mercurial的转换扩展,从现有的Mercurial Repo(在 MainRepo 中调用)中提取文件夹(称为 Project1 )。我遵循了Windows XP下Mercurial开发人员(以及网络上的其他地方)所描述的方法:

 C:\MainRepo>echo include Project1 > ~myfilemap
 C:\MainRepo>echo rename Project1 . >> ~myfilemap
 C:\MainRepo>hg convert --filemap ~myfilemap . C:\Project1Repo
 C:\MainRepo>cd \Project1Repo
 C:\Project1Repo>hg update

这将创建具有Mercurial文件夹/文件的新repo(Project1Repo)。 但事实并非如此:

1)在Project1文件夹中进行与项目所做更改相关的历史记录。 (仅存在MainRepo的第一个历史记录条目和转换项目。)

2)将所有源代码文件从MainRepo \ Project1复制到Project1Repo。

我在stackoverflow中看到了其他类似的问题和答案,但这些似乎没有帮助(我已经按照其中讨论的方法): Can I clone part of a Mercurial repository?

所以问题是:如何从MainRepo中提取子文件夹,只保留子文件夹历史记录并完成新的Repo并同时传输源文件? (虽然我猜一个直接副本会做到最后)。它保留了重要的历史记录 - 在这种情况下,我可以在日期或变更集编号之后进行此操作。

任何帮助都非常感谢,因为我对此相对较新

由于

1 个答案:

答案 0 :(得分:7)

您列出的工作流程是正确的。这就是convert扩展程序的工作方式。

您的问题指出hg convert的repo输出实际上是空的(“ MainRepo的第一个历史记录条目和转换项”除外)。这表示convert无法找到文件映射中指定的路径。

您确定给出include声明的路径是否正确?

include语句中给出的目录名必须是存储库根目录的完整路径。例如,您的include语句:

include Project1

要求Project1的路径实际为:

C:\MainRepo\Project1

如果Project1实际上位于MainRepo中的其他位置,则转化后您将获得一个空的回购。