Reputation: 78748
I am switching to git from Mercurial and have been using hg-fast-export successfully. Now I have a tricky situation. I have a project which is using separate hg repositories per-branch and I want to convert these to a single git repository with 'proper' branches, keeping my hg changesets if possible.
So the current structure looks like this - each folder is an hg repository:
Project-v1.0
Project-v2.0
Project-v3.0
I want to end up with a single git repository called 'Project' that contains 3 branches, v1.0, v2.0 and v3.0.
Is this possible?
Upvotes: 4
Views: 673
Reputation: 19950
When the hg repositories are clones from one base repo, you can use the hggit extension to export them into one git repo. Say your branches live in the directories b1/, b2/ and b3/, then all you need is to
cd b1; mkdir ../gb1 && git init --bare ../gb1 && hg push ../gb1; cd ..
cd b2; mkdir ../gb1 && git init --bare ../gb2 && hg push ../gb2; cd ..
cd b3; mkdir ../gb1 && git init --bare ../gb3 && hg push ../gb3; cd ..
# now you have one git repo for each hg branch
cd gb1
git remote add gb2 ../gb2
git remote add gb3 ../gb3
git fetch --all
# now you have all branches in the gb1 repo
rm -r ../gb2 ../gb3
# the other repos are now not used anymore
If the different hg repos are unrelated, you have to use the graft point solution which VonC mentioned.
Upvotes: 2
Reputation: 1328712
This should be possible with:
Project-v2.0
history into Project-v1.0
Git repo (by adding Project-v2.0
as a remote and fetching it in a 'v2.0
' branch: 2 distinct roots are created)HEAD
of v1.0
branch becomes the parent of the first commit of v2.0
branch).filter-branch
to make those graft points permanent (i.e. not limited to your repo)(repeat for the Project-v3.0
, fetch into the first one into a separate v3.0
branch, grafted to the HEAD
of v2.0
branch, and filter-branch to make the graft permanent)
You have a similar scenario (although it is about "prepend some history", not "append") in the SO question "How to prepend the past to a git repository?".
Upvotes: 1