Thursday, December 19, 2013

Pushing from Mercurial to an empty, non-bare Git repo on Windows

Today there's good, 2-way integration between Git and Mercurial. Git has hg-git which is an extension that allows you to clone, push and pull git repos. Likewise Git has git-remote-hg for interacting with Mercurial-repos. Both of these extension come pre-compiled with the git and hg-installations I'm using on Windows, so getting them to work was simply a matter of configuration.

What wasn't that simple though, was getting the first push through. I had an empty repo at Visual Studio Online which I wanted to populate with the check-in history of my Mercurial repo. I met obstacles because non-bare Git repo's doesn't appreciate being pushed to by Mercurial. See this article on bare vs non-bare repos for more info. So then I tried pulling from git instead, but that was equally challenging because I needed Python-support in Git for the git-remote-hg extension to work. Apparently that is not supported in Windows.

Solution: Create an intermediary bare git-repo.

So, here's the receipe of command you need to execute in order to complete the conversion. I'm not including the CD-commands - the foledr you need to be in is indicated on each line. Assumptions:

  1. HgSource is the source repository with a history
  2. GitTarget is the empty, non-bare git-repo you want to push to
  3. c:\GitTempTarget is simply an empty Windows folder

c:\GitTarget> git config --local receive.denyCurrentBranch warn
 c:\GitTempTarget> git --bare init
 c:\HgSource> hg push c:\GitTempTarget
 c:\HgGitTempTarget> git push c:\GitTarget master
 c:\HgGitTarget> git config --local --unset receive.denyCurrentBranch

Note: This is a one-time conversion of the repository. I have tried pushing consecutive changesets from HgSource directly to HgGitTarget without success. If anyone know how to achieve that, please drop a comment below.


  1. شركة نقل عفش
    اهم شركات مكافحة حشرات بالخبر كذلك معرض اهم شركة مكافحة حشرات بالدمام والخبر والجبيل والخبر والاحساء والقطيف كذلك شركة رش حشرات بالدمام ومكافحة الحشرات بالخبر
    شركة مكافحة حشرات بالدمام
    شركة تنظيف خزانات بجدة الجوهرة من افضل شركات تنظيف الخزانات بجدة حيث ان تنظيف خزانات بجدة يحتاج الى مهارة فى كيفية غسيل وتنظيف الخزانات الكبيرة والصغيرة بجدة على ايدى متخصصين فى تنظيف الخزانات بجدة
    شركة تنظيف خزانات بجدة
    شركة كشف تسربات المياه بالدمام
    شركة نقل عفش واثاث


  2. شركة نقل عفش بالرياض وجدة والدمام والخبر والجبيل اولقطيف والاحساء والرياض وجدة ومكة المدينة المنورة والخرج والطائف وخميس مشيط وبجدة افضل شركة نقل عفش بجدة نعرضها مجموعة الفا لنقل العفش بمكة والخرج والقصيم والطائف وتبوك وخميس مشيط ونجران وجيزان وبريدة والمدينة المنورة وينبع افضل شركات نقل الاثاث بالجبيل والطائف وخميس مشيط وبريدة وعنيزو وابها ونجران المدينة وينبع تبوك والقصيم الخرج حفر الباطن والظهران
    شركة نقل عفش بجدة
    شركة نقل عفش بالمدينة المنورة
    شركة نقل اثاث بالرياض
    شركة نقل عفش بالدمام