This is the Hg-Git plugin for Mercurial, adding the ability to push to and pull from a Git server repository from Mercurial. This means you can collaborate on Git based projects from Mercurial, or use a Git server as a collaboration point for a team with developers using both Git and Mercurial.
The Hg-Git plugin can convert commits/changesets losslessly from one system to another, so you can push via a Mercurial repository and another Mercurial client can pull it. In theory, the changeset IDs should not change, although this may not hold true for complex histories.
hg clone git://github.com/schacon/some-repo.git
Like with normal hg clone
, you can optionally
specify a destination directory.
$ cd mercurial-repo $ hg bookmark -r default master # so a ref gets created
To avoid specifying the repo path when you push and pull,
edit .hg/hgrc
and add:
[paths] default = git+ssh://git@github.com/schacon/some-repo.git
See the Mercurial docs for more detail on path settings.
$ hg push
This will convert all Mercurial data into Git objects and push them up to the Git server.
$ hg pull
That will pull down any commits that have been pushed to the server in the meantime and give you a new head that you can merge in.
First, make sure that you have a working C compiler on your
system. On Windows, one option is the
free Microsoft
Visual C++. (Be sure to install the 2008 version for
compatibility reasons.) On Debian-style Linux,
run apt-get install python-dev
.
Secondly, run easy_install hg-git
. If you don't
have easy_install available, you can get it as part of
Python's
setuptools
package.
Alternatively, on Windows, TortoiseHg comes with hg-git (and Dulwich), though it still needs to be enabled as shown below (or through the TortoiseHg settings).
Lastly, make sure the
following is in your ~/.hgrc
:
[extensions] hgext.bookmarks = hggit =
...and that's it!
Use this method if you'd like to install a clone of the Hg-Git repository rather than a static package, or if you'd like to install Hg-Git in a location you choose yourself.
First, install version 0.8.0 or newer of
Dulwich.
You can do
easy_install 'dulwich>=0.8.0'
if you have
setuptools
installed. Next, clone
the Hg-Git
repository
somewhere. Lastly, make the 'extensions' section in your
'~/.hgrc
' file look something like this:
[extensions] hgext.bookmarks = hggit = [path-to]/hg-git/hggit
That will enable the Hg-Git extension for you. The bookmarks section is only required prior to hg 1.7. Bookmarks will be translated to git heads when pushing.
Different versions of hg-git are known to work with different versions of Mercurial. For the most accurate info, go to the source on Heptapod, click the dropdown menu that says "branch/default", select the tag corresponding to the version you've installed, and click on the file "Makefile". There's a line that starts with "all-version-tests" which lists the versions of Mercurial known to work.
It also needs Dulwich version 0.8.0 or later; Dulwich is a pure-Python implementation of the Git file formats and protocols. There are no Git binary dependencies: you do not need to have Git installed on your system.
Source available at https://foss.heptapod.net/mercurial/hg-git. Patches preferred via email to the hg-git mailing list.