The mr(1) command can checkout, update, or perform other actions on a set of repositories as if they were one combined respository. It supports any combination of subversion, git, cvs, mercurial, bzr, darcs, cvs, vcsh, fossil and veracity repositories, and support for other revision control systems can easily be added. (There are extensions adding support for unison and git-svn.)

It is extremely configurable via simple shell scripting. Some examples of things it can do include:

  • Update a repository no more frequently than once every twelve hours.
  • Run an arbitrary command before committing to a repository.
  • When updating a git repository, pull from two different upstreams and merge the two together.
  • Run several repository updates in parallel, greatly speeding up the update process.
  • Remember actions that failed due to a laptop being offline, so they can be retried when it comes back online.

Get mr

mr is available in git at git://git.kitenet.net/mr, or in gitweb. It's in all recent versions of Debian. If you want a tarball, the best place to get one is from http://packages.debian.org/unstable/source/mr. Unofficial RPMs are provided by Douglas E. Warner. It's also in Mac Homebrew.

Discuss mr

The VCS-Home group has a mailing list that is probably the best place to discuss mr.

Bugs should be filed to the Debian BTS.

News

version 1.15

mr 1.15 released with these changes

  • Added lib/repo, for support for repo (as used in Android) Closes: #705652 Thanks, Peter Eisentraut
  • Better cvs status. Closes: #694037 Thanks, Paul Wise
Posted
version 0.51

mr 0.51 released with these changes

  • Fix display when absolute directories are configured in mrconfig.
  • Add push to manpage synopsis. Closes: #603029
  • Do not return a nonzero exit status when all repositories were skipped. Closes: #607287
Posted
version 0.50

mr 0.50 released with these changes

  • Now supports the Fossil VCS. (Thanks, Jimmy Tang)
  • Added fixups hook, which can be used to run a command after a repository is checked out or updated. Closes: #590868
  • Added support for arbitrary pre and post hooks for all defined mr commands. For example, pre_commit is run before all commits; post_update is run after all updates. Closes: #481341
Posted