#pragma section-numbers 2 = git = Operate on Git repositories. <> == Status == '''This extension is distributed with Mercurial as ''experimental''.''' ''Author: '' ''Augie Fackler'' == Overview == This extension grants Mercurial the ability to operate on Git repositories. Requires pygit2. == Usage == === Installation === Install pygit2 into the Python used by your Mercurial: {{{$(hg debuginstall -T'{pythonexe}') -m pip install --user pygit2}}} === Configuration === Enable the extension: {{{ [extensions] git = }}} === Use === In the Mercurial 5.4 release: * {{{git(1)}}} must be used for all network operations (e.g. clone, push, pull, incoming, outgoing). * Only local branches are presented in Hg (as bookmarks). Use {{{git branch -t remotes/origin/branchname}}} to see more upstream branches as bookmarks. * Repositories with octopus merges are not supported. * Shallow clones probably don't work. Example: {{{ git clone git://... hg init --git hg status hg log hg bookmarks hg diff hg add hg commit git push git pull ... }}} == Alternatives == === HgGit === The HgGit extension, which is installed separately from Mercurial, is more mature and more widely used. It converts a git repository into a native Mercurial repository (including incremental imports). As a consequence: * each commit has a Mercurial hash and a separate Git hash (accessible using the "gitnode" revset/template keyword). * the converted repository is roughly twice as large. === Convert === The ConvertExtension, packaged with Mercurial, has Git support.