Mercurial > hg > soundsoftware-site
diff extra/fast-export/README.md @ 1544:e9e55585ebf2 feature_1136
Add fast-export
author | Chris Cannam <chris.cannam@soundsoftware.ac.uk> |
---|---|
date | Tue, 12 Jan 2016 13:39:30 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extra/fast-export/README.md Tue Jan 12 13:39:30 2016 +0000 @@ -0,0 +1,104 @@ +hg-fast-export.(sh|py) - mercurial to git converter using git-fast-import +========================================================================= + +Legal +----- + +Most hg-* scripts are licensed under the [MIT license] +(http://www.opensource.org/licenses/mit-license.php) and were written +by Rocco Rutte <pdmef@gmx.net> with hints and help from the git list and +\#mercurial on freenode. hg-reset.py is licensed under GPLv2 since it +copies some code from the mercurial sources. + +The current maintainer is Frej Drejhammar <frej.drejhammar@gmail.com>. + +Usage +----- + +Using hg-fast-export is quite simple for a mercurial repository <repo>: + +``` +mkdir repo-git # or whatever +cd repo-git +git init +hg-fast-export.sh -r <repo> +``` + +Please note that hg-fast-export does not automatically check out the +newly imported repository. You probably want to follow up the import +with a `git checkout`-command. + +Incremental imports to track hg repos is supported, too. + +Using hg-reset it is quite simple within a git repository that is +hg-fast-export'ed from mercurial: + +``` +hg-reset.sh -R <revision> +``` + +will give hints on which branches need adjustment for starting over +again. + +When a mercurial repository does not use utf-8 for encoding author +strings and commit messages the `-e <encoding>` command line option +can be used to force fast-export to convert incoming meta data from +<encoding> to utf-8. This encoding option is also applied to file names. + +In some locales Mercurial uses different encodings for commit messages +and file names. In that case, you can use `--fe <encoding>` command line +option which overrides the -e option for file names. + +As mercurial appears to be much less picky about the syntax of the +author information than git, an author mapping file can be given to +hg-fast-export to fix up malformed author strings. The file is +specified using the -A option. The file should contain lines of the +form `FromAuthor=ToAuthor`. The example authors.map below will +translate `User <garbage<user@example.com>` to `User <user@example.com>`. + +``` +-- Start of authors.map -- +User <garbage<user@example.com>=User <user@example.com> +-- End of authors.map -- +``` + +Tag and Branch Naming +--------------------- + +As Git and Mercurial have differ in what is a valid branch and tag +name the -B and -T options allow a mapping file to be specified to +rename branches and tags (respectively). The syntax of the mapping +file is the same as for the author mapping. + +Notes/Limitations +----------------- + +hg-fast-export supports multiple branches but only named branches with +exactly one head each. Otherwise commits to the tip of these heads +within the branch will get flattened into merge commits. + +As each git-fast-import run creates a new pack file, it may be +required to repack the repository quite often for incremental imports +(especially when importing a small number of changesets per +incremental import). + +The way the hg API and remote access protocol is designed it is not +possible to use hg-fast-export on remote repositories +(http/ssh). First clone the repository, then convert it. + +Design +------ + +hg-fast-export.py was designed in a way that doesn't require a 2-pass +mechanism or any prior repository analysis: if just feeds what it +finds into git-fast-import. This also implies that it heavily relies +on strictly linear ordering of changesets from hg, i.e. its +append-only storage model so that changesets hg-fast-export already +saw never get modified. + +Submitting Patches +------------------ + +Please use the issue-tracker at github +https://github.com/frej/fast-export to report bugs and submit +patches.