Monotone (software)

Monotone (software)
monotone
Monotone-logo.png
Developer(s) The monotone team
Initial release April 6, 2003 (2003-04-06)
Stable release 1.0  (Mar 28, 2011) [+/−]
Preview release n/a  (?) [+/−]
Written in C++
Operating system Unix, Linux, BSD, Mac OS X, Windows
Available in English, Italian, Swedish, Portuguese, German, Spanish
Type Revision control
License GNU General Public License
Website monotone.ca

Monotone is an open source software tool for distributed revision control. Monotone 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.[1] Monotone is designed for distributed operation, and makes heavy use of cryptographic primitives to track file revisions (via the SHA-1 secure hash) and to authenticate user actions (via RSA cryptographic signatures).

Contents

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 (clone) 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 (clone) database is populated, subsequent actions usually proceed more rapidly. As of July 2010, 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.[2]

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. (However, as of version 0.27, it is possible to use the netsync protocol over any stream, notably including ssh connections.) Netsync has its own IANA-assigned port (4691) 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:

Drawbacks

As of January 2008, possible drawbacks of Monotone include:

  • Potential users cannot checkout (or commit) from behind a proxy (very common in corporate environments) due to non-http protocol.
  • Less popular than competing open source DVCS such as Bazaar, Git or Mercurial
  • Performance issues for certain operations (most noticeable initial pull)
  • A lack of stable graphical user interfaces. Some are underway, however, including TracMtn, a Trac plugin for history and repository browsing, and guitone, a Qt-frontend to manage workspaces and databases.

Milestones

Monotone version 0.26 introduced major changes to the internal database structures, including a new structure known by Monotone developers as a roster[3]. 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.

Implementation

Monotone is implemented in modern-dialect C++ on top of the Boost library, the Botan cryptography library, and the SQLite database library. Monotone supports customization and extension via hook functions written in the Lua programming language. The monotone build process is automated with BuildBot and includes extensive regression tests.

Monotone as Git inspiration

In April 2005, Monotone became the subject of increased interest in the FLOSS 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 (and by extension, all client-server version-control systems):[4]

Don't bother telling me about subversion. If you must, start reading up on "monotone". That seems to be the most viable alternative, but don't pester the developers so much that they don't get any work done. They are already aware of my problems ;) [4]

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.

A key issue debated[where?] 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.[5] 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.

This argument runs contrary to the perception among many software developers that cherry picking is an advanced feature that an SCM tool should strive to support. Other SCM tools, such as Darcs, are particularly strong in this area. As of 2010, both Git and Monotone have supported cherry picking for some time.

Support

Currently support for the software is available via mailing lists, IRC, and a support wiki.

Monotone users

  • Pidgin IM now uses Monotone for both Pidgin itself and libpurple[6]
  • Xaraya
  • AuroraUX
  • GENESIS
  • I2P

See also

References

External links


Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Look at other dictionaries:

  • Monotone — refers to a sound, for example speech or music, that has a single unvaried tone. Monotone or monotonicity may also refer to: Monotone (software), an open source revision control system Monotone class theorem, in measure theory Monotone… …   Wikipedia

  • Monotone — Desarrollador Nathaniel Smith, Graydon Hoare Información general Género …   Wikipedia Español

  • Monotone — Entwickler Das monotone Entwicklerteam Aktuelle Version 1.0 (26. März 2011) Betriebssystem Unix …   Deutsch Wikipedia

  • Comparison of revision control software — The following is a comparison of revision control software. The following tables includes general and technical information for notable revision control and software configuration management (SCM) software. This is an incomplete list, which may… …   Wikipedia

  • Git (software) — Infobox Software name = Git author = Linus Torvalds developer = Junio Hamano, Linus Torvalds latest release version = 1.6.0.2 [cite mailing list |mailinglist=git |author=Junio C Hamano |url=http://marc.info/?l=git m=122128644221821… …   Wikipedia

  • List of revision control software — This is a list of notable software for revision control. Distributed model In the distributed approach, each developer works directly with their own local repository, and changes are shared between repositories as a separate step. Open source *… …   Wikipedia

  • Mercurial (software) — Infobox Software name = Mercurial caption = developer = Matt Mackall latest release version = 1.0.2 latest release date = release date|2008|08|13 latest preview version = latest preview date = operating system = Unix like, Windows, Mac OS X… …   Wikipedia

  • Branching (software) — For other uses, see Branching (disambiguation). Branching, in revision control and software configuration management, is the duplication of an object under revision control (such as a source code file, or a directory tree) so that modifications… …   Wikipedia

  • Mercurial (software) — Mercurial Mercurial Développeur Matt Mackall Dernière version …   Wikipédia en Français

  • MTN — may refer to: MTN Group, a major South Africa based mobile telephone network operator active in many African and Middle Eastern countries Maritime Telecommunications Network, a mobile phone network that operates on sea vessels like cruise liners… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”