A tool for editing version-control repository history.

reposurgeon enables risky operations that version-control systems don't want to let you do, such as editing past comments and metadata and removing commits. It works with any version control system that can export and import git fast-import streams, including git, hg, fossil, bzr, CVS, RCS, bk, and src. It can also read Subversion dump files directly and can thus be used to script production of very high-quality conversions from Subversion to any supported DVCS.


TODOto-do file
reposurgeon-3.43.tar.xzcompressed source tarball
NEWSproject news
COPYINGproject license
reposurgeon-3.43.md5source tarball MD5 checksum
features.htmlHow reposurgeon wins
dvcs-migration-guide.htmlDVCS migration HOWTO
repodiffer.htmlHTML rendering of repodiffer.xml
repocutter.htmlHTML rendering of repocutter.xml
reporting-bugs.htmlHow to report bugs
reposurgeon.htmlHTML rendering of reposurgeon.xml

The project repository is at

Project statistics are available at OpenHub.

There is a project IRC channel.

If you appreciate this code (and especially if you make money by using it) please support me on Patreon.

Recent Changes

3.43: 2017-12-12::
     Fix bugs in squash --pushback, mailbox roundtripping, filter --shell.
     Resychronize embedded help with XML docs.
     Added 'dedup' command, to deduplicate blobs in the selection set.
     Bug fix: exporter output now only captures stdout, not stderr.
     New 'changelogs' command for extracting author info from ChangeLog files.
     New 'incorporate' command digests tarballs into commits.
     Squashes now preserve comment content of squashed commits.
     New 'timequake' and 'timebump' commands for uniquifying timestamps.
     There is now a 'reset create' command.
     Fix "drop" crash.
     Fix "filter --shell" never invoking shell command.
     Fix "mailbox_in" crash when mailbox adds an author.
     Fix event selection expression parser hanging forever on mistyped "..".
     Fix "squash --pushback" utter brokeness when handed multiple events.
     Fix mailbox not roundtripping correctly (added newline and munged date).
     Fix "squash" not always garbage-collecting unreferenced blobs.
     Fix "write" crashing with "prefer svn" when parent not in selection.
     Add "attribution" and "reorder" commands.
     Fix "reset" crashes and make "reset" respect selection.
     Fix buggy behavior on 'unite' on 3 or more repositories.
     The "timing" command reports free memory if the psutil module is installed.
     Repository reading now has an OOM guard - will bail out on low memory.


This work is funded by...

My Bronze supporters on Patreon: Martin Hohenberg, Jae Yang, Daniel Garber, Kyle Burkholder, Mike Nichols, Mark Ping, John D. Bell, Tom Taylor, Arnold F. Williams, George Brower, Michael Nygard, Brendan Long, Sven Dowideit, Dave Witten, Jonathan Cast, James Cronin, David L. Jessup, Christopher Chang, Killer Delicious, Jacob Lyles, Neil Anuskiewicz, Mordant, Clemens Ladisch, Wojciech Woytniak, Masa Bando.

My Institutional supporters on Patreon: Jason Azze and the DEVOPS team at his $DAYJOB.