Monotone (software)
Monotone is an open source software tool for distributed revision control. It tracks revisions to files, groups sets of revisions into changesets, and tracks history across renames. The focus of the project is on integrity over performance. Monotone is designed for distributed operation, and makes heavy use of cryptographic primitives to track file revisions and to authenticate user actions.
History
Milestones
Monotone version 0.26 introduced major changes to the internal database structures, including a new structure known by Monotone developers as a roster. Monotone databases created with version 0.26 can not exchange revisions with older Monotone databases. Older databases must first be upgraded to the new format. The new netsync protocol is incompatible with earlier versions of Monotone.As Git inspiration
In April 2005, Monotone became the subject of increased interest in the FOSS community after Linus Torvalds mentioned it as a possible replacement for BitKeeper in the Linux development process. In a post on the Linux kernel mailing list, Torvalds praised Monotone and disparaged Subversion :Instead of adopting Monotone, Torvalds decided to write his own SCM system, Git. Git's design uses some ideas from Monotone, but the two projects do not share any core source code. Git has a much stronger focus on high performance, inspired by the lengthy history and demanding distributed modes of collaboration used by Torvalds and the other Linux kernel authors. Torvalds later commented on Monotone's design and performance:
A key issue debated was whether the replacement of BitKeeper should support cherry picking, whereby a tree maintainer can approve a subset of patches while rejecting others on an individual basis. Torvalds argued that this approach "results in the wrong dynamics and psychology in the system" by shifting burden to the upstream maintainers rather than forcing downstream maintainers to put more effort into keeping their trees free from garbage. He further argued that Monotone is correct in its aversion to cherry-picking as a feature, but then failed to take it far enough by not making it easy enough to "throw away" unclean working trees after their purpose is served. Torvalds also noted his perception that Monotone at that time had not achieved the performance level required by a project as large as Linux kernel development.
Design
Like GNU arch, and unlike Subversion, Monotone takes a distributed approach to version control. Monotone uses SHA-1 hashes to identify specific files or groups of files, as with Git and Mercurial, in place of linear revision numbers. Each participant maintains their own revision history, stored in a local SQLite database.Integrity
Prior to some heavy optimisation in revision 0.27, Monotone's emphasis on correctness over optimisation was often blamed for poor initial experiences. The first action of a new user is often to synchronize a large existing Monotone database, an action which often took hours for large databases, due to the extensive validation and integrity checking which Monotone performs when revisions are moved through the network. Once the initial database is populated, subsequent actions usually proceed more rapidly., there is still room for further optimisation on some rarer functions.Workflow
Monotone is especially strong in its support for a diverge/merge workflow, which it achieves in part by always allowing commit before merge.Networking
Although Monotone originally supported a variety of networking protocols for synchronizing trees, it now exclusively uses a custom protocol called netsync, which is more robust and efficient, and shares some conceptual ground with rsync and cvsup. Netsync has its own IANA-assigned port and older versions of it are supported by a Wireshark plug-in for traffic analysis. There is no separate Monotone server because any Monotone client can act as a server.Other features
Other features of Monotone include:- Good support for internationalization and localization
- Portable design, implemented in C++
- High integrity is a key design goal
- Monotone can import CVS projects.
- Signing of revisions using RSA certificates
- Easy to learn, due to a command set similar to that of CVS
- Very good at branching and merging
- Good documentation
- Very low maintenance
- Complete and comprehensive Perl library that allows you to completely control Monotone from a Perl script
Drawbacks
, possible drawbacks of Monotone include:- Potential users cannot check out from behind a proxy due to non-http protocol.
- Performance issues for certain operations