我正在尝试使用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并同时传输源文件? (虽然我猜一个直接副本会做到最后)。它保留了重要的历史记录 - 在这种情况下,我可以在日期或变更集编号之后进行此操作。
任何帮助都非常感谢,因为我对此相对较新
由于
答案 0 :(得分:7)
您列出的工作流程是正确的。这就是convert
扩展程序的工作方式。
您的问题指出hg convert
的repo输出实际上是空的(“ MainRepo的第一个历史记录条目和转换项”除外)。这表示convert
无法找到文件映射中指定的路径。
您确定给出include
声明的路径是否正确?
include
语句中给出的目录名必须是存储库根目录的完整路径。例如,您的include语句:
include Project1
要求Project1的路径实际为:
C:\MainRepo\Project1
如果Project1
实际上位于MainRepo
中的其他位置,则转化后您将获得一个空的回购。