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, brz, darcs, mtn, bk, and RCS. There is import-only support for svn, CVS, and SCCS. In particular this tool can be used to script the production of very high-quality conversions from Subversion to any VCS with write support.


COPYINGproject license
reposurgeon-5.0.md5source tarball MD5 checksum
reposurgeon-5.0.tar.xzcompressed source tarball
README.htmlroadmap file
NEWS.htmlproject news

The project repository is at

Project statistics are available at OpenHub.

This is packaged for Debian and derivatives as: reposurgeon

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

     Major overhaul of the DSL syntax.
     Make --quiet an effective option when reading repositories.
     Added "view" command for GUI browsing of repositories.
     Fixed a deep bug in the graft and unite commands.
     Add prefix negation operator ~ for pathsets.
     Repaired a bug in CVS reference lifting.
     Removed read --use-uuid option.
     Added Content-Path and Content-Name support to msgin --create.
     Added =E selector for branch root commits.
     Added "clone" command.
     Graceful recovery from transcode errors.
     Macro argument formal change from {0}, {1}, {2}... to %{0}, %{1}, %{2}...
     Move to Go-style match references (${1}) from Python ones (\1).
     repotool initialize becomes repotool initmake.
     Tested support for reading darcs repositories.
     The ignores, add, timequake, and timeoffset commands set Q bits
     Source types of stream dumps can be deduced from ignore file names.
     Fossil import/export from checkouts is supported; --format=fossil is gone.
     Ignore pattern translation is available with "ignores --translate".
     Documentation on working with hg has been much expanded.
     Added --decode option to list and msgout comands.
     Implemented and documented X selector.


This work is funded by...

My Bronze supporters: Martin Hohenberg, Jae Yang, Daniel Garber, Kyle Burkholder, Mike Nichols, Mark Ping, 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, John Carmack, Xingyu Wang, Jane Tang, Steven Evans, Jan Roudaut, Hsueh Sung, Ken LaCrosse, taishi28012, John Simpson, Jerod Tufte, Paul Abbott, Stan Witherspoon, Donald Greer, Gratiela Chergu, Michael Ciagala, Dale Carstensen, Chip Davis, Liudmilla Karukina, Jim McCloskey, Dewey Sasser, Hal Hildebrand, Connor Wood, Ken Kennedy, darrin, Mark Gardner, William Christensen, Malcolm Ocean, Rod Davenport, Nodarius Darjania, Cheryl Evry, Wenfeng Liang, Irving Rivas, Bill Soistman, ReallyBored, Άρης Δάσος, Ron Lauzon, TheFred, Paul Theodoropolous, Doug Phillips, Les Vogel, Matt Pollard, Andres Cordova, Umgeher Torgersen, Syeed Ali, Raghu Veer Dendukuri, Perry The Cynic, Gustav A Wirth, Mitchell Bryant, Matt Krueger, Jim Mog, John D. Taylor.

My Institutional supporters: Jason Azze and the DEVOPS team at his $DAYJOB, Christoph Happle, Symmetry Investments, Willam Duff, Mark Atwood, Caleb LaVergne, zariah mccall.

Become a Patreon patron!

Or contribute via SubscribeStar.