# reposurgeon - a repository surgeon

`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 `reposurgeon` 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 repositories.

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.

The `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 reposurgeon.

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.

The file `reposurgeon-git-aliases` can be appended to your `~/.gitconfig` to 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.

See `repository-editing.adoc` for complete documentation, including advice on how to troubleshoot problems and report bugs.

The main `reposurgeon` website along with the documentation in HTML files lives at www.catb.org/esr/reposurgeon/.

The files `Dockerfile`, `.dockerignore`, `.gitlab-ci.yml`, and the contents of `ci/` and `.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.