Monotone — distributed version control system, using same concepts like other distributed VCS, like GNU Arch, Darcs and other. Work with Monotone from Emacs implemented by monotone.el package, that come together with Monotone distribution. There is also support for Monotone in DVC package, that described in the section Work with DVC.
You can find monotone.el in Monotone's distribution. It located in
contrib directory of
distribution. This package was tested with GNU Emacs 22.1, but it should works with other
Emacs's versions. To work with it you need to place file to location, where Emacs find
it, and add following commands to initialization file:
(require 'monotone) (monotone-set-vc-prefix-key "\C-xv") (setq monotone-passwd-remember t)
First line of code loads package, second sets prefix for key bindings, and third — force package to remember passwords entered by user1
Commands, implemented by package, are accessible via menu, key bindings and by their
direct call via
M-x (all implemented commands have prefix
monotone). By default prefix
for key bindings is not defined, so you need to set it during package initialization.
This could be done with
monotone-set-vc-prefix-key function, and in the example above, it
C-x v, and in the text below, this prefix always will used. All commands are
executed in the buffer called
Registration of file in repository is performed with
monotone-vc-register command (
i). You can commit changes with
monotone-vc-commit command, that bound to
C-x v q or
Work with remote repositories is performed with following commands: the
C-x v p) — fetches changes from server, the
monotone-push command (
C-x v P) —
push changes to server, and the
monotone-sync command sync current repository with remote
User can obtain list changes for file with
monotone-vc-diff command, that bound to
C-x v =. If you pass a numerical argument to this command, then changes will
shown for repository, instead of single file.
There are several commands to retrieve information about registered objects. The main
C-x v s), that outputs information about current branch.
monotone-vc-print-log command (
C-x v l) you can obtain log for current file (and
if you give a numerical argument, then log will obtained for whole project). You can also
retrieve identifier of current object with
monotone-grab-id command (
C-x v 6) — this
command stores object's identifier in the kill ring, from which you can paste with
standard Emacs commands (for example, with
There is also one general purpose command —
monotone (it bound to
C-x v x), that allows
to execute any command of Monotone, entered in the mini-buffer.
You can customize package by setting some variables. One of these variables, we already
used — the
monotone-passwd-remember variable, that caches passwords, entered by user. If
this variable has non-
nil value, then all passwords will be stored in
monotone-passwd-alist variable. There is also
monotone-program variable, that keeps name
of the Monotone's executable.
Address and remote server, and names of collections user can set in
monotone-collection variables. Already used servers and collections are stored in
There are also other variables, that are usually not changed by user, but it's better to
know what information they keep. If you set value of
monotone-cmd-show variable to
then results of execution of Monotone commands will shown. With
monotone-program-args-always variable you can set command-line options, that will always
passed to Monotone. If variable
monotone-msg has non-
nil value, then all messages from
monotone.el will printed to the
*Messages* buffer (this is very useful for debugging).
There are also two hooks, that allow to perform fine-grained customization —
monotone-commit-mode-hook. First of them will called, when
data will printed, and second, when buffer for entering of commit messages will created.
1. Passwords are stored only for the current sessions, and if you restart Emacs, then package will again ask you about passwords.
Last change: 05.03.2013 16:54