reposurgeon enables risky operations that version-control systems
don’t want to let you do, such as (a) editing past comments and metadata,
(b) excising commits, (c) coalescing commits, and (d) removing files and
subtrees from repo history. The original motivation for
was to clean up artifacts created by repository conversions.
reposurgeon is also useful for scripting very high-quality
conversions from Subversion. It is better than
git-svn at tag
lifting, automatically cleaning up
cvs2svn conversion artifacts,
dealing with nonstandard repository layouts, recognizing branch
merges, handling mixed-branch commits, and generally at coping with
Subversion’s many odd corner cases. Normally Subversion repos should
be analyzed at a rate of upwards of ten thousand commits per minute,
though that rate can fall significantly on extremely large
An auxiliary program,
repotool, performs various useful
operations such as checkouts and tag listing in a VCS-independent
manner. Yet another,
repomapper, assists in automatically preparing
contributor maps of CVS and SVN repositories.
repocutter program is available for some specialized operations on
Subversion dumpfiles; it may be useful in extracting portions of
particularly gnarly Subversion repositories for conversion with
This distribution supports a generic conversion workflow using these tools, and includes a long-form manual "Repository Editing and Conversion With Reposurgeon" (in the file repository-editing.html) that describes how to use it.
reposurgeon-git-aliases can be appended to your
support working directly with action stamps in git.
Finally, an Emacs Lisp mode with useful functions for editing large comment message-boxes is included.
See INSTALL.adoc for instructions on building the software and its prerequisites.
repository-editing.adoc for complete documentation, including
advice on how to troubleshoot problems and report bugs.
reposurgeon website along with the documentation in HTML files
lives at www.catb.org/esr/reposurgeon/.
.gitlab-ci.yml, and the contents
.github/ are not distributed; they are configuration for test
builds on GitLab and GitHub CI machinery.
If you find this code useful or amusing, please support me on Patreon.