Convert Mercurial project to Git [duplicate]
I need to convert a mercurial project to a git project, but I would like to keep the commit history intact. My current solution was to just remove hg related files and then git init && add manually the files I needed, but that would not keep the history. Are there any solutions to this?
You can try using fast-export:
cd ~
git clone https://github.com/frej/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD
Also have a look at this SO question.
If you're using Mercurial version below 4.6, adrihanu got your back:
As he stated in his comment: "In case you use Mercurial < 4.6 and you got "revsymbol not found" error. You need to update your Mercurial or downgrade fast-export by running git checkout tags/v180317 inside ~/fast-export directory.".
Ok I finally worked this out. This is using TortoiseHg on Windows. If you're not using that you can do it on the command line.
- Install TortoiseHg
- Right click an empty space in explorer, and go to the TortoiseHg settings:
- Enable
hggit
:
Open a command line, enter an empty directory.
git init --bare .git
(If you don't use a bare repo you'll get an error likeabort: git remote error: refs/heads/master failed to update
cd
to your Mercurial repository.hg bookmarks hg
hg push c:/path/to/your/git/repo
In the Git directory:
git config --bool core.bare false
(Don't ask me why. Something about "work trees". Git is seriously unfriendly. I swear writing the actual code is easier than using Git.)
Hopefully it will work and then you can push from that new git repo to a non-bare one.
If you want to import your existing mercurial repository into a 'GitHub' repository, you can now simply use GitHub Importer available here [Login required]. No more messing around with fast-export etc. (although its a very good tool)
You will get all your commits, branches and tags intact. One more cool thing is that you can change the author's email-id as well. Check out below screenshots: