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

Jam*_*s T 12 mercurial extract repository 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
Run Code Online (Sandbox Code Playgroud)

这将创建具有Mercurial文件夹/文件的新repo(Project1Repo).但它没有:

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

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

我在stackoverflow中看到了其他类似的问题和答案,但这些似乎没有帮助(我已经按照其中讨论的方法): 我可以克隆Mercurial存储库的一部分吗?

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

任何帮助都非常感激,因为我对此比较陌生

谢谢

Tim*_*gan 7

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

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

你确定你的include陈述的路径是正确的吗?

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

include Project1
Run Code Online (Sandbox Code Playgroud)

要求Project1的路径实际上是:

C:\MainRepo\Project1
Run Code Online (Sandbox Code Playgroud)

如果Project1实际上位于其他地方MainRepo,转换后最终会得到一个空的回购.