Create a new repo from sub folder in Mercurial Rep

2019-04-04 20:51发布

问题:

I am trying to extract a folder (call it Project1) from an existing Mercurial Repo (call in MainRepo) using the Convert extension for Mercurial to Mercurial conversion. I have followed the methods described by Mercurial developers (and elsewhere on the web) under Windows XP:

 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

This creates the new repo (Project1Repo) with the Mercurial folder/files in place. But it does not:

1) Carry across the History relating to the changes made for the Project in folder Project1. (Only the very first history entry for MainRepo and a Convert item are present).

2) Copy across all the source code files from the MainRepo\Project1 to Project1Repo.

I have seen the other similar questions and answers in stackoverflow but these do not appear to help (I have followed methods discussed in them): Can I clone part of a Mercurial repository?

So the question is: How do I extract a sub-folder from MainRepo with only the sub folder history intact and complete to a new Repo and transfer the source files at the same time? (though I guess a straight copy will do the last). It's keeping the history that is important - In this case I can make this after a date or Changeset number.

Any help much appreciated as I'm relatively new to this

Thanks

回答1:

The workflow you listed is correct. That is the way the convert extension is intended to work.

Your question states that the repo output by hg convert is actually empty (except for "the very first history entry for MainRepo and a Convert item"). This would indicate that convert was not able to find the path specified in your filemap.

Are you certain that the path given your include statement is correct?

The directory name given in your include statement must be the full path from your repository root. For example, your include statement:

include Project1

requires that the path to Project1 actually be:

C:\MainRepo\Project1

If Project1 is actually located somewhere else in MainRepo, you will end up with an empty repo after the conversion.