30.07.2013 Views

Source Control Research - Bitbucket

Source Control Research - Bitbucket

Source Control Research - Bitbucket

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Source</strong> <strong>Control</strong> <strong>Research</strong><br />

Articles related to source control.<br />

PDF generated using the open source mwlib toolkit. See http://code.pediapress.com/ for more information.<br />

PDF generated at: Thu, 21 Oct 2010 00:22:08 UTC


Contents<br />

Articles<br />

Mercurial 1<br />

Distributed revision control 5<br />

Git (software) 9<br />

BitKeeper 20<br />

ikiwiki 23<br />

Subversion (software) 25<br />

List of revision control software 33<br />

Comparison of revision control software 36<br />

Revision control 53<br />

References<br />

Article <strong>Source</strong>s and Contributors 59<br />

Image <strong>Source</strong>s, Licenses and Contributors 61<br />

Article Licenses<br />

License 62


Mercurial 1<br />

Mercurial<br />

Developer(s) Matt Mackall<br />

Initial release<br />

Stable release<br />

April 19, 2005 [1]<br />

1.6.4 [2] / October 1, 2010<br />

Written in Python and C<br />

Operating system Unix-like, Windows, Mac OS X<br />

Type Revision control<br />

License GNU GPL<br />

Website<br />

mercurial.selenic.com [3]<br />

Mercurial is a cross-platform, distributed revision control tool for software developers. It is mainly implemented<br />

using the Python programming language, but includes a binary diff implementation written in C. Mercurial was<br />

initially written to run on Linux. It has been ported to Windows, Mac OS X, and most Unix-like systems. Mercurial<br />

is primarily a command line program but graphical user interface extensions are available. All of Mercurial's<br />

operations are invoked as keyword options to its driver program hg, a reference to the chemical symbol of the<br />

element mercury.<br />

Mercurial's major design goals include high performance and scalability, decentralized, fully distributed<br />

collaborative development, robust handling of both plain text and binary files, and advanced branching and merging<br />

capabilities, while remaining conceptually simple. [4] It includes an integrated web interface.<br />

The creator and lead developer of Mercurial is Matt Mackall. Released under the terms of the GNU General Public<br />

License (version 2 or any later version), Mercurial is free software.<br />

Technical information<br />

Mercurial uses SHA-1 hashes to identify revisions. For repository access via a network, Mercurial uses an<br />

HTTP-based protocol that seeks to reduce round-trip requests, new connections and data transferred. Mercurial can<br />

also work over ssh where the protocol is very similar to the HTTP-based protocol.<br />

Documentation<br />

A comprehensive reference manual, Mercurial: The Definitive Guide, [5] has been written by Bryan O'Sullivan. It is<br />

available as both a physical book and as a free online reference. The manual is freely available under the terms of the<br />

Open Publication License.


Mercurial 2<br />

History<br />

Mackall first announced Mercurial on April 19, 2005. [1] The impetus for this was the announcement earlier that<br />

month by Bitmover that they were withdrawing the free version of BitKeeper.<br />

BitKeeper had been used for the version control requirements of the Linux kernel project. Mackall decided to write a<br />

distributed version control system as a replacement for use with the Linux kernel. This project started a few days<br />

after another project called Git, started by Linus Torvalds with similar aims. [6]<br />

The Linux kernel project decided to use Git rather than Mercurial, but Mercurial is now used by many other projects<br />

(see below).<br />

Related software<br />

• GUI interfaces for Mercurial include:<br />

Hgk (tcl/tk)<br />

TortoiseHg<br />

Murky [8]<br />

This is implemented as a Mercurial extension, and is part of the<br />

official version. This viewer displays the directed acyclic graph<br />

of the changesets of a Mercurial repository. This viewer can be<br />

invoked via the command 'hg view', if the extension is enabled.<br />

hgk was originally based on a similar tool for git called gitk.<br />

There is an hgk replacement named hgview [7] that is written in<br />

pure python and provides both gtk and qt interfaces.<br />

Screenshot of hgk in action<br />

TortoiseHg is a shell extension and a series of applications for the Mercurial distributed revision control<br />

system. It is available for Windows Explorer and GNOME Nautilus.<br />

A MacOS X GUI in Objective-C 2.0, runs on Mac OS X 10.5 and later.<br />

MacMercurial [9]<br />

MacHg [10]<br />

A MacOS X GUI '"not intended to completely replace command line use of Mercurial, only to ease the most<br />

common Mercurial operations," for Mac OS X 10.4 or later.<br />

MacHg is a free and fast multi-threaded front end for Mac OS X 10.6 and later.<br />

• Related tools for merging include (h)gct (Qt) and Meld [11] .<br />

• The convert extension allows import from CVS, Darcs, git, GNU Arch, Monotone, Perforce, Bazaar and<br />

Subversion repositories.<br />

• NetBeans supports Mercurial from Version 6.<br />

• Eclipse supports Mercurial with the MercurialEclipse [12] plugins.<br />

• HgSccPackage [13] - Mercurial <strong>Source</strong> <strong>Control</strong> Plugin for Microsoft Visual Studio 2008/2010<br />

• VisualHG [14] - Mercurial <strong>Source</strong> <strong>Control</strong> Plugin for Microsoft Visual Studio 2005, 2008 and 2010


Mercurial 3<br />

Adoption<br />

<strong>Source</strong> code hosting<br />

The following websites provide free source code hosting for Mercurial repositories:<br />

• <strong>Bitbucket</strong><br />

• Google Code [15]<br />

• Project Kenai by Oracle<br />

• <strong>Source</strong>Forge<br />

• Assembla<br />

• GNU Savannah<br />

• Alioth by Debian<br />

• BerliOS<br />

• CodePlex [16]<br />

• Kiln by Fog Creek Software<br />

• Others listed in the Mercurial wiki [17]<br />

Projects using Mercurial<br />

Some projects using the Mercurial distributed RCS: [18]<br />

• Mozilla [19]<br />

• OpenJDK [20]<br />

• OpenSolaris [21]<br />

• OpenOffice.org [22]<br />

• Symbian OS [23]<br />

• The Xen hypervisor [24]<br />

• Adblock Plus<br />

• Adium<br />

• Audacious<br />

• Coin3D [25]<br />

• CubicWeb<br />

• Dovecot IMAP server [26]<br />

• GeeXboX<br />

• RabbitMQ<br />

• Go (programming language)<br />

• GNU Octave<br />

• GNU Multi-Precision Library<br />

• Growl<br />

• LEMON<br />

• LinuxTV/Video4Linux<br />

• LuxRender 3D Render Engine<br />

• Mercurial<br />

• MoinMoin wiki software<br />

• Mutt (email client)<br />

• Netbeans [27]<br />

• Nuxeo<br />

• Ogre3D [28]<br />

• SAGE


Mercurial 4<br />

• Vim<br />

• Lugaru HD [29]<br />

• Openbravo<br />

• Tryton<br />

The developers of the Python programming language have announced that they will transition from Subversion to<br />

Mercurial. However, as of September 2009 the timeframe is not fixed because the transition team is waiting for<br />

[30] [31]<br />

hgsubversion to develop.<br />

See also<br />

• Distributed revision control<br />

• List of revision control software<br />

• Comparison of revision control software<br />

References<br />

[1] Mackall, Matt (2005-04-20). "Mercurial v0.1 - a minimal scalable distributed SCM" (http:/ / www. ussg. iu. edu/ hypermail/ linux/ kernel/<br />

0504. 2/ 0670. html). Linux kernel mailing list. .<br />

[2] Mercurial 1.6.4 - (http:/ / mercurial. selenic. com/ wiki/ WhatsNew#A1. 6. 4_. 282010-10-01. 29)<br />

[3] http:/ / mercurial. selenic. com/<br />

[4] Matt Mackall, Towards a Better SCM: Revlog and Mercurial (http:/ / selenic. com/ mercurial/ wiki/ index. cgi/<br />

Presentations?action=AttachFile& do=get& target=ols-mercurial-paper. pdf), Ottawa Linux Symposium Proceedings, 2006.<br />

[5] Bryan O'Sullivan (2007-01-01). Mercurial: The Definitive Guide (http:/ / hgbook. red-bean. com/ ). .<br />

[6] Mackall, Matt (2005-04-29). "Re: Mercurial 0.4b vs git patchbomb benchmark" (http:/ / lkml. indiana. edu/ hypermail/ linux/ kernel/ 0504. 3/<br />

1404. html). Linux kernel mailing list. .<br />

[7] http:/ / www. logilab. org/ project/ name/ hgview<br />

[8] http:/ / bitbucket. org/ snej/ murky/ wiki/ Home<br />

[9] http:/ / www. jwwalker. com/ pages/ macmerc. html<br />

[10] http:/ / jasonfharris. com/ machg/<br />

[11] http:/ / meld. sourceforge. net/<br />

[12] http:/ / www. javaforge. com/ project/ HGE<br />

[13] http:/ / bitbucket. org/ zzsergant/ hgsccpackage/<br />

[14] http:/ / visualhg. codeplex. com/<br />

[15] "Google Code Blog: Mercurial Now Available to All Open <strong>Source</strong> Projects" (http:/ / google-code-updates. blogspot. com/ 2009/ 05/<br />

mercurial-now-available-to-all-open. html). 2009-05-28. .<br />

[16] "CodePlex Weblog: CodePlex now supporting native Mercurial" (http:/ / blogs. msdn. com/ codeplex/ archive/ 2010/ 01/ 22/<br />

codeplex-now-supporting-native-mercurial. aspx). 2010-01-22. .<br />

[17] http:/ / mercurial. selenic. com/ wiki/ MercurialHosting<br />

[18] Some projects that use Mercurial (http:/ / selenic. com/ mercurial/ wiki/ index. cgi/ ProjectsUsingMercurial)<br />

[19] J. Paul Reed (2007-04-12). "Version <strong>Control</strong> System Shootout Redux Redux" (http:/ / weblogs. mozillazine. org/ preed/ 2007/ 04/<br />

version_control_system_shootou_1. html). .<br />

[20] James Gosling. Interview with Robert Eckstein. James Gosling on Open Sourcing Sun's Java Platform Implementations, Part 1 (http:/ / java.<br />

sun. com/ developer/ technicalArticles/ Interviews/ gosling_os1_qa. html). October 2006.<br />

[21] "OpenSolaris SCM Project History" (http:/ / opensolaris. org/ os/ community/ tools/ scm/ history/ ). 2006-10-05. .<br />

[22] "OpenOffice.org development switches to Mercurial" (http:/ / blogs. sun. com/ GullFOSS/ entry/<br />

openoffice_org_development_switches_to). 2009-10-15. .<br />

[23] David Wood (2009-04-06). "We decided in the end to use Mercurial rather than Git." (http:/ / blog. symbian. org/ 2009/ 04/ 06/<br />

collaboration-at-the-heart/ #comment-789). . Retrieved 2009-05-07.<br />

[24] Ian Pratt (2005-07-01). "mercurial now live" (http:/ / lists. xensource. com/ archives/ html/ xen-devel/ 2005-07/ msg00003. html). Xen-devel<br />

mailing list. .<br />

[25] "<strong>Source</strong> code repositories migrated from Subversion to Mercurial" (http:/ / www. coin3d. org/ coin3d_news/<br />

source-code-repositories-migrated-from-subversion-to-mercurial). 2010-02-27. .<br />

[26] Timo Sirainen (2007-05-19). "CVS to Mercurial switch" (http:/ / www. dovecot. org/ list/ dovecot-news/ 2007-May/ 000044. html).<br />

Dovecot-news mailing list. .<br />

[27] "Switch to hg.netbeans.org completed" (http:/ / www. netbeans. org/ servlets/ ReadMsg?list=nbdev& msgNo=40342). January 2008. .<br />

[28] "Mercurial « OGRE – Open <strong>Source</strong> 3D Graphics Engine" (http:/ / www. ogre3d. org/ developers/ mercurial). 2010-04-04. .


Mercurial 5<br />

[29] Ryan C. Gordon (2010-05-11). "Lugaru goes open source!" (http:/ / icculus. org/ news/ news. php?id=4590). .<br />

[30] Guido van Rossum (2009-03-30). "And the winner is..." (http:/ / mail. python. org/ pipermail/ python-dev/ 2009-March/ 087931. html).<br />

Python-Dev mailing list. .<br />

[31] Python PEP 385 (http:/ / www. python. org/ dev/ peps/ pep-0385/ #timeline) with Timeline TBD (As of September 2009)<br />

External links<br />

• Official Mercurial Project Wiki (http:/ / mercurial. selenic. com/ )<br />

• Unofficial Mercurial Home Page (http:/ / hg-scm. org/ )<br />

• Mercurial: The Definitive Guide (http:/ / hgbook. red-bean. com/ ) a book by Bryan O'Sullivan published in 2009<br />

by O'Reilly and freely available online<br />

• Mercurial: an alternative to git (http:/ / lwn. net/ Articles/ 151624/ ) from LWN.net<br />

• An example-based Mercurial tutorial (http:/ / jemander. se/ MercurialByExample. pdf) covering both basic and<br />

advanced use<br />

• Mercurial for TeamWare users (http:/ / genunix. org/ wiki/ index. php/ Mercurial_for_TeamWare_users)<br />

• Google TechTalk on Mercurial (http:/ / video. google. com/ videoplay?docid=-7724296011317502612)<br />

• Subversion or CVS, Bazaar or Mercurial? Four open source version control systems compared (http:/ / javaworld.<br />

com/ javaworld/ jw-09-2007/ jw-09-versioncontrol. html?page=1)<br />

• HgEclipse (http:/ / javaforge. com/ project/ HGE) is an open source plugin that supports Mercurial within the<br />

Eclipse IDE.<br />

• Joel Spolsky's Mercurial tutorial (http:/ / hginit. com/ )<br />

Distributed revision control<br />

Distributed revision control (or Distributed Version <strong>Control</strong> (Systems) (DVCS), or Decentralized Version<br />

<strong>Control</strong> (Systems)) is a system for software revision control. The system allows individual developers to work on<br />

code without needing to be connected to a central network.<br />

Distributed vs. centralized<br />

Distributed revision control (DRCS) takes a peer-to-peer approach, as opposed to the client-server approach of<br />

centralized systems. Rather than a single, central repository on which clients synchronize, each peer's working copy<br />

of the codebase is a bona-fide repository. [1] Distributed revision control conducts synchronization by exchanging<br />

patches (change-sets) from peer to peer. This results in some important differences from a centralized system:<br />

• No canonical, reference copy of the codebase exists by default; only working copies.<br />

• Common operations (such as commits, viewing history, and reverting changes) are fast, because there is no need<br />

to communicate with a central server. [2]<br />

Rather, communication is only necessary when pushing or pulling changes to or from other peers.<br />

• Each working copy effectively functions as a remote backup of the codebase and of its change-history, providing<br />

natural protection against data loss. [2]<br />

Other differences are as follows:<br />

• There may be many "central" repositories.<br />

• Code from disparate repositories are merged based on a web of trust, i.e., historical merit or quality of changes.<br />

• Lieutenants are project members who have the power to dynamically decide which branches to merge.<br />

• Network is not involved in most operations.<br />

• A separate set of "sync" operations are available for committing or receiving changes with remote repositories.


Distributed revision control 6<br />

DVCS proponents point to several advantages of distributed version control systems over the traditional centralised<br />

model:<br />

• Allows users to work productively even when not connected to a network<br />

• Makes most operations much faster since no network is involved<br />

• Allows participation in projects without requiring permissions from project authorities, and thus arguably better<br />

fosters culture of meritocracy instead of requiring "committer" status<br />

• Allows private work, so users can use their revision control system even for early drafts they do not want to<br />

publish<br />

• Avoids relying on a single physical machine as a single point of failure.<br />

• Still permits centralized control of the "release version" of the project<br />

Software development author Joel Spolsky describes distributed version control as "possibly the biggest advance in<br />

software development technology in the [past] ten years." [3]<br />

As a disadvantage of DVCS, one could note that initial cloning of a repository is slower compared to centralized<br />

checkout, because all branches and revision history are copied. This may be relevant if access speed is low and the<br />

project is large enough. For instance, the size of the cloned git repository (all history, branches, tags, etc.) for the<br />

Linux kernel is approximately the size of the checked-out uncompressed HEAD, whereas the equivalent checkout of<br />

a single branch in a centralized checkout would be the compressed size of the contents of HEAD (except without any<br />

history, branches, tags, etc.).<br />

Systems<br />

Open systems<br />

An "open system" of distributed revision control is characterized by its support for independent branches, and its<br />

heavy reliance on merge operations. Its general characteristics include:<br />

• Every working copy is effectively a branch.<br />

• The system implements each branch as a working copy, with merges conducted by ordinary patch exchange, from<br />

branch to branch.<br />

• Code forking therefore occurs more readily, where desired, because every working copy is a potential fork. (By<br />

the same token, undesirable forks are easier to mend because, if the dispute can be resolved, re-merging the code<br />

is easy.)<br />

• It may be possible to "cherry-pick" single changes, selectively pulling them from peer to peer.<br />

• New peers can freely join, without applying for access to a server.<br />

One of the first open systems, BitKeeper, served in the development of the Linux kernel. When the makers of<br />

BitKeeper decided in 2005 to restrict its licensing, [4] Linux developers looked for a free replacement.<br />

As of 2010, common open systems in free use include:<br />

• Bazaar, as of 2008 used by Ubuntu [5] and MySQL [6]<br />

• Darcs<br />

• Git, created by Linus Torvalds, influenced by BitKeeper and Monotone, aiming at very high performance,<br />

currently used for the Linux kernel, the GNOME desktop environment, X.org, Perl, DragonFlyBSD and under<br />

investigation by KDE [7]<br />

• Mercurial, created with same goals and at about the same time as Git, currently used by the Mozilla project,<br />

NetBeans, GoogleCode and OpenJDK (as well as other open source Oracle projects)<br />

• Monotone<br />

• SVK<br />

For a full list, see the comparison of revision control software.


Distributed revision control 7<br />

Replicated systems<br />

A replicated system of distributed revision control depends on a replicated database. A check-in is equivalent to a<br />

distributed commit. Successful commits create a single baseline, which reduces the need for merges. An example of<br />

a replicated distributed system is Code Co-op.<br />

Work model<br />

The distributed model is generally better suited for large projects with partly independent developers, such as the<br />

Linux kernel project, because developers can work independently and submit their changes for merge (or rejection).<br />

In the centralized model, developers should serialize their work, or they may have problems with different versions.<br />

History<br />

First generation open-source DVCSes include Arch and Monotone. The second generation was initiated by the<br />

arrival of Darcs, followed by a host of others. Among them, Mercurial and Git were created as potential<br />

replacements for BitKeeper when it was pulled from free use by the Linux kernel project by its publisher. Bazaar<br />

followed not long after.<br />

Before these, closed source DVCSes such as Sun WorkShop TeamWare (which inspired BitKeeper) were widely<br />

used in enterprise settings.<br />

Future<br />

Some natively centralized systems are starting to grow distributed features. For example, Subversion is able to do<br />

many operations with no network. [8] It may become more difficult to separate natively distributed vs centralized<br />

systems.<br />

There are many tools that rely on version control, such as wikis, file systems, and text editors. Some are starting to<br />

adopt DVCS features, and even integrate with them, for example the Gazest wiki [9] , ikiwiki.<br />

See also<br />

• Revision control<br />

• List of revision control software<br />

• Comparison of revision control software<br />

• Category:Software using distributed revision control<br />

References<br />

[1] Wheeler, David. "Comments on Open <strong>Source</strong> Software / Free Software (OSS/FS) Software Configuration Management (SCM) Systems"<br />

(http:/ / www. dwheeler. com/ essays/ scm. html). . Retrieved May 8, 2007.<br />

[2] O'Sullivan, Bryan. "Distributed revision control with Mercurial" (http:/ / hgbook. red-bean. com/ hgbook. html). . Retrieved July 13, 2007.<br />

[3] Spolsky, Joel (2010-03-17). "Distributed Version <strong>Control</strong> is here to stay, baby" (http:/ / joelonsoftware. com/ items/ 2010/ 03/ 17. html). Joel<br />

on Software. . Retrieved 2010-06-18.<br />

[4] "Bitmover ends free Bitkeeper, replacement sought for managing Linux kernel code" (http:/ / en. wikinews. org/ wiki/<br />

Bitmover_ends_free_Bitkeeper,_replacement_sought_for_managing_Linux_kernel_code). Wikinews. April 7, 2005. .<br />

[5] "Ubuntu in Launchpad" (http:/ / launchpad. net/ ubuntu). Canonical Ltd. . Retrieved 2008-10-21.<br />

[6] Arnö, Kaj (2008-06-19). "Version <strong>Control</strong>: Thanks, BitKeeper - Welcome, Bazaar" (http:/ / blogs. mysql. com/ kaj/ 2008/ 06/ 19/<br />

version-control-thanks-bitkeeper-welcome-bazaar/ ). . Retrieved 2008-06-19.<br />

[7] "Getting Started/<strong>Source</strong>s/Amarok Git Tutorial" (http:/ / techbase. kde. org/ Getting_Started/ <strong>Source</strong>s/ KDE_git-tutorial). KDE TechBase.<br />

KDE. August 25, 2009. . Retrieved October 9, 2009. "Amarok is now developed in a Git repository instead of SVN. This was done to help get<br />

into place all the needed infrastructure to convert all of KDE, including documentation."<br />

[8] http:/ / osdir. com/ Article203. phtml<br />

[9] http:/ / ygingras. net/ gazest


Distributed revision control 8<br />

External links<br />

• Essay on various revision control systems (http:/ / www. dwheeler. com/ essays/ scm. html), especially the section<br />

"Centralized vs. Decentralized SCM"<br />

• Linus Torvalds email describing git (DVCS) to KDE developers (http:/ / lwn. net/ Articles/ 246381/ )<br />

• Video of a talk Linus Torvalds gave about Git (http:/ / www. youtube. com/ watch?v=4XpnKHJAok8)<br />

• Bryan O'Sullivan video on Mercurial (http:/ / video. google. com/ videoplay?docid=-7724296011317502612)<br />

• Ben Collins-Sussman (http:/ / blog. red-bean. com/ sussman/ ?p=20) (one of Subversion's authors) article on "The<br />

Risks of Distributed Version <strong>Control</strong>"<br />

• Distributed Version <strong>Control</strong> Systems - Why and How (http:/ / people. ubuntu. com/ ~ianc/ papers/<br />

dvcs-why-and-how. xhtml) by Ian Clatworthy, Bazaar/Canonical<br />

• Software Development and Version <strong>Control</strong> systems (http:/ / www. scribd. com/ doc/ 19815002/<br />

Version-<strong>Control</strong>-Systems-Emphasis-on-distributed-Bzr-Hg-Git) plus handouts (http:/ / www. scribd. com/ doc/<br />

19815427/ Version-<strong>Control</strong>-Systems-Emphasis-on-distributed-Bzr-Hg-Git-Handouts). Emphasis on Distributed<br />

Version <strong>Control</strong> Systems (DVCS) by Jari Aalto<br />

• Introduction to distributed version control systems (http:/ / www. ibm. com/ developerworks/ aix/ library/<br />

au-dist_ver_control) - IBM Developer Works article


Git (software) 9<br />

Git (software)<br />

Original author(s) Linus Torvalds<br />

Developer(s) Junio Hamano, Linus Torvalds<br />

Stable release<br />

Preview release<br />

Written in<br />

Operating system POSIX<br />

1.7.3.1 [1] (September 29, 2010) [2] [ +/− [1]<br />

]<br />

1.7.3.rc2 [3] (September 15, 2010) [4] [ +/− [5]<br />

]<br />

C, Bourne Shell, Perl [6]<br />

Type Revision control<br />

License GNU General Public License v2<br />

Website http:/ / git-scm. com/<br />

Git is a distributed revision control system with an emphasis on speed. Git was initially designed and developed by<br />

Linus Torvalds for Linux kernel development.<br />

Every Git working directory is a full-fledged repository with complete history and full revision tracking capabilities,<br />

not dependent on network access or a central server.<br />

Git's current software maintenance is overseen by Junio Hamano. Git is free software distributed under the terms of<br />

the GNU General Public License version 2.<br />

Name<br />

Linus Torvalds has quipped about the name "git", which is British English slang for a stupid or unpleasant person: [7]<br />

[8] [9]<br />

"I'm an egotistical [sic] bastard, and I name all my projects after myself. First Linux, now git."<br />

The official Git wiki also gives a number of alternative explanations and backronyms for the name, including<br />

"Global Information Tracker". [8]<br />

Early history<br />

Git development began after many Linux kernel developers chose to give up access to the proprietary BitKeeper<br />

system. [10] The ability to use BitKeeper free of charge had been withdrawn by the copyright holder Larry McVoy<br />

after he claimed Andrew Tridgell had reverse engineered the BitKeeper protocols. Some alleged that Tridgell<br />

violated the BitKeeper license, but at Linux.Conf.Au 2005, Tridgell demonstrated during his keynote that the reverse<br />

engineering process he had used was simply to telnet to the appropriate port of a BitKeeper server and type<br />

"help". [11]<br />

Torvalds wanted a distributed system that he could use like BitKeeper, but none of the available free systems met his<br />

needs, particularly his performance needs. From an e-mail he wrote on April 7, 2005 while writing the first<br />

prototype: [12]


Git (software) 10<br />

However, the SCMs I've looked at make this hard. One of the things (the main thing, in fact) I've been<br />

working at is to make that process really efficient. If it takes half a minute to apply a patch and remember the<br />

changeset boundary etc. (and quite frankly, that's fast for most SCMs around for a project the size of Linux),<br />

then a series of 250 emails (which is not unheard of at all when I sync with Andrew, for example) takes two<br />

hours. If one of the patches in the middle doesn't apply, things are bad bad bad.<br />

Now, BK wasn't a speed demon either (actually, compared to everything else, BK is a speed deamon [sic],<br />

often by one or two orders of magnitude), and took about 10–15 seconds per email when I merged with<br />

Andrew. HOWEVER, with BK that wasn't as big of an issue, since the BKBK merges were so easy, so I<br />

never had the slow email merges with any of the other main developers. So a patch-application-based SCM<br />

"merger" actually would need to be faster than BK is. Which is really really really hard.<br />

So I'm writing some scripts to try to track things a whole lot faster. Initial indications are that I should be able<br />

to do it almost as quickly as I can just apply the patch, but quite frankly, I'm at most half done, and if I hit a<br />

snag maybe that's not true at all. Anyway, the reason I can do it quickly is that my scripts will not be an SCM,<br />

they'll be a very specific "log Linus' state" kind of thing. That will make the linear patch merge a lot more<br />

time-efficient, and thus possible.<br />

(If a patch apply takes three seconds, even a big series of patches is not a problem: if I get notified within a<br />

minute or two that it failed half-way, that's fine, I can then just fix it up manually. That's why latency is<br />

critical—if I'd have to do things effectively "offline", I'd by definition not be able to fix it up when problems<br />

happen).<br />

Torvalds had several design criteria:<br />

1. Take CVS as an example of what not to do; if in doubt, make the exact opposite decision. To quote Torvalds,<br />

speaking somewhat tongue-in-cheek:<br />

"For the first 10 years of kernel maintenance, we literally used tarballs and patches, which is a much superior<br />

source control management system than CVS is, but I did end up using CVS for 7 years at a commercial<br />

company [Transmeta [13] ] and I hate it with a passion. When I say I hate CVS with a passion, I have to also say<br />

that if there are any SVN (Subversion) users in the audience, you might want to leave. Because my hatred of<br />

CVS has meant that I see Subversion as being the most pointless project ever started. The slogan of<br />

Subversion for a while was "CVS done right", or something like that, and if you start with that kind of slogan,<br />

there's nowhere you can go. There is no way to do CVS right." [14]<br />

2. Support a distributed, BitKeeper-like workflow<br />

"BitKeeper was not only the first source control system that I ever felt was worth using at all, it was also the<br />

source control system that taught me why there's a point to them, and how you actually can do things. So Git<br />

in many ways, even though from a technical angle it is very very different from BitKeeper (which was another<br />

design goal, because I wanted to make it clear that it wasn't a BitKeeper clone), a lot of the flows we use with<br />

Git come directly from the flows we learned from BitKeeper." [14]<br />

[14] [15]<br />

3. Very strong safeguards against corruption, either accidental or malicious<br />

4. Very high performance<br />

The first three criteria eliminated every pre-existing version control system except for Monotone, and the fourth<br />

excluded everything. [14] So, immediately after the 2.6.12-rc2 Linux kernel development release, [14] he set out to<br />

write his own. [14]<br />

The development of Git began on April 3, 2005. [16] The project was announced on April 6, [17] and became<br />

self-hosting as of April 7. [16] The first merge of multiple branches was done on April 18. [18] Torvalds achieved his<br />

performance goals; on April 29, the nascent Git was benchmarked recording patches to the Linux kernel tree at the<br />

rate of 6.7 per second. [19] On June 16, the kernel 2.6.12 release was managed by Git. [20]


Git (software) 11<br />

While strongly influenced by BitKeeper, Torvalds deliberately attempted to avoid conventional approaches, leading<br />

to a unique design. [21] He developed the system until it was usable by technical users, then turned over maintenance<br />

on July 26, 2005 to Junio Hamano, a major contributor to the project. [22] Hamano was responsible for the 1.0 release<br />

on December 21, 2005, [23] and remains the project's maintainer.<br />

Design<br />

Git's design was inspired by BitKeeper and Monotone. [24] [25] Git was originally designed as a low-level version<br />

control system engine on top of which others could write front ends, such as Cogito or StGIT. [25] However, the core<br />

Git project has since become a complete revision control system that is usable directly. [26]<br />

Characteristics<br />

Git's design is a synthesis of Torvalds's experience with Linux in maintaining a large distributed development<br />

project, along with his intimate knowledge of file system performance gained from the same project and the urgent<br />

need to produce a working system in short order. These influences led to the following implementation choices:<br />

Strong support for non-linear development<br />

Git supports rapid branching and merging, and includes specific tools for visualizing and navigating a<br />

non-linear development history. A core assumption in Git is that a change will be merged more often than it is<br />

written, as it is passed around various reviewers.<br />

Distributed development<br />

Like Darcs, BitKeeper, Mercurial, SVK, Bazaar and Monotone, Git gives each developer a local copy of the<br />

entire development history, and changes are copied from one such repository to another. These changes are<br />

imported as additional development branches, and can be merged in the same way as a locally developed<br />

branch.<br />

Compatibility with existing systems/protocols<br />

Repositories can be published via HTTP, FTP, rsync, or a Git protocol over either a plain socket or ssh. Git<br />

also has a CVS server emulation, which enables the use of existing CVS clients and IDE plugins to access Git<br />

repositories. Subversion and svk repositories can be used directly with git-svn.<br />

Efficient handling of large projects<br />

Torvalds has described Git as being very fast and scalable, [27] and performance tests done by Mozilla showed<br />

it was an order of magnitude faster than some revision control systems, and fetching revision history from<br />

[28] [29]<br />

locally stored repository can be two orders of magnitude faster than fetching it from the remote server.<br />

In particular, Git does not get slower as the project history grows larger. [30]<br />

Cryptographic authentication of history<br />

The Git history is stored in such a way that the name of a particular revision (a "commit" in Git terms) depends<br />

upon the complete development history leading up to that commit. Once it is published, it is not possible to<br />

change the old versions without it being noticed. The structure is similar to a hash tree, but with additional data<br />

at the nodes as well as the leaves. [31] (Mercurial and Monotone also have this property.)<br />

Toolkit-based design<br />

Git was designed as a set of programs written in C, and a number of shell scripts that provide wrappers around<br />

those programs. [32] Although most of those scripts have been rewritten in C as part of an ongoing effort to port<br />

it to Microsoft Windows, the design remains, and it is easy to chain the components together. [33]<br />

Pluggable merge strategies<br />

As part of its toolkit design, Git has a well-defined model of an incomplete merge, and it has multiple<br />

algorithms for completing it, culminating in telling the user that it is unable to complete the merge


Git (software) 12<br />

automatically and manual editing is required.<br />

Garbage accumulates unless collected<br />

Aborting operations or backing out changes will leave useless dangling objects in the database. These are<br />

generally a small fraction of the continuously growing history of wanted objects, but reclaiming the space<br />

using git gc --prune can be slow. [34]<br />

Periodic explicit object packing<br />

Git stores each newly created object as a separate file. Although individually compressed, this takes a great<br />

deal of space and is inefficient. This is solved by the use of "packs" that store a large number of objects in a<br />

single file (or network byte stream), delta-compressed among themselves. Packs are compressed using the<br />

heuristic that files with the same name are probably similar, but do not depend on it for correctness. Newly<br />

created objects (newly added history) are still stored singly, and periodic repacking is required to maintain<br />

space efficiency. Git does periodic repacking automatically but manual repacking is also possible with the<br />

git gc command.<br />

Another property of Git is that it snapshots directory trees of files. The earliest systems for tracking versions of<br />

source code, SCCS and RCS, worked on individual files and emphasized the space savings to be gained from<br />

interleaved deltas (SCCS) or delta encoding (RCS) the (mostly similar) versions. Later revision control systems<br />

maintained this notion of a file having an identity across multiple revisions of a project. However, Torvalds rejected<br />

this concept. [35] Consequently, Git does not explicitly record file revision relationships at any level below the source<br />

code tree.<br />

Inexplicit revision relationships has some significant consequences:<br />

• It is slightly more expensive to examine the change history of a single file than the whole project. [36] To obtain a<br />

history of changes affecting a given file, Git must walk the global history and then determine whether each<br />

change modified that file. This method of examining history does, however, let Git produce with equal efficiency<br />

a single history showing the changes to an arbitrary set of files. For example, a subdirectory of the source tree<br />

plus an associated global header file is a very common case.<br />

• Renames are handled implicitly rather than explicitly. A common complaint with CVS is that it uses the name of<br />

a file to identify its revision history, so moving or renaming a file is not possible without either interrupting its<br />

history, or renaming the history and thereby making the history inaccurate. Most post-CVS revision control<br />

systems solve this by giving a file a unique long-lived name (a sort of inode number) that survives renaming. Git<br />

does not record such an identifier, and this is claimed as an advantage. [37] [38] <strong>Source</strong> code files are sometimes<br />

split or merged as well as simply renamed, [39] and recording this as a simple rename would freeze an inaccurate<br />

description of what happened in the (immutable) history. Git addresses the issue by detecting renames while<br />

browsing the history of snapshots rather than recording it when making the snapshot. [40] (Briefly, given a file in<br />

revision N, a file of the same name in revision N−1 is its default ancestor. However, when there is no like-named<br />

file in revision N−1, Git searches for a file that existed only in revision N−1 and is very similar to the new file.)<br />

However, it does require more CPU-intensive work every time history is reviewed, and a number of options to<br />

adjust the heuristics.<br />

Git implements several merging strategies; a non-default can be selected at merge time: [41]<br />

• resolve: the traditional three-way merge algorithm.<br />

• recursive: This is the default when pulling or merging one branch, and is a variant of the three-way merge<br />

algorithm. "When there are more than one common ancestors that can be used for three-way merge, it creates a<br />

merged tree of the common ancestors and uses that as the reference tree for the three-way merge. This has been<br />

reported to result in fewer merge conflicts without causing mis-merges by tests done on actual merge commits<br />

taken from Linux 2.6 kernel development history. Additionally this can detect and handle merges involving<br />

renames." [42]


Git (software) 13<br />

• octopus: This is the default when merging more than two heads.<br />

Implementation<br />

Like BitKeeper, Git does not use a centralized server. However, Git's primitives are not inherently a SCM system.<br />

Torvalds explains, [43]<br />

In many ways you can just see git as a filesystem — it's content-addressable, and it has a notion of versioning,<br />

but I really really designed it coming at the problem from the viewpoint of a filesystem person (hey, kernels is<br />

what I do), and I actually have absolutely zero interest in creating a traditional SCM system.<br />

In spite of his intentions, Git now has the full set of features expected of a traditional SCM. [44]<br />

Git has two data structures: a mutable index that caches information about the working directory and the next<br />

revision to be committed; and an immutable, append-only object database.<br />

The object database contains four types of objects:<br />

• A blob object is the content of a file. Blob objects have no filename, timestamps, or other metadata.<br />

• A tree object is the equivalent of a directory. It contains a list of filenames, each with some type bits and the name<br />

of a blob or tree object that is that file, symbolic link, or directory's contents. This object describes a snapshot of<br />

the source tree.<br />

• A commit object links tree objects together into a history. It contains the name of a tree object (of the top-level<br />

source directory), a timestamp, a log message, and the names of zero or more parent commit objects.<br />

• A tag object is a container that contains reference to another object and can hold additional meta-data related to<br />

another object. Most commonly, it is used to store a digital signature of a commit object corresponding to a<br />

particular release of the data being tracked by Git.<br />

The index serves as connection point between the object database and the working tree.<br />

Each object is identified by a SHA-1 hash of its contents. Git computes the hash, and uses this value for the object's<br />

name. The object is put into a directory matching the first two characters of its hash. The rest of the hash is used as<br />

the file name for that object.<br />

Git stores each revision of a file as a unique blob object. The relationships between the blobs can be found through<br />

examining the tree and commit objects. Newly added objects are stored in their entirety using zlib compression. This<br />

can consume a large amount of hard disk space quickly, so objects can be combined into packs, which use delta<br />

compression to save space, storing blobs as their changes relative to other blobs.<br />

Git servers typically listen on TCP/IP port 9418. [45]<br />

Portability<br />

Git is primarily developed on Linux, but can be used on other Unix-like operating systems including BSD, Solaris<br />

and Darwin. Git is extremely fast on POSIX-based systems such as Linux. [46]<br />

Git also runs on Microsoft Windows. There are two variants:<br />

• A native Microsoft Windows port, called msysgit [47] (using MSYS from MinGW). While somewhat slower than<br />

the Linux version, [48] it is acceptably fast [49] and is reported to be usable in production, with only minor<br />

awkwardness. [50] In particular, some commands are not yet available from the GUIs, and must be invoked from<br />

the command line.<br />

• Git also runs on top of Cygwin (a POSIX emulation layer), [51] although it is noticeably slower, especially for<br />

commands written as shell scripts. [52] This is primarily due to the high cost of the fork emulation performed by<br />

Cygwin. However, the recent rewriting of many Git commands (originally implemented as shell scripts) in C has<br />

resulted in significant speed improvements on Windows. [53]<br />

Other alternatives for running Git include:


Git (software) 14<br />

• git-cvsserver (which emulates a CVS server, allowing use of Windows CVS clients): [54]<br />

• Eclipse IDE-based Git client, based on a pure Java implementation of Git's internals: egit [55]<br />

• NetBeans IDE support for Git is under development [56] and is also available via the NbGit [57] plugin<br />

• The TortoiseGit, Git-Cheetah [58] and Git Extensions [59] are Windows Explorer extension clients, as well as a<br />

standalone GUI and a Visual Studio 2008 Plug-in. The Git <strong>Source</strong> <strong>Control</strong> Provider [60] is another open source<br />

Visual Studio plug-in that displays project file status of Git in the solution explorer.<br />

• IntelliJ IDEA Version 8.1 now supports Git through a bundled plugin: Intellij Version <strong>Control</strong> Systems<br />

Integration [61]<br />

• Xcode 4 - as of version 4 preview, git is available as part of the IDE [62]<br />

• Git# (GitSharp) [63] is a .Net/Mono implementation of git.<br />

Refactoring the lowest-level Git operations into libraries would theoretically enable re-implementation of the<br />

higher-level components for Windows without rewriting the rest. [64]<br />

Adoption<br />

<strong>Source</strong> code hosting<br />

The following websites provide free source code hosting for Git repositories: [65]<br />

• BerliOS<br />

• GitHub<br />

• Gitorious<br />

• <strong>Source</strong>forge<br />

• GNU Savannah<br />

Projects using Git<br />

A number of high-profile software projects now use Git for revision control: [66]<br />

[67] [68]<br />

• Amarok<br />

• Android [69]<br />

• Arch Linux<br />

• Aquamacs Emacs<br />

• BlueZ [70]<br />

• Btrfs [71]<br />

• Citadel [72]<br />

• Clojure [73]<br />

• CakePHP [74]<br />

• cURL [75]<br />

• Debian [76]<br />

• Digg [77]<br />

• DragonFly BSD [78]<br />

• Eclipse [79]<br />

• Elinks [80]<br />

• Fedora<br />

• FFmpeg [81]<br />

• Freenet [82]<br />

• FreeSWITCH [83]<br />

• git [84]<br />

• GIMP [85]


Git (software) 15<br />

[86] [87]<br />

• GNOME<br />

• GPM [88]<br />

• GStreamer [89]<br />

• gThumb [90]<br />

• GTK+ [91]<br />

• Hurd [92]<br />

• jQuery [93]<br />

• Kate [94]<br />

• KDevelop [95]<br />

• Konversation [96]<br />

• Laika (EHR testing framework) [97]<br />

• LilyPond (music typesetting) [98]<br />

• Linux kernel<br />

[99] [100]<br />

• Linux Mint<br />

• LMMS [101]<br />

• Marble [102]<br />

• MeeGo [103]<br />

• Merb [104]<br />

• MicroEMACS<br />

[105] [106]<br />

• Mono<br />

• MooTools [107]<br />

• One Laptop Per Child (OLPC) [108]<br />

• OpenFOAM [109]<br />

• openSUSE [110]<br />

[111] [112]<br />

• Penumbra: Overture<br />

• Perl [113]<br />

• Phonon [114]<br />

• phpBB [115]<br />

• Prototype.js [116]<br />

• Qt [117]<br />

• Reddit [118]<br />

• rsync [119]<br />

• Ruby on Rails [120]<br />

• Samba [121]<br />

• SproutCore [122]<br />

• Starlink [123]<br />

• Sugar [124]<br />

• SWI-Prolog [125]<br />

• Trilinos<br />

• VLC [126]<br />

• VTK [127]<br />

• Wine [128]<br />

• Xfce [129]<br />

• Xiph [130]<br />

• X.org Server [131]<br />

• x264 [126]<br />

• YUI [132]


Git (software) 16<br />

• Zend Framework [133]<br />

The KDE project has begun migrating to Git, with Amarok [134] [135] and Phonon [136] having completed its migration.<br />

The Drupal community has recently announced plans to migrate development to Git. [137]<br />

See also<br />

• Distributed revision control<br />

• List of revision control software<br />

• Comparison of revision control software<br />

• Comparison of open source software hosting facilities<br />

• Repo (Script)<br />

References<br />

[1] http:/ / en. wikipedia. org/ wiki/ Template%3Alatest_stable_software_release%2Fgit<br />

[2] http:/ / www. kernel. org/ pub/ software/ scm/ git/ docs/ RelNotes/ 1. 7. 3. 1. txt<br />

[3] http:/ / en. wikipedia. org/ wiki/ Template%3Alatest_preview_software_release%2Fgit_%28software%29<br />

[4] Junio C Hamano (2010-09-15). "[ANNOUNCE] Git 1.7.3.rc2" (http:/ / marc. info/ ?l=linux-kernel& m=128458925906046). git mailing list. .<br />

Retrieved 2010-09-15.<br />

[5] http:/ / en. wikipedia. org/ wiki/ Template%3Alatest_preview_software_release%2Fgit<br />

[6] "git/git.git/tree" (http:/ / git. kernel. org/ ?p=git/ git. git;a=tree). git.kernel.org. . Retrieved 2009-06-15.<br />

[7] "After controversy, Torvalds begins work on git" (http:/ / www. infoworld. com/ article/ 05/ 04/ 19/ HNtorvaldswork_1. html). InfoWorld.<br />

2005-04-19. ISSN 0199-6649. . Retrieved 2008-02-20.<br />

[8] "GitFaq: Why the 'git' name?" (https:/ / git. wiki. kernel. org/ index. php/ GitFaq#Why_the_. 27git. 27_name. 3F). Git.or.cz. . Retrieved<br />

2009-06-16.<br />

[9] "After controversy, Torvalds begins work on "git"" (http:/ / www. pcworld. idg. com. au/ article/ 129776/<br />

after_controversy_torvalds_begins_work_git_/ ). PC World. 2005-04-20. . "Torvalds seemed aware that his decision to drop BitKeeper would<br />

also be controversial. When asked why he called the new software, "git," British slang meaning "a rotten person," he said. 'I'm an egotistical<br />

bastard, so I name all my projects after myself. First Linux, now git.'"<br />

[10] Feature: No More Free BitKeeper | KernelTrap.org (http:/ / kerneltrap. org/ node/ 4966)<br />

[11] Jonathan Corbet (2005-04-20). "How Tridge reverse engineered BitKeeper" (http:/ / lwn. net/ Articles/ 132938/ ). Linux Weekly News. .<br />

[12] Linus Torvalds (2005-04-07). "Re: Kernel SCM saga.." (http:/ / marc. info/ ?l=linux-kernel& m=111288700902396). linux-kernel mailing<br />

list. .<br />

[13] Linus Torvalds (2005-10-31). "Re: git versus CVS (versus bk)" (http:/ / marc. info/ ?l=git& m=113072612805233& w=2). git mailing list. .<br />

[14] Linus Torvalds. (2007-05-03). Google tech talk: Linus Torvalds on git (http:/ / www. youtube. com/ watch?v=4XpnKHJAok8). Event<br />

occurs at 02:30. . Retrieved 2007-05-16.<br />

[15] Linus Torvalds (2007-06-10). "Re: fatal: serious inflate inconsistency" (http:/ / marc. info/ ?l=git& m=118143549107708). git mailing list. .<br />

A brief description of Git's data integrity design goals.<br />

[16] Linus Torvalds (2007-02-27). "Re: Trivia: When did git self-host?" (http:/ / marc. info/ ?l=git& m=117254154130732). git mailing list. .<br />

[17] Linus Torvalds (2005-04-06). "Kernel SCM saga.." (http:/ / marc. info/ ?l=linux-kernel& m=111280216717070). linux-kernel mailing list. .<br />

[18] Linus Torvalds (2005-04-17). "First ever real kernel git merge!" (http:/ / marc. info/ ?l=git& m=111377572329534). git mailing list. .<br />

[19] Matt Mackall (2005-04-29). "Mercurial 0.4b vs git patchbomb benchmark" (http:/ / marc. info/ ?l=git& m=111475459526688). git mailing<br />

list. .<br />

[20] Linus Torvalds (2005-06-17). "Linux 2.6.12" (http:/ / marc. info/ ?l=git-commits-head& m=111904216911731). git-commits-head mailing<br />

list. .<br />

[21] Linus Torvalds (2006-10-20). "Re: VCS comparison table" (http:/ / marc. info/ ?l=git& m=116129092117475). git mailing list. . A<br />

discussion of Git vs. BitKeeper<br />

[22] Linus Torvalds (2005-07-27). "Meet the new maintainer..." (http:/ / marc. info/ ?l=git& m=112243466603239). git mailing list. .<br />

[23] Junio C Hamano (2005-12-21). "ANNOUNCE: GIT 1.0.0" (http:/ / marc. info/ ?l=git& m=113515203321888). git mailing list. .<br />

[24] Linus Torvalds (2006-05-05). "Re: [ANNOUNCE] Git wiki" (http:/ / marc. info/ ?l=git& m=114685143200012). linux-kernel mailing list. .<br />

"Some historical background" on git's predecessors<br />

[25] Linus Torvalds (2005-04-08). "Re: Kernel SCM saga" (http:/ / marc. info/ ?l=linux-kernel& m=111293537202443). linux-kernel mailing<br />

list. . Retrieved 2008-02-20.<br />

[26] Linus Torvalds (2006-03-23). "Re: Errors GITtifying GCC and Binutils" (http:/ / marc. info/ ?l=git& m=114314642000462). git mailing list.<br />

.<br />

[27] Linus Torvalds (2006-10-19). "Re: VCS comparison table" (http:/ / marc. info/ ?l=git& m=116128307511686). git mailing list. .


Git (software) 17<br />

[28] Stenback, Johnny (2006-11-30). "bzr/hg/git performance" (http:/ / weblogs. mozillazine. org/ jst/ archives/ 2006/ 11/ vcs_performance.<br />

html). Jst's Blog. . Retrieved 2008-02-20., benchmarking "git diff" against "bzr diff", and finding the former 100x faster in some cases.<br />

[29] Roland Dreier (2006-11-13). "Oh what a relief it is" (http:/ / digitalvampire. org/ blog/ index. php/ 2006/ 11/ 16/ oh-what-a-relief-it-is/ ). .,<br />

observing that "git log" is 100x faster than "svn log" because the latter has to contact a remote server.<br />

[30] Fendy, Robert (2009-01-21). DVCS Round-Up: One System to Rule Them All?—Part 2 (http:/ / ldn. linuxfoundation. org/ article/<br />

dvcs-roundup-one-system-rule-them-all-part-2). Linux Foundation. . Retrieved 2009-06-25. "One aspect that really sets Git apart is its speed.<br />

...dependence on repository size is very, very weak. For all facts and purposes, Git shows nearly a flat-line behavior when it comes to the<br />

dependence of its performance on the number of files and/or revisions in the repository, a feat no other VCS in this review can duplicate<br />

(although Mercurial does come quite close)."<br />

[31] "Git User's Manual - Git Concepts - Trust" (http:/ / www. kernel. org/ pub/ software/ scm/ git/ docs/ user-manual. html#trust). 2006-10-18. .<br />

[32] Linus Torvalds. "Re: VCS comparison table" (http:/ / marc. info/ ?l=git& m=116118369005954). git mailing list. . Retrieved 2009-04-10.,<br />

describing Git's script-oriented design<br />

[33] iabervon (2005-12-22). "Git rocks!" (http:/ / lwn. net/ Articles/ 165202/ ). ., praising Git's scriptability<br />

[34] "Git User's Manual" (http:/ / www. kernel. org/ pub/ software/ scm/ git/ docs/ user-manual. html#ensuring-reliability). 2007-08-05. .<br />

[35] Linus Torvalds (2005-04-10). "Re: more git updates.." (http:/ / marc. info/ ?l=linux-kernel& m=111314792424707). linux-kernel mailing<br />

list. .<br />

[36] Bruno Haible (2007-02-11). "how to speed up "git log"?" (http:/ / marc. info/ ?l=git& m=117119479505638). git mailing list. .<br />

[37] Linus Torvalds (2006-03-01). "Re: impure renames / history tracking" (http:/ / marc. info/ ?l=git& m=114123702826251). git mailing list. .<br />

[38] Junio C Hamano (2006-03-24). "Re: Errors GITtifying GCC and Binutils" (http:/ / marc. info/ ?l=git& m=114316047119262). git mailing<br />

list. .<br />

[39] Junio C Hamano (2006-03-23). "Re: Errors GITtifying GCC and Binutils" (http:/ / marc. info/ ?l=git& m=114315795227271). git mailing<br />

list. .<br />

[40] Linus Torvalds (2006-11-28). "Re: git and bzr" (http:/ / marc. info/ ?l=git& m=116473016012824). git mailing list. ., on using git-blame to<br />

show code moved between source files<br />

[41] Linus Torvalds (2007-07-18). "git-merge(1)" (http:/ / www. kernel. org/ pub/ software/ scm/ git/ docs/ git-merge. html). .<br />

[42] Linus Torvalds (2007-07-18). "CrissCrossMerge" (http:/ / revctrl. org/ CrissCrossMerge). .<br />

[43] Linus Torvalds (2005-04-10). "Re: more git updates..." (http:/ / marc. info/ ?l=linux-kernel& m=111314792424707). linux-kernel mailing<br />

list. .<br />

[44] Linus Torvalds (2006-03-23). "Re: Errors GITtifying GCC and Binutils" (http:/ / marc. info/ ?l=git& m=114314642000462). git mailing list.<br />

.<br />

[45] "Exporting a git repository via the git protocol" (http:/ / www. kernel. org/ pub/ software/ scm/ git/ docs/ user-manual.<br />

html#exporting-via-git). Kernel.org. . Retrieved 2009-11-17.<br />

[46] Stenback, Johnny (2006-11-30). "bzr/hg/git performance" (http:/ / weblogs. mozillazine. org/ jst/ archives/ 2006/ 11/ vcs_performance.<br />

html). Jst's Blog. . Retrieved 2008-02-20.<br />

[47] http:/ / code. google. com/ p/ msysgit/<br />

[48] Johannes Schindelin (2007-10-14). "Re: Switching from CVS to GIT" (http:/ / marc. info/ ?l=git& m=119240557820569). git mailing list. .<br />

A subjective comparison of Git under Windows and Linux on the same system.<br />

[49] Martin Langhoff (2007-10-15). "Re: Switching from CVS to GIT" (http:/ / marc. info/ ?l=git& m=119242653809645). git mailing list. .<br />

Experience running msysgit on Windows<br />

[50] Johannes Sixt (2007-10-15). "Re: Switching from CVS to GIT" (http:/ / marc. info/ ?l=git& m=119243039514160). git mailing list. .<br />

[51] Shawn Pearce (2006-10-24). "Re: VCS comparison table" (http:/ / marc. info/ ?l=git& m=116167109024046). git mailing list. .<br />

[52] Johannes Schindelin (2007-01-01). "Re: [PATCH] Speedup recursive by flushing index only once for all" (http:/ / marc. info/ ?l=git&<br />

m=116850345025162). git mailing list. .<br />

[53] Shawn O. Pearce (2007-09-18). "[PATCH 0/5] More builtin-fetch fixes" (http:/ / article. gmane. org/ gmane. comp. version-control. git/<br />

58551). git mailing list. .<br />

[54] "git-cvsserver(1)" (http:/ / www. kernel. org/ pub/ software/ scm/ git/ docs/ git-cvsserver. html). Kernel.org. 2009-04-02. . Retrieved<br />

2009-06-15.<br />

[55] http:/ / www. eclipse. org/ egit/<br />

[56] http:/ / www. netbeans. org/ issues/ show_bug. cgi?id=131531<br />

[57] http:/ / code. google. com/ p/ nbgit/<br />

[58] https:/ / git. wiki. kernel. org/ index. php/ MSysGit:GitCheetah<br />

[59] http:/ / sourceforge. net/ projects/ gitextensions/<br />

[60] http:/ / gitscc. codeplex. com/<br />

[61] http:/ / www. jetbrains. com/ idea/ features/ version_control. html#Git_support<br />

[62] http:/ / developer. apple. com/ technologies/ tools/ whats-new. html<br />

[63] http:/ / www. eqqon. com/ index. php/ GitSharp<br />

[64] Johannes Schindelin (2006-03-02). "Re: windows problems summary" (http:/ / marc. info/ ?l=git& m=114131401509784). git mailing list. .<br />

[65] Git Hosting - Git SCM Wiki (http:/ / git. wiki. kernel. org/ index. php/ GitHosting)<br />

[66] "Projects that use Git for their source code management" (http:/ / git. wiki. kernel. org/ index. php/ GitProjects). . Retrieved 2008-02-20.


Git (software) 18<br />

[67] Getting Started/<strong>Source</strong>s/Amarok Git Tutorial - KDE TechBase (http:/ / techbase. kde. org/ Getting_Started/ <strong>Source</strong>s/ KDE_git-tutorial)<br />

[68] amarok in kde-developers - Gitorious (http:/ / gitorious. org/ + kde-developers/ amarok/ amarok)<br />

[69] Using Repo and Git (Android Open <strong>Source</strong> Project) (http:/ / source. android. com/ source/ git-repo. html)<br />

[70] BlueZ » GIT access (http:/ / www. bluez. org/ development/ git/ )<br />

[71] "Btrfs source repositories - btrfs Wiki" (http:/ / btrfs. wiki. kernel. org/ index. php/ Btrfs_source_repositories). Btrfs.wiki.kernel.org. .<br />

Retrieved 2009-06-15.<br />

[72] http:/ / www. citadel. org/ doku. php/ installation:sourcecode<br />

[73] http:/ / github. com/ richhickey/ clojure<br />

[74] http:/ / cakephp. lighthouseapp. com/ projects/ 42648/ home<br />

[75] http:/ / curl. haxx. se/<br />

[76] git.debian.org Git (http:/ / git. debian. org)<br />

[77] digg.git - part 1 | Digg About (http:/ / about. digg. com/ blog/ digggit-part-1)<br />

[78] TypicalGitUsage - dragonflywiki (http:/ / wiki. dragonflybsd. org/ index. cgi/ TypicalGitUsage)<br />

[79] WTP Incubator using Git (http:/ / git. eclipse. org/ c/ webtools/ org. eclipse. webtools. incubator. git/ )<br />

[80] Download (http:/ / elinks. or. cz/ download. html)<br />

[81] "Get FFmpeg" (http:/ / ffmpeg. org/ download. html). Ffmpeg.org. . Retrieved 2009-06-15.<br />

[82] http:/ / github. com/ freenet/<br />

[83] http:/ / freeswitch. org/<br />

[84] "Git - Fast Version <strong>Control</strong> System" (http:/ / git-scm. com/ ). . Retrieved 2010-04-24.<br />

[85] The GIMP Development Team. "GIMP Developer Resources" (http:/ / developer. gimp. org/ git. html). . Retrieved 2010-08-07.<br />

[86] Lucas Rocha. "Mailing List Announcement" (http:/ / mail. gnome. org/ archives/ gnome-infrastructure/ 2009-March/ msg00064. html). .<br />

Retrieved 2009-03-19. "GNOME to migrate to git version control system..."<br />

[87] Git - GNOME Live! (http:/ / live. gnome. org/ Git)<br />

[88] http:/ / www. nico. schottelius. org/ software/ gpm/<br />

[89] gstreamer Wiki - GitDeveloperGuidelines (http:/ / gstreamer. freedesktop. org/ wiki/ GitDeveloperGuidelines)<br />

[90] gthumb - GNOME Live! (http:/ / live. gnome. org/ gthumb)<br />

[91] GTK+ - Download (http:/ / www. gtk. org/ download. html)<br />

[92] source repositories (http:/ / www. gnu. org/ software/ hurd/ rules/ source_repositories. html)<br />

[93] Downloading jQuery - jQuery JavaScript Library (http:/ / docs. jquery. com/ Downloading_jQuery#Git)<br />

[94] [://gitorious.org/kate Kate - Gitorious]<br />

[95] KDevelop - Gitorious (http:/ / gitorious. org/ kdevelop)<br />

[96] Konversation - Gitorious (http:/ / gitorious. org/ konversation)<br />

[97] CCHIT's laika at master - GitHub (http:/ / github. com/ CCHIT/ laika)<br />

[98] LilyPond, music notation for everyone (http:/ / lilypond. org)<br />

[99] The Linux Mint Blog » Blog Archive » Mint to use Launchpad for translations, bugs, blueprints and github for code hosting and version<br />

control (http:/ / www. linuxmint. com/ blog/ ?p=970)<br />

[100] DistroWatch.com: Put the fun back into computing. Use Linux, BSD (http:/ / distrowatch. com/ weekly. php?issue=20090727#news)<br />

[101] LMMS - Linux MultiMedia Studio (http:/ / lmms. sourceforge. net)<br />

[102] Marble - Gitorious (http:/ / gitorious. org/ marble)<br />

[103] MeeGo - Gitorious (http:/ / meego. gitorious. org/ )<br />

[104] Ruby on Rails: Merb (http:/ / rubyonrails. org/ merb/ )<br />

[105] GitFAQ - Mono (http:/ / mono-project. com/ GitFAQ)<br />

[106] Mono Project - GitHub (http:/ / github. com/ mono)<br />

[107] MooTools - a compact javascript framework (http:/ / mootools. net/ )<br />

[108] OLPC wiki. "Project hosting" (http:/ / wiki. laptop. org/ go/ Project_hosting). . Retrieved 2008-02-20.<br />

[109] http:/ / www. openfoam. com/ download/ git. php<br />

[110] openSUSE - Gitorious (http:/ / gitorious. org/ opensuse)<br />

[111] "FrictionalGames' PenumbraOverture at master" (http:/ / github. com/ FrictionalGames/ PenumbraOverture). GitHub. .<br />

[112] "Penumbra: Overture goes Open <strong>Source</strong>!" (http:/ / frictionalgames. blogspot. com/ 2010/ 05/ penumbra-overture-goes-open-source. html).<br />

Frictional Games. .<br />

[113] Léon Brocard. "Mailing List Announcement" (http:/ / www. nntp. perl. org/ group/ perl. perl5. porters/ 2008/ 12/ msg142823. html). .<br />

Retrieved 2008-12-22. "The Perl Foundation has migrated Perl 5 to the Git version control system..."<br />

[114] Phonon - Gitorious (http:/ / gitorious. org/ phonon)<br />

[115] phpBB (2010-03-07). "phpBB moves source code versioning from Subversion to Git" (http:/ / www. phpbb. com/ community/ viewtopic.<br />

php?f=14& t=2015905). phpBB Group. . Retrieved 2010-03-07.<br />

[116] Prototype JavaScript framework: Contribute (http:/ / prototypejs. org/ contribute)<br />

[117] "Qt now open for community contributions" (http:/ / www. qtsoftware. com/ about/ news/ qt-contribution-model-announced). 2009-05-11. .<br />

Retrieved 2009-06-22.<br />

[118] "Reddit Goes Open <strong>Source</strong>" (http:/ / blog. reddit. com/ 2008/ 06/ reddit-goes-open-source. html). . Retrieved 2010-02-26.


Git (software) 19<br />

[119] http:/ / gitweb. samba. org/ ?p=rsync. git<br />

[120] "Rails is moving from SVN to Git" (http:/ / weblog. rubyonrails. org/ 2008/ 4/ 2/ rails-is-moving-from-svn-to-git). . Retrieved 2008-04-03.<br />

[121] Using Git for Samba Development - SambaWiki (http:/ / wiki. samba. org/ index. php/ Using_Git_for_Samba_Development)<br />

[122] SproutCore Documentation (http:/ / www. sproutcore. com/ documentation/ hacking/ )<br />

[123] (http:/ / www. starlink. ac. uk)<br />

[124] Sugar Labs project hosting (http:/ / git. sugarlabs. org/ )<br />

[125] Accessing SWI-Prolog source via GIT (http:/ / www. swi-prolog. org/ git. html)<br />

[126] Git - VideoLAN Wiki (http:/ / wiki. videolan. org/ Git)<br />

[127] http:/ / vtk. org/ gitweb<br />

[128] GitWine - The Official Wine Wiki (http:/ / wiki. winehq. org/ GitWine)<br />

[129] Xfce Git (http:/ / git. xfce. org/ )<br />

[130] Xiph Git (http:/ / git. xiph. org/ )<br />

[131] X.Org Wiki - Development/git (http:/ / www. x. org/ wiki/ Development/ git)<br />

[132] "YUI 2 and YUI 3 <strong>Source</strong> Code Now on GitHub" (http:/ / yuiblog. com/ blog/ 2009/ 01/ 14/ github/ ). . Retrieved 2009-01-20.<br />

[133] http:/ / git. zendframework. com/ ?a=summary& p=zf<br />

[134] life at the end of the universe » we’re testing the water for everyone (http:/ / blog. lydiapintscher. de/ 2009/ 07/ 20/<br />

were-testing-the-water-for-everyone/ )<br />

[135] KDE gets millionth commit - The H Open <strong>Source</strong>: News and Features (http:/ / www. h-online. com/ open/ KDE-gets-millionth-commit--/<br />

news/ 113807)<br />

[136] Phonon - Gitorious (http:/ / gitorious. org/ phonon)<br />

[137] Migrating Drupal.org to Git (http:/ / drupal. org/ community-initiatives/ git)<br />

External links<br />

• Git Homepage (http:/ / git-scm. com)<br />

• An introduction to git-svn for Subversion/SVK users and deserters (http:/ / utsl. gen. nz/ talks/ git-svn/ intro.<br />

html), article by Sam Vilain<br />

• Easy Git (http:/ / www. gnome. org/ ~newren/ eg/ ) - a wrapper script for Git, presenting a simplified user<br />

interface, designed to be more accessible to users of other revision control systems.<br />

• git by example (http:/ / sysmonblog. co. uk/ misc/ git_by_example/ ) - simple walk through of common git<br />

commands<br />

• Git for computer scientists (http:/ / eagain. net/ articles/ git-for-computer-scientists/ ) - explains how Git<br />

conceptually works<br />

• Gittin Down to the Plumbing (http:/ / git-plumbing-preso. heroku. com/ ) - a nice presentation explains Git<br />

internals by many animations<br />

• Git for Subversion users (http:/ / pointbeing. net/ weblog/ 2009/ 09/ git-for-subversion-users. html)<br />

• Git Magic (http:/ / www-cs-students. stanford. edu/ ~blynn/ gitmagic/ ) - a comprehensive listing of Git tips &<br />

tricks, popularly referred to as "magic". Describes some of the lesser known features of Git.<br />

• Why Git is Better Than X (http:/ / whygitisbetterthanx. com/ ) - evangelist site comparing Git to Mercurial,<br />

Bazaar, Subversion and Perforce<br />

• Git Quick Reference (http:/ / jonas. nitro. dk/ git/ quick-reference. html)<br />

• All about Git on one page (http:/ / www. markus-gattol. name/ ws/ scm. html) - a page covering Git, starting with<br />

theory and ending with many practical examples about its usage.<br />

• Google Tech Talk - Linus Torvalds on Git (http:/ / www. youtube. com/ watch?v=4XpnKHJAok8)


BitKeeper 20<br />

BitKeeper<br />

Original author(s) BitMover Inc.<br />

Operating system AIX, FreeBSD, HP-UX, IRIX, Linux, Mac OS X, NetBSD, OpenBSD, Solaris, Windows<br />

Type Distributed revision control<br />

License Proprietary<br />

Website http:/ / www. bitkeeper. com/<br />

BitKeeper is a software tool for distributed revision control (configuration management, SCM, etc.) of computer<br />

source code. A distributed system, BitKeeper competes largely against other systems such as Git and Mercurial.<br />

BitKeeper is produced by BitMover Inc., a privately held company based in Campbell, California [1] and owned by<br />

CEO Larry McVoy, who had previously designed TeamWare.<br />

BitKeeper builds upon many of the TeamWare concepts. Its key selling point is the fact that it is a distributed<br />

version control tool, as opposed to CVS or SVN. One of the defining characteristics of any distributed version<br />

control tool is the ease with which distributed development teams can keep their own local source repositories and<br />

still work with the central repository. Its web site claims that "BitKeeper has been shown to double the pace of<br />

software development".<br />

BitKeeper is proprietary software and is normally sold or leased (as part of a support package) to medium or large<br />

corporations. [2]<br />

History<br />

BitMover used to provide access to the system for certain open source or free software projects, the most famous<br />

(and controversial) of which was the source code of the Linux kernel. The license for the "community" version of<br />

BitKeeper had allowed for developers to use the tool at no cost for open source or free software projects, provided<br />

those developers did not participate in the development of a competing tool (such as CVS, GNU Arch, Subversion or<br />

ClearCase) for the duration of their usage of BitKeeper plus one year. This restriction applied regardless of whether<br />

the competing tool is open/free or proprietary. This version of BitKeeper also required that certain meta-information<br />

about changes be stored on computer servers operated by BitMover (www.openlogging.org [3] ), an addition that<br />

makes it impossible for community version users to run projects of which BitMover is unaware.<br />

License concerns<br />

The decision made in 2002 to use BitKeeper for Linux kernel development was a controversial one. Some, notably<br />

GNU Project founder Richard Stallman, expressed concern about proprietary tools being used on a flagship free<br />

project. While project leader Linus Torvalds and other core developers adopted BitKeeper, several key developers<br />

(including Linux veteran Alan Cox) refused to do so, citing the Bitmover license, and voicing concern that the<br />

project was ceding some control to a proprietary developer. To mitigate these concerns, BitMover added gateways<br />

which allowed limited interoperation between the Linux BitKeeper servers (maintained by Bitmover) and developers<br />

using CVS and Subversion. Even after this addition, flamewars [4] occasionally broke out on the Linux kernel mailing<br />

list, often involving key kernel developers and BitMover CEO Larry McVoy, who is also a Linux developer.


BitKeeper 21<br />

Pricing change<br />

In April 2005, BitMover announced that it would stop providing a version of BitKeeper free of charge to the<br />

community, giving as the reason the efforts of Andrew "Tridge" Tridgell, a developer employed by OSDL on an<br />

unrelated project, to develop a client which would show the metadata (data about revisions, possibly including<br />

differences between versions) instead of only the most recent version. Being able to see metadata and compare past<br />

versions is one of the core features of all version-control systems but was not available to anyone without a<br />

commercial BitKeeper license, significantly inconveniencing most Linux kernel developers. Although BitMover<br />

decided to provide free commercial BitKeeper licenses to some kernel developers, it refused to give or sell licenses<br />

to anyone employed by OSDL, including Linus Torvalds and Andrew Morton, placing OSDL developers in the same<br />

position other kernel developers were in. The Git project was launched with the intent of becoming the Linux<br />

kernel's source code management software, and was eventually adopted by Linux developers.<br />

End of support for the "Free Use" version was officially July 1, 2005 and users were required to switch to the<br />

commercial version or change version control system by then. Commercial users are also required not to produce<br />

any competing tools: in October 2005, McVoy contacted a customer using commercially licensed BitKeeper<br />

demanding that an employee of the customer stop contributing to the Mercurial project, a GPL source management<br />

tool. Bryan O'Sullivan, the employee, responded, "To avoid any possible perception of conflict, I have volunteered<br />

to Larry that as long as I continue to use the commercial version of BitKeeper, I will not contribute to the<br />

development of Mercurial." [5]<br />

See also<br />

• Git<br />

• Mercurial<br />

• Distributed revision control<br />

• List of revision control software<br />

References<br />

[1] http:/ / www. bitkeeper. com/ Company. html BitMover company information<br />

[2] http:/ / www. bitkeeper. com/ Sales. How. html BitKeeper sales information<br />

[3] http:/ / www. openlogging. org<br />

[4] Stallman, Richard (13 October 2002). "Bitkeeper outragem [sic], old and new" (http:/ / www. uwsg. iu. edu/ hypermail/ linux/ kernel/ 0210.<br />

1/ 1767. html). linux-kernel mailing list. . Retrieved 8 April 2008.<br />

[5] O'Sullivan, Bryan (30 September 2005). "Why I am no longer working on Mercurial" (http:/ / article. gmane. org/ gmane. comp.<br />

version-control. mercurial. devel/ 3481). mercurial-devel mailing list. . Retrieved 14 April 2007.<br />

External links<br />

• BitKeeper homepage (http:/ / www. bitkeeper. com/ )<br />

• BitKeeper's note about the Nov 2003 security breach (http:/ / www. bitkeeper. com/ press/ 2003-11-10-0001.<br />

html)<br />

• "Not quite Open <strong>Source</strong>" (http:/ / lwn. net/ 1999/ features/ BitKeeper. php3) Article on Linux Weekly News, circa<br />

1999, discussing features, licensing, Larry McVoy, and OSI.<br />

• "No More Free BitKeeper" (http:/ / kerneltrap. org/ node/ 4966) Discusses BitMover's decision to phase out the<br />

free version of BitKeeper<br />

• "BitKeeper and Linux: The end of the road?" (http:/ / www. linux. com/ articles/ 44147) discusses the BitKeeper<br />

fiasco from three viewpoints: Linus Torvalds, Larry McVoy, Andrew "Tridge" Tridgell (the alleged<br />

reverse-engineer who offers a short explanation of the situation)


BitKeeper 22<br />

• How Tridge reverse-engineered Bitkeeper (http:/ / lwn. net/ Articles/ 132938/ ) and Torvalds knifes Tridgell<br />

(http:/ / www. theregister. co. uk/ 2005/ 04/ 14/ torvalds_attacks_tridgell/ ), two articles describing Tridgell's 2005<br />

linux.conf.au keynote and comparing what he did to statements by Torvalds and McVoy<br />

• <strong>Source</strong>Puller (http:/ / sourceforge. net/ projects/ sourcepuller/ ) is the result of Tridgell's efforts<br />

• RMS: BitKeeper bon-voyage is a happy ending (http:/ / www. linux. com/ articles/ 44465) Richard Stallman on<br />

the Linux/BitKeeper fallout (formerly on NewsForge, currently on Linux.com)<br />

• The Age (http:/ / www. theage. com. au/ news/ Soapbox/ Crunch-time-for-Linus/ 2005/ 04/ 14/ 1113251731624.<br />

html) Crunch time for Linus<br />

• BitKeeper at the "Better SCM" Site (http:/ / better-scm. berlios. de/ bk/ ) - a collection of articles and essays about<br />

BitKeeper and its history.


ikiwiki 23<br />

ikiwiki<br />

Developer(s) Joey Hess et al<br />

Initial release<br />

Stable release<br />

Written in Perl<br />

29 April 2006 [1]<br />

Operating system Unix-like<br />

Type Wiki software<br />

3.20100122 [2] / 3.14159 was (July 16, 2009) [3]<br />

License GNU General Public License#Version 2 +<br />

Website http:/ / ikiwiki. info/<br />

ikiwiki is a wiki software system designed by Joey Hess.<br />

Design<br />

ikiwiki compiles wiki pages into HTML pages for publication. Unlike conventional wiki software, ikiwiki stores its<br />

pages in a standard version control system [4] such as Git or Subversion or 6+ others. [5] The term "wiki compiler" was<br />

coined by ikiwiki's designer to compare the program's function to that of make or gcc for computer software<br />

projects; [6] other wiki compilers call themselves a "wiki processor". [7]<br />

ikiwiki is implemented in Perl, although external plugins can be implemented in any language. [8] It supports several<br />

markup languages, including Markdown, Creole, [9] reStructuredText and Textile. [4] In the simplest case it can<br />

function as an off-line static web site generator, but it can use cgi to function as a normal web-interfaced wiki as<br />

well. Login via OpenID is supported.<br />

ikiwiki is included in various Linux distributions, including Debian. [10] Licensed under the terms of the GNU<br />

General Public License, version 2 or later, [11] ikiwiki is free software.<br />

Use as a (possibly-distributed) bug tracker<br />

Although wikis and bug tracking systems are conventionally viewed as distinct types of software, Ikiwiki can also be<br />

used as a (possibly-distributed) bug tracking system (for instance, insert an "Index of the 30 most recently fixed<br />

bugs" via the wikiscript<br />

[[inline pages="bugs/* and link(done) and !*/Discussion" sort=mtime show=30 archive=yes]]<br />

); however "Ikiwiki has little structured data except for page filenames and tags, so" its query functionality is not as<br />

advanced or as user-friendly as some other, non-distributed bug trackers such as Bugzilla. [6] However, structured<br />

data on the page (beyond tags and path names), as field-value pairs, is being designed. [12]


ikiwiki 24<br />

See also<br />

• Bliki<br />

• Website Meta Language<br />

References<br />

[1] Version 1.0, see ikiwiki roadmap (http:/ / ikiwiki. info/ roadmap/ )<br />

[2] ( "Download page of ikiwiki" (http:/ / ikiwiki. info/ download/ ). Ikiwiki.info. . Retrieved 2010-01-29.) asserts the latest source is in debian<br />

repository ( "ikiwiki at debian packages" (http:/ / packages. debian. org/ unstable/ source/ ikiwiki). Packages.debian.org. . Retrieved<br />

2010-01-29.) which gives the latest version number.<br />

[3] This version date (July 16, 2009) was listed on this page for version 3.14159 citing ( "ikiwiki at debian packages" (http:/ / packages. debian.<br />

org/ unstable/ source/ ikiwiki). Packages.debian.org. . Retrieved 2010-01-29.) but that citation doesn't list the version date; it appears one<br />

would have to download the code & say extract the maximum file date to get the version date.<br />

[4] "ikiwiki feature "Use a Real RCS"" (http:/ / ikiwiki. info/ features/ #index1h2). Ikiwiki.info. . Retrieved 2010-01-29.<br />

[5] "ikiwiki Revision <strong>Control</strong> Systems" (http:/ / ikiwiki. info/ rcs). Ikiwiki.info. . Retrieved 2010-01-29.<br />

[6] Joey Hess (6 April 2007). "Integrated issue tracking with Ikiwiki" (http:/ / www. linuxworld. com/ news/ 2007/<br />

040607-integrated-issue-tracking-ikiwiki. html). LinuxWorld.com. IDG. . Retrieved 7 January 2009.<br />

[7] PWP Php Wiki Processor (http:/ / www. net-assistant. de/ wiki/ static/ StartPage. html)<br />

[8] "ikiwiki external plugins" (http:/ / ikiwiki. info/ plugins/ write/ external/ ). Ikiwiki.info. . Retrieved 2009-08-10.<br />

[9] "Creole plugin page of Ikiwiki" (http:/ / ikiwiki. info/ plugins/ creole/ ). Ikiwiki.info. . Retrieved 2009-08-10.<br />

[10] debian/copyright (http:/ / packages. debian. org/ changelogs/ pool/ main/ i/ ikiwiki/ current/ copyright). Retrieved March 20, 2008.<br />

[11] License at ikiwiki web page (http:/ / ikiwiki. info/ freesoftware/ )<br />

[12] "ikiwiki.info/todo/structured_page_data" (http:/ / ikiwiki. info/ todo/ structured_page_data). . Retrieved 2010-01-29.<br />

External links<br />

• Official website (http:/ / ikiwiki. info/ )<br />

• ikiwiki at WikiMatrix (http:/ / www. wikimatrix. org/ show/ ikiwiki)


Subversion (software) 25<br />

Subversion (software)<br />

Developer(s) Community, and developers from CollabNet, Elego, VisualSVN, WANdisco<br />

Initial release October 20, 2000<br />

Stable release<br />

Development status Active<br />

Written in C<br />

Operating system Cross-platform<br />

Type Revision control<br />

License Apache License<br />

1.6.13 [1] (October 1, 2010) [ +/− [1]<br />

]<br />

Website http:/ / subversion. apache. org/<br />

In software development, Apache Subversion (formerly called Subversion [2] , command name svn (Swedish<br />

pronunciation: [svɛn]) ) is a revision control system founded and sponsored in 2000 by CollabNet Inc. Developers use<br />

Subversion to maintain current and historical versions of files such as source code, web pages, and documentation.<br />

Its goal is to be a mostly-compatible successor to the widely used Concurrent Versions System (CVS).<br />

The open source community has used Subversion widely: for example in projects such as Apache Software<br />

Foundation, Free Pascal, FreeBSD, GCC, Django, Ruby, Mono, <strong>Source</strong>Forge, ExtJS, Tigris.org, PHP, Python and<br />

MediaWiki. Google Code also provides Subversion hosting for their open source projects. Bounty<strong>Source</strong> systems<br />

use it exclusively. CodePlex offers access to Subversion as well as to other types of clients.<br />

The corporate world has also started to adopt Subversion. A 2007 report by Forrester <strong>Research</strong> recognized<br />

Subversion as the sole leader in the Standalone Software Configuration Management (SCM) category and as a strong<br />

performer in the Software Configuration and Change Management (SCCM) category. [3]<br />

Subversion uses the Apache License, making it free software and open source.<br />

History<br />

The Subversion project was founded by CollabNet in 2000 as an effort to write an open-source version-control<br />

system which operated much like CVS but which fixed the bugs and supplied some features missing in CVS. By<br />

2001, Subversion had advanced sufficiently to host its own source code. [4] In November 2009 Subversion was<br />

accepted into Apache Incubator: this marked the beginning of the process to become a standard top-level Apache<br />

project. [5] It became a top-level Apache project on February 17, 2010. [6]<br />

Features<br />

• Commits as true atomic operations (interrupted commit operations would otherwise cause repository<br />

inconsistency or corruption).<br />

• Renamed/copied/moved/removed files retain full revision history.<br />

• The system maintains versioning for directories, renames, and file metadata (but not for timestamps). Users can<br />

move and/or copy entire directory-trees very quickly, while retaining full revision history.<br />

• Versioning of symbolic links.<br />

• Native support for binary files, with space-efficient binary-diff storage.


Subversion (software) 26<br />

• Apache HTTP Server as network server, WebDAV/Delta-V for protocol. There is also an independent server<br />

process called svnserve that uses a custom protocol over TCP/IP.<br />

• Branching and tagging as cheap operations, independent of file size (though Subversion itself does not distinguish<br />

between a tag, a branch, and a directory)<br />

• Natively client–server, layered library design.<br />

• Client/server protocol sends diffs in both directions.<br />

• Costs proportional to change size, not to data size.<br />

• Parsable output, including XML log output.<br />

• Open source licensed — Apache License in the projected 1.7 release; prior versions use a derivative of the<br />

Apache Software License, v1.1<br />

• Internationalized program messages.<br />

• File locking for unmergeable files ("reserved checkouts").<br />

• Path-based authorization.<br />

• Language bindings for C#, PHP, Python, Perl, and Java.<br />

• Full MIME support - users can view or change the MIME type of each file, with the software knowing which<br />

MIME types can have their differences from previous versions shown.<br />

Repository types<br />

Subversion offers two types of repository storage — FSFS and Berkeley DB.<br />

FSFS<br />

FSFS works faster on directories with a large number of files and takes less disk space, due to less logging. [7]<br />

Beginning with Subversion 1.2, FSFS is the default data store for new repositories.<br />

Berkeley DB<br />

Subversion has some limitations with Berkeley DB usage when a program that accesses the database crashes or<br />

terminates forcibly. No data loss or corruption occurs, but the repository is offline while Berkeley DB replays the<br />

journal and cleans up any outstanding locks. When using Berkeley DB repository, the only way to use it safely is on<br />

the dedicated server and by a single server process running as one user, according to Version <strong>Control</strong> with<br />

Subversion. [8] Existing tools for Berkeley DB repository recovery aren't completely reliable, so system<br />

administrators need to make frequent repository backups .<br />

Repository access<br />

Access to Subversion repositories can take place by the following means:<br />

1. Local filesystem or network filesystem, [9] accessed by client directly. This mode uses the file:///path<br />

access scheme.<br />

2. WebDAV/Delta-V (over http or https) using the mod_dav_svn module for Apache 2. This mode uses the<br />

http://host/path access scheme or https://host/path for secure connections using ssl.<br />

3. Custom "svn" protocol (default port 3690), using plain text or over SSH. This mode uses either the<br />

svn://host/path access scheme for unencrypted transport or svn+ssh://host/path scheme for<br />

tunneling over ssh.<br />

All three means can access both FSFS and Berkeley DB repositories.<br />

Any 1.x version of a client can work with any 1.x server. Newer clients and servers have additional features and<br />

performance capabilities, but have fallback support for older clients/servers. [10]


Subversion (software) 27<br />

Layers<br />

Internally, a Subversion system comprises several libraries arranged as layers. Each performs a specific task and<br />

allows developers to create their own tools at the desired level of complexity and specificity.<br />

Fs<br />

Repos<br />

The lowest level; it implements the versioned filesystem which stores the user data.<br />

Concerned with the repository built up around the filesystem. It has many helper functions and handles the<br />

various "hooks" that a repository may have, e.g. scripts that run when an action is performed. Together, Fs and<br />

Repos constitute the "filesystem interface".<br />

mod_dav_svn<br />

Provides WebDAV/Delta-V access through Apache 2.<br />

Ra file:///path/ for local access, http://host/path/ or https://host/path/ for WebDAV access, or svn://host/path/ or<br />

svn+ssh://host/path/ for the SVN protocol.<br />

Client, Wc<br />

Handles "repository access", both local and remote. From this point on, repositories are referred to using<br />

URLs, e.g.<br />

The highest level. It abstracts repository access and provides common client tasks, such as authenticating users<br />

or comparing versions. Subversion clients use the Wc library to manage the local working copy.<br />

Filesystem<br />

One can view the Subversion filesystem as<br />

"two-dimensional" [11] . Two coordinates are used to<br />

unambiguously address filesystem items:<br />

• Path (regular path of Unix-like OS filesystem)<br />

• Revision<br />

Each revision in a Subversion filesystem has its own<br />

root, which is used to access contents at that revision.<br />

Files are stored as links to the most recent change; thus<br />

a Subversion repository is quite compact. The system<br />

consumes storage space proportional to the number of<br />

changes made, not to the number of revisions.<br />

The Subversion filesystem uses transactions to keep<br />

changes atomic. A transaction operates on a specified<br />

revision of the filesystem, not necessarily the latest.<br />

The transaction has its own root, on which changes are<br />

made. It is then either committed and becomes the<br />

latest revision, or is aborted. The transaction is actually<br />

a long-lived filesystem object; a client does not need to<br />

commit or abort a transaction itself, rather it can also<br />

begin a transaction, exit, and then can re-open the<br />

transaction and continue using it. Multiple clients can<br />

access the same transaction and work together on an<br />

atomic change, though no existing clients expose this capability.


Subversion (software) 28<br />

Properties<br />

One important feature of the Subversion filesystem is properties: simple name=value pairs of text. Properties occur<br />

in two different places in the Subversion filesystem. The first is on filesystem entries (i.e., files and directories).<br />

These are versioned just like other changes to the filesystem. Users can add any property they wish, and the<br />

Subversion client uses a set of properties, which it prefixes with 'svn:'.<br />

svn<br />

svn<br />

svn<br />

svn<br />

svn<br />

svn<br />

svn<br />

svn<br />

svn<br />

executable : Makes files on Unix-hosted working copies executable.<br />

mime-type : Stores the MIME type of a file. Affects the handling of diffs and merging.<br />

ignore : A list of filename patterns to ignore in a directory. Similar to CVS's .cvsignore file.<br />

keywords : A list of keywords to substitute into a file when changes are made. The file itself must also<br />

reference the keywords as $keyword$ or $keyword:...$. This is used to maintain certain information<br />

(e.g., author, date of last change, revision number) in a file without human intervention.<br />

The keyword substitution mechanism originates from rcs [12] and from cvs.<br />

eol-style : Makes the client convert end-of-line characters in text files. Used when the working copy is<br />

needed with a specific EOL style. "native" is commonly used, so that EOL's match the user's OS EOL style.<br />

Repositories may require this property on all files to prevent inconsistent line endings, which can cause a<br />

problem in itself.<br />

externals : Allows parts of other repositories to be automatically checked-out into a sub-directory.<br />

needs-lock : Specifies that a file is to be checked out with file permissions set to read-only. This is<br />

designed for use with the locking mechanism. The read-only permission reminds one to obtain a lock before<br />

modifying the file: obtaining a lock makes the file writable, and releasing the lock makes it read-only again.<br />

Locks are only enforced during a commit operation. Locks can be used without setting this property. However,<br />

that is not recommended, because it introduces the risk of someone modifying a locked file; they will only<br />

discover it has been locked when their commit fails.<br />

special : This property isn't meant to be set or modified directly by users. As of 2010 only used for having<br />

symbolic links in the repository. When a symbolic link is added to the repository, a file containing the link<br />

target is created with this property set. When a Unix-like system checks out this file, the client converts it to a<br />

symbolic link.<br />

mergeinfo : Used to track merge data (revision numbers) in Subversion 1.5 (or later). This property is<br />

automatically maintained by the merge command, and it is not recommended to change its value<br />

manually. [13]<br />

Subversion also uses properties on revisions themselves. Like the above properties on filesystem entries the names<br />

are completely arbitrary, with the Subversion client using certain properties prefixed with 'svn:'. However, these<br />

properties are not versioned and can be changed later.<br />

svn


Subversion (software) 29<br />

svn<br />

svn<br />

date : the date and time stamp of a revision<br />

author : the name of the user that submitted the change(s)<br />

log : the user-supplied description of the change(s)<br />

Branching and tagging<br />

Subversion uses the inter-file branching model from Perforce [14] to handle branches and tags. A branch is a separate<br />

line of development. [15] Tagging involves creating a snapshot of the repository's content, which, unlike a branch, is<br />

not expected to change in the future.<br />

The system sets up a new branch or tag by using the 'svn copy' command, which should be used in place of the<br />

native operating system mechanism. Subversion does not create an entire new file version in the repository with its<br />

copy. Instead, the old and new versions are linked together internally and the history is preserved for both. The<br />

copied versions take up only a little extra room in the repository because Subversion saves only the differences from<br />

the original versions.<br />

All the versions in each branch maintain the history of the file up to the point of the copy, plus any changes made<br />

since. One can "merge" changes back into the trunk or between branches. To Subversion, the only difference<br />

between tags and branches is that changes should not be checked into the tagged versions. Due to the differencing<br />

algorithm, creating a tag or a branch takes very little additional space in the repository.<br />

Current limitations and problems<br />

Visualization of a simple Subversion project<br />

A known problem in Subversion affects the implementation of the file and directory rename operation. As of 2010,<br />

Subversion implements the renaming of files and directories as a "copy" to the new name followed by a "delete" of<br />

the old name. Only the names change, all data relating to the edit history remains the same, and Subversion will still<br />

use the old name in older revisions of the "tree". However, Subversion may become confused when files are<br />

modified and moved in the same commit. This can also cause problems when a move conflicts with edits made<br />

elsewhere, [16] for example during merging branches. [17] The Subversion 1.5 release addressed some of these<br />

scenarios while others remain problematic. [18]<br />

As of 2010 Subversion lacks some repository-administration and -management features. For instance, someone may<br />

wish to edit the repository to permanently remove all historical records of certain data. Subversion does not have<br />

built-in support to achieve this simply. [19]<br />

Subversion stores additional copies of data on the local machine, which can become an issue with very large projects<br />

or files, or if developers work on multiple branches simultaneously. These .svn directories on the client side can<br />

become corrupted by ill-advised user activity. [20] The "svn cleanup" command helps in case of internal lock caused


Subversion (software) 30<br />

by unfinished operation.<br />

Subversion does not store the modification times of files. As such, a file checked out of a subversion repository will<br />

have the 'current' date (instead of the modification time in the repository), and a file checked into the repository will<br />

have the date of the check-in (instead of the modification time of the file being checked in). This might not always<br />

be what is wanted. [21] To mitigate this third party solutions exist that allow for preserving modification time and<br />

[22] [23]<br />

other filesystem meta-data.<br />

Subversion does not use a distributed revision control model. Ben Collins-Sussman, one of the designers of<br />

Subversion, believes a centralised model would help prevent "insecure programmers" from hiding their work from<br />

other team members. [24] Some users of version control systems see the centralised model as detrimental; famously,<br />

Linus Torvalds attacked [25] Subversion's model and its developers (calling them "morons").<br />

While Subversion stores filenames as Unicode, it does not specify if precomposition or decomposition is used for<br />

certain accented characters (such as é). Thus, files added in SVN clients running on some operating systems (such as<br />

OS X) use decomposition encoding, while clients running on other operating systems (such as Linux) use<br />

precomposition encoding, with the consequence that those accented characters do not display correctly if the local<br />

[26] [27]<br />

SVN client is not using the same encoding as the client used to add the files.<br />

By design, the svn log command is always recursive: trying to access the history of a directory systematically pulls<br />

out the history of its entire hierarchy. A workaround is not to use the command line but use a sophisticated SVN<br />

client with filtering capabilities.<br />

Subversion tags<br />

This subsection focuses on tags but parts of it also apply to branches.<br />

Revision numbers are difficult to remember in any version-control system. For this reason most systems offer<br />

symbolic tags as user-friendly references to them. Subversion does not have such a feature and what its<br />

documentation recommends to use instead is very different in nature. Instead of implementing tags as references to<br />

points in history, Subversion recommends taking snapshots and storing them in a well-known subdirectory ("tags/")<br />

in the space of the repository tree.<br />

This history-to-space projection causes at least two problems:<br />

1. Once a snapshot has been taken, the system does not remember which revision it came from. This is the difference<br />

between a copy and a reference. This makes some operations less convenient and others impossible. For instance a<br />

naive svn diff -r tag1:tag2 myfile does not work; it is slightly more complicated than that to achieve. Other<br />

operations like for instance svn log -r tag1:tag2 myfile are just impossible. Only a few predefined references are<br />

available: HEAD, BASE, PREV and COMMITTED.<br />

2. When two (ideally independent) object types live in the repository tree, a "fight to the top" can ensue. In other<br />

words it is often difficult to decide at which level to create the "tags/" subdirectory:<br />

trunk/componentfoo/<br />

/componentbar/<br />

tags/1.1/componentfoo/<br />

/componentbar/<br />

or componentfoo/trunk/<br />

/tags/1.1/<br />

componentbar/trunk/<br />

/tags/1.1/<br />

To address such problems, posters on the Subversion mailing lists have suggested a new feature called "labels" or<br />

"aliases". [28] SVN labels would more closely resemble the "tags" of other systems such as CVS or git. As of 2010<br />

this suggestion has not progressed.


Subversion (software) 31<br />

Development and implementation<br />

CollabNet has continued its involvement with Subversion, but the project runs as an independent open source<br />

community. In November 2009 the project was accepted into the Apache Incubator, aiming to become part of the<br />

Apache Software Foundation's efforts. [29] Since March 2010, the project is formally known as Apache Subversion,<br />

being a part of the Apache Top-Level Projects. [30]<br />

In October 2009 WANdisco announced the hiring of core Subversion committers as the company moved to become<br />

a major corporate sponsor of the project. This included Hyrum Wright, president of the Subversion Corporation and<br />

release manager for the Subversion project since early 2008, who joined the company to lead its open source<br />

team. [31]<br />

The Subversion open-source community does not provide binaries, but potential users can download binaries [32]<br />

from volunteers. While the Subversion project does not include an official graphical user interface (GUI) for use<br />

with Subversion, third parties have developed a number of different GUIs, along with a wide variety of additional<br />

ancillary software.<br />

Development Roadmap<br />

The Subversion committers normally have at least one or two new features under active development at any one<br />

time. As of January 2010 the major goals for the next version of Subversion included a streamlined HTTP transport<br />

to improve performance and a rewritten working-copy library. [33]<br />

Other work in progress includes SubversionJ (a JAVA API) and implementation of the Obliterate command, similar<br />

to that provided by Perforce. Both of these enhancements are being sponsored by WANdisco. [34]<br />

<strong>Source</strong> code hosting with SVN<br />

The following websites provide free source code hosting for SVN repositories:<br />

• Alioth<br />

• Assembla<br />

• BerliOS<br />

• Betavine<br />

• Freepository<br />

See also<br />

• List of revision control software<br />

• Comparison of revision control software<br />

• Comparison of Subversion clients<br />

• Subversion also integrates with Aba_CM_Enablement<br />

Notes<br />

[1] http:/ / en. wikipedia. org/ wiki/ Template%3Alatest_stable_software_release%2Fsubversion<br />

[2] "Subversion becomes Apache Subversion" (http:/ / subversion. apache. org/ news. html#news-20100217). Apache Software Foundation. .<br />

[3] "The Forrester Wave: Software Change and Configuration Management, Q2 2007" (http:/ / www. collab. net/ forrester_wave_report/ index.<br />

html). Forrester <strong>Research</strong>. .<br />

[4] "Subversion's History", section of Version <strong>Control</strong> with Subversion (http:/ / svnbook. red-bean. com/ ), version 1.4<br />

[5] Subversion joins forces with Apache (http:/ / www. sdtimes. com/ link/ 33886) by David Rubinstein in SD Times November 4, 2009.<br />

[6] (http:/ / subversion. wandisco. com/ component/ content/ article/ 1/ 43. html) via subversion community<br />

[7] Strategies for Repository Deployment (http:/ / svnbook. red-bean. com/ en/ 1. 4/ svn. reposadmin. planning. html#svn. reposadmin. basics.<br />

backends)


Subversion (software) 32<br />

[8] Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. "SVN Documentation Chapter 5" (http:/ / svnbook. red-bean. com/ en/ 1. 4/<br />

svn. reposadmin. planning. html#svn. reposadmin. basics. backends. bdb). O'Reilly. .<br />

[9] Berkeley DB relies on file locking and thus should not be used on (network) filesystems which do not implement them<br />

[10] SVN 1.5 release notes (http:/ / subversion. tigris. org/ svn_1. 5_releasenotes. html)<br />

[11] Basic Merging (http:/ / svnbook. red-bean. com/ nightly/ en/ svn. branchmerge. basicmerging. html#svn. branchmerge. basicmerging.<br />

resurrect)<br />

[12] http:/ / www. openbsd. org/ cgi-bin/ man. cgi?query=rcs& sektion=1#KEYWORD+ SUBSTITUTION Keyword substitution keywords in<br />

cvs(1)<br />

[13] Subversion Properties (http:/ / svnbook. red-bean. com/ en/ 1. 5/ svn. ref. properties. html)<br />

[14] Inter-File Branching: A Practical Method for Representing Variants (http:/ / www. perforce. com/ perforce/ branch. html)<br />

[15] Branching / Tagging — TortoiseSVN (http:/ / tortoisesvn. net/ docs/ release/ TortoiseSVN_en/ tsvn-dug-branchtag. html)<br />

[16] Implement true renames (http:/ / subversion. tigris. org/ issues/ show_bug. cgi?id=898)<br />

[17] Advanced Merging (http:/ / svnbook. red-bean. com/ en/ 1. 5/ svn. branchmerge. advanced. html#svn. branchmerge. advanced. moves)<br />

[18] Copy/move-related improvements in Subversion 1.5 (http:/ / subversion. tigris. org/ svn_1. 5_releasenotes. html#copy-move-improvements)<br />

[19] svn obliterate (http:/ / subversion. tigris. org/ issues/ show_bug. cgi?id=516)<br />

[20] Downsides of Subversion 1.4 for configuration management in large (http:/ / www. docstoc. com/ docs/ 15112930/<br />

Downsides-of-Subversion-14-for-configuration-management-in-large)<br />

[21] Issue 1256 (http:/ / subversion. tigris. org/ issues/ show_bug. cgi?id=1256) at Tigris.org<br />

[22] FreezeAttrib (saves/restores file attributes using properties) (http:/ / sourceforge. net/ projects/ freezeattrib/ files/ )<br />

[23] FSVS (Fast System VerSioning) (http:/ / fsvs. tigris. org/ )<br />

[24] Programmer Insecurity @ iBanjo (http:/ / blog. red-bean. com/ sussman/ ?p=96)<br />

[25] Google Tech Talk video (http:/ / www. youtube. com/ watch?v=4XpnKHJAok8) and its transcript (https:/ / git. wiki. kernel. org/ index. php/<br />

LinusTalk200705Transcript)<br />

[26] subversion: Issue 2464 (http:/ / subversion. tigris. org/ issues/ show_bug. cgi?id=2464)<br />

[27] SmartSVN - Subversion/SVN Client: Problems with umlauts in file names on Mac OS X (http:/ / www. syntevo. com/ smartsvn/<br />

techarticles. html?page=problems. macos-special-characters)<br />

[28] Subversion mailing lists (http:/ / svn. haxx. se/ users/ )<br />

[29] http:/ / www. open. collab. net/ news/ press/ 2009/ svn-asf. html Collabnet Press Release<br />

[30] http:/ / www. open. collab. net/ news/ press/ 2010/ apache. html Collabnet Press Release regarding Apache subversion<br />

[31] http:/ / opensource. sys-con. com/ node/ 1239202 WANdisco Press Release<br />

[32] http:/ / subversion. apache. org/ packages. html<br />

[33] http:/ / subversion. apache. org/ roadmap. html Subversion Roadmap<br />

[34] http:/ / www. cmcrossroads. com/ index. php?Itemid=100152& catid=101:news-and-announcements&<br />

id=13065:wandisco-presents-new-initiatives-for-the-subversion-open-source-project-& option=com_content& view=article WANdisco Press<br />

Release on CM Crossroads<br />

References<br />

• C. Michael Pilato, Ben Collins-Sussman, Brian W. Fitzpatrick; Version <strong>Control</strong> with Subversion; O'Reilly; ISBN<br />

0-596-00448-6 (1st edition, paperback, 2004, full book online (http:/ / svnbook. red-bean. com/ ), mirror (http:/ /<br />

mentalpointer. com/ Subversion/ svn-book. html))<br />

• Garrett Rooney; Practical Subversion; Apress; ISBN 1-59059-290-5 (1st edition, paperback, 2005)<br />

• Mike Mason; Pragmatic Version <strong>Control</strong> Using Subversion; Pragmatic Bookshelf; ISBN 0-9745140-6-3 (1st<br />

edition, paperback, 2005)<br />

• William Nagel; Subversion Version <strong>Control</strong>: Using the Subversion Version <strong>Control</strong> System in Development<br />

Projects; Prentice Hall; ISBN 0-13-185518-2 (1st edition, paperback, 2005)


Subversion (software) 33<br />

Further reading<br />

• Dispelling Subversion FUD (http:/ / www. red-bean. com/ sussman/ svn-anti-fud. html) by Ben Collins-Sussman<br />

(Subversion developer), as of 2004-12-21<br />

External links<br />

• Official Site (http:/ / subversion. apache. org)<br />

• Previous official site (http:/ / subversion. tigris. org/ ) Not all content has yet been migrated to the new official site.<br />

• Version <strong>Control</strong> with Subversion (http:/ / svnbook. red-bean. com/ ), an O'Reilly book available for free online<br />

• Subversion (http:/ / www. dmoz. org/ Computers/ Software/ Configuration_Management/ Tools/ Subversion/ / )<br />

at the Open Directory Project<br />

• HOWTO setup Subversion for Windows with Apache (http:/ / svn. spears. at/ ) (English)<br />

• Subversion usage Tutorial (http:/ / pointbeing. net/ weblog/ 2009/ 03/ command-line-subversion-tutorial-part-1.<br />

html)<br />

• Subversion Community Site (http:/ / subversion. wandisco. com)<br />

List of revision control software<br />

This is a list of notable software for revision control.<br />

Local only<br />

In the local-only approach, all developers must use the same computer system.<br />

Free<br />

• Revision <strong>Control</strong> System (RCS) — features separate backward deltas for faster access to the trunk tip compared<br />

to SCCS and an improved user interface, at the cost of slow branch tip access and missing support for<br />

included/excluded deltas<br />

• <strong>Source</strong> Code <strong>Control</strong> System (SCCS) — part of UNIX; based on interleaved deltas, can construct versions as<br />

arbitrary sets of revisions<br />

Distributed model<br />

In the distributed approach, each developer works directly with his or her own local repository, and changes are<br />

shared between repositories as a separate step.<br />

Open source<br />

• Aegis — written by Peter Miller, mature software, filesystem-oriented, limited network support. It has support for<br />

distributed revision control.<br />

• ArX — written by Walter Landry, started as a fork of GNU arch, but has been completely rewritten<br />

• Bazaar — written in Python, originally by Martin Pool and sponsored by Canonical; decentralised, and aims to be<br />

fast and easy to use; can losslessly import Arch archives<br />

• Codeville — written in Python originally by Ross Cohen; uses an innovative merging algorithm<br />

• Darcs — written in Haskell and originally developed by David Roundy; can keep track of inter-patch<br />

dependencies and automatically rearrange and "cherry-pick" them using a "theory of patches"<br />

• DCVS — decentralized and CVS-based<br />

• Fossil — written by D. Richard Hipp for SQLite; distributed revision control, wiki, and bug-tracking


List of revision control software 34<br />

• Git — written in a collection of Perl, C, and various shell scripts, designed by Linus Torvalds based on the needs<br />

of the Linux kernel project; decentralised, and aims to be fast, flexible, and robust<br />

• GNU arch<br />

• Libre<strong>Source</strong> — configuration management<br />

• Mercurial — written in Python as an Open <strong>Source</strong> replacement to BitKeeper; decentralised and aims to be fast,<br />

lightweight, portable, and easy to use<br />

• Monotone — developed by the Monotone Team; decentralized in a peer-to-peer way<br />

• SVK — written in Perl by Kao Chia-liang; built on top of Subversion to allow distributed commits<br />

Proprietary<br />

• BitKeeper — was used in Linux kernel development (2002 – April 2005)<br />

• Code Co-op — peer-to-peer version control system (can use e-mail for synchronization)<br />

• Sun WorkShop TeamWare — designed by Larry McVoy, creator of BitKeeper<br />

Client-server model<br />

In the client-server model, developers use a shared single repository.<br />

Open source<br />

• Concurrent Versions System (CVS) — originally built on RCS<br />

• CVSNT - cross-platform port of CVS that allows case insensitive file names among other changes<br />

• OpenCVS - compatible with CVS, with emphasis put on security and source code correctness<br />

• Subversion (svn) — initially released in 2000 [1] .<br />

• Vesta — build system with a versioning file system and support for distributed repositories<br />

Proprietary<br />

• AccuRev — source configuration management tool with integrated issue tracking based on "Streams" that<br />

efficiently manages parallel and global development; replication server is also available<br />

• AllFusion Harvest Change Manager — change and configuration management tool by Computer Associates<br />

• Autodesk Vault - Version control tool specifically designed for Autodesk applications managing the complex<br />

relationships between design files such as AutoCAD and Autodesk Inventor.<br />

• ClearCase — SCC compliant configuration management system by IBM Rational Software<br />

• IBM Configuration Management Version <strong>Control</strong> (CMVC) — version control system, no longer available.<br />

• IC Manage Global Design Platfomr (GDP) – design data management for IC design and Perforce infrastructure<br />

support.<br />

• codeBeamer - Collaboration and application lifecycle management platform<br />

• Perforce — Free for use in open source projects.<br />

• Polytron Version <strong>Control</strong> System (PVCS) — originally developed by Don Kinzer at Polytron, first released in<br />

1985<br />

• Quma Version <strong>Control</strong> System<br />

• StarTeam — coordinates and manages software delivery process by Borland; centralized control of digital assets<br />

and activities<br />

• Telelogic Synergy - SCC compliant integrated change management and task-based configuration management<br />

system,Proprietary of IBM.<br />

• Vault — version control tool by <strong>Source</strong>Gear (First installation can be used for free)<br />

• Visual <strong>Source</strong>Safe — version control tool by Microsoft; oriented toward small teams


List of revision control software 35<br />

• Visual Studio Team System — process-based client-server suite of tools by Microsoft for larger development<br />

organizations, incorporating work item tracking, reporting, build automation, unit and web testing, and integration<br />

with Microsoft Office<br />

Notes<br />

[1] http:/ / svn. collab. net/ repos/ svn/ trunk/ CHANGES<br />

See also<br />

• Comparison of revision control software<br />

• Revision control<br />

• Comparison of free software hosting facilities<br />

External links<br />

Other comparisons<br />

• Comments on Open <strong>Source</strong> Software / Free Software (OSS/FS) Software Configuration Management (SCM)<br />

Systems (http:/ / www. dwheeler. com/ essays/ scm. html)<br />

• Quick Reference Guide to Free Software Revision <strong>Control</strong> Systems (http:/ / zooko. com/<br />

revision_control_quick_ref. html)<br />

• A comparison of some of both proprietary and free of these revision control systems (http:/ / better-scm. berlios.<br />

de/ comparison/ )<br />

• Version-<strong>Control</strong> Systems for Linux (http:/ / linuxmafia. com/ faq/ Apps/ vcs. html)<br />

• SCM Price / Feature Comparison (http:/ / www. relisoft. com/ co_op/ vcs_compare. html) ( from the creators of<br />

Code Co-op )<br />

Further reading<br />

• Bram Cohen's blog entry on version control politics surrounding the Linux kernel (http:/ / www. livejournal. com/<br />

users/ bramcohen/ 17319. html) (founder and contributor of Codeville), as of 2005-04-23<br />

• Dispelling Subversion FUD (http:/ / www. red-bean. com/ sussman/ svn-anti-fud. html) by Ben Collins-Sussman<br />

(Subversion developer), as of 2004-12-21<br />

• LWN article (http:/ / lwn. net/ Articles/ 132000/ ): "The Monotone version control system", as of 2005-04-13<br />

• Configuration Management Tools (http:/ / www. dmoz. org/ Computers/ Software/ Configuration_Management/<br />

Tools/ ) at the Open Directory Project<br />

• IETF Delta-V Working Group (http:/ / www. webdav. org/ deltav/ ) -- Extending the Web with versioning and<br />

configuration management... (WebDAV)


Comparison of revision control software 36<br />

Comparison of revision control software<br />

The following tables compare general and technical information for notable revision control and software<br />

configuration management (SCM) software. This article is not all-inclusive and may become out of date quickly.<br />

General information<br />

Software Maintainer Development<br />

AccuRev<br />

Bazaar<br />

BitKeeper<br />

ClearCase<br />

Code Co-op<br />

Codeville<br />

CVS<br />

CVSNT<br />

darcs<br />

Fossil<br />

Git<br />

GNU arch<br />

status<br />

AccuRev, Inc. actively<br />

Canonical<br />

Ltd.<br />

developed<br />

actively<br />

developed<br />

BitMover Inc. actively<br />

developed<br />

IBM Rational actively<br />

Reliable<br />

Software<br />

Ross Cohen<br />

The CVS<br />

Team [4]<br />

March Hare<br />

Software [5]<br />

and<br />

community<br />

members.<br />

The Darcs<br />

team<br />

D. Richard<br />

Hipp<br />

developed<br />

actively<br />

developed<br />

official site [3]<br />

offline; latest<br />

release July 13,<br />

2007<br />

maintained but<br />

new features not<br />

added<br />

maintained and<br />

new features<br />

under<br />

development<br />

actively<br />

developed<br />

actively<br />

developed<br />

Junio Hamano actively<br />

developed<br />

Andy Tai maintained but<br />

new features not<br />

added<br />

Repository model Concurrency<br />

model<br />

Client–server Merge or<br />

lock<br />

Distributed [1] Merge<br />

Distributed Merge<br />

Client–server<br />

Merge or<br />

lock [2]<br />

Distributed Merge<br />

Distributed Merge<br />

Client–server Merge<br />

Client–server Merge or<br />

lock<br />

Distributed Merge<br />

Distributed Merge<br />

Distributed Merge<br />

Distributed Merge<br />

License Platforms<br />

Proprietary<br />

GPL<br />

Proprietary<br />

Proprietary<br />

Proprietary<br />

BSD<br />

GPL<br />

GPL or<br />

proprietary<br />

GPL<br />

BSD<br />

GPL<br />

GPL<br />

supported<br />

Any Java Platform<br />

(Unix-like,<br />

Windows, Mac<br />

OS X)<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

Linux, Windows,<br />

AIX, Solaris, HP<br />

UX, i5/OS,<br />

OS/390, z/OS,<br />

Cost<br />

Non-free $1495<br />

(enterprise) for each<br />

license, free 5-user 30<br />

day trial licenses<br />

available<br />

Free<br />

Non-free Quoted on<br />

an individual basis.<br />

Non-free $4600 per<br />

floating license (held<br />

for 30-minutes<br />

minimum per user)<br />

Windows Non-free $150 per<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

Unix-like,<br />

Windows, Mac<br />

OS X, i5/OS<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

POSIX, Windows,<br />

Mac OS X, Other<br />

POSIX, Windows,<br />

Mac OS X<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

seat<br />

Free<br />

Free<br />

Free for older version<br />

or £85 commercial<br />

license for latest<br />

version of CVS Suite<br />

or Change<br />

Management Server<br />

Free<br />

Free<br />

Free<br />

Free


Comparison of revision control software 37<br />

IC Manage<br />

Libre<strong>Source</strong><br />

Synchronizer<br />

Mercurial<br />

MKS<br />

Monotone<br />

Perforce<br />

Rational<br />

Team<br />

Concert[10]<br />

StarTeam<br />

Subversion<br />

(SVN)<br />

SVK<br />

Team<br />

Foundation<br />

Server<br />

Synergy<br />

Vault<br />

Visual<br />

<strong>Source</strong>Safe<br />

IC Manage<br />

Inc.<br />

Artenum [6]<br />

actively<br />

developed<br />

maintained and<br />

new features<br />

under<br />

development<br />

Matt Mackall actively<br />

developed<br />

MKS Inc actively<br />

Nathaniel<br />

Smith,<br />

Graydon<br />

Hoare<br />

Perforce<br />

Software Inc.<br />

developed<br />

actively<br />

developed<br />

actively<br />

developed<br />

IBM Rational actively<br />

Borland<br />

(Micro Focus)<br />

CollabNet,<br />

Inc.[11]<br />

Best Practical<br />

[14]<br />

developed<br />

actively<br />

developed<br />

actively<br />

developed<br />

maintenance<br />

through 2010,<br />

no new<br />

features [15]<br />

Microsoft actively<br />

developed<br />

IBM Rational actively<br />

<strong>Source</strong>Gear<br />

LLC [17]<br />

developed<br />

actively<br />

developed<br />

Microsoft serious bug<br />

fixes only<br />

Software Maintainer Development<br />

status<br />

Client–server Merge or<br />

Client–server<br />

extended to<br />

"tree" [7]<br />

lock Proprietary<br />

Merge<br />

Distributed Merge<br />

Client–server Merge or<br />

lock<br />

Distributed Merge<br />

Client–server Merge or<br />

lock<br />

Client–server Merge or<br />

lock<br />

Client–server Merge or<br />

Client–server [12]<br />

GPL [8]<br />

GPL<br />

Proprietary<br />

GPL<br />

Proprietary<br />

Proprietary<br />

lock Proprietary<br />

Merge or<br />

lock [13]<br />

Distributed Merge<br />

Client–server Merge or<br />

Client–server and<br />

Distributed<br />

lock<br />

Merge or<br />

lock<br />

Client–server Merge or<br />

lock<br />

Shared Folder Merge or<br />

lock<br />

Repository model Concurrency<br />

model<br />

Apache/BSD<br />

style<br />

Artistic/GPL<br />

Proprietary<br />

Proprietary<br />

Proprietary<br />

Proprietary<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

Unix-like,<br />

Windows<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

Linux, Windows,<br />

AIX, Solaris, HP<br />

UX, i5/OS,<br />

OS/390, z/OS,<br />

Windows and<br />

Cross-platform via<br />

Java based client<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

Unix-like,<br />

Windows, Mac<br />

OS X<br />

Server: Windows<br />

Server 2003;<br />

Clients: Windows<br />

and Web included<br />

Linux, Windows,<br />

Unix-like<br />

Unix-like, Linux,<br />

Windows<br />

License Platforms<br />

Non-free Commercial<br />

Free<br />

Free<br />

Non-free<br />

Free<br />

Free for up to 2 users,<br />

and for OSS<br />

development; else<br />

$900 per seat, with<br />

volume discounts [9]<br />

Free for up to 10<br />

users; else non-free<br />

Non-free $7500 per<br />

concurrent, $2500 per<br />

fixed user.<br />

Free (Commercial<br />

support/services<br />

available)<br />

Free<br />

Non-free Licensed<br />

through MSDN<br />

subscription or<br />

through direct buy<br />

Non-free Contact IBM<br />

Rational [16]<br />

Non-free $300 per<br />

user<br />

Windows Non-free ~$500 per<br />

supported<br />

license or single<br />

license included with<br />

each MSDN<br />

subscription.<br />

Cost


Comparison of revision control software 38<br />

Table Explanation<br />

• Software: The name of the application that is described.<br />

• Maintainer: The company or group that is currently taking responsibility for the software's maintenance or<br />

development<br />

• Development Status: The current status of the software project<br />

• Repository model: describes the relationship between various copies of the source code repository. In a<br />

client–server model, users access a master repository via a client; typically, their local machines hold only a<br />

working copy of a project tree. Changes in one working copy must be committed to the master repository before<br />

they are propagated to other users. In a distributed model, repositories act as peers, and users typically have a<br />

local repository with version history available, in addition to their working copies.<br />

• Concurrency model: describes how changes to the working copy are managed to prevent simultaneous edits from<br />

causing nonsensical data in the repository. In a lock model, changes are disallowed until the user requests and<br />

receives an exclusive lock on the file from the master repository. In a merge model, users may freely edit files,<br />

but are informed of possible conflicts upon checking their changes into the repository, whereupon the version<br />

control system may merge changes on both sides, or let the user decide when conflicts arise. Note that distributed<br />

version control almost always implies a merge concurrency model.<br />

• License: The license model under which the software is licensed. These can be both free and paid licenses<br />

• Platforms Supported: The operating systems that the software application currently supports.<br />

• Cost: The price of the software application<br />

Technical information<br />

Software Programming<br />

language<br />

History model Scope of<br />

change<br />

Revision IDs Network protocols <strong>Source</strong><br />

Code Size<br />

AccuRev C++, Java Changeset Unknown Numbers custom Unknown<br />

Bazaar<br />

Python, Pyrex,<br />

C [18]<br />

Snapshot Tree Pseudorandom<br />

HTTP, SFTP, FTP, custom, custom<br />

over ssh, custom over HTTP, email<br />

bundles [19] , WebDAV (with plugin)<br />

4.1 MB<br />

BitKeeper C Changeset Tree Unknown Unknown Unknown<br />

ClearCase<br />

Code Co-op<br />

C, Java, Perl Changeset File Numbers HTTP, custom (CCFS), custom<br />

C++ Changeset<br />

Unknown<br />

(MVFS filesystem driver)<br />

User ID-Ordinal e-mail (MAPI, SMTP/POP3, Gmail),<br />

LAN<br />

Unknown<br />

Unknown<br />

Codeville Python Unknown Unknown Unknown Unknown Unknown<br />

CVS C Changeset File Numbers<br />

CVSNT<br />

C++ Changeset<br />

Unknown<br />

pserver [20], ssh<br />

Numbers sspi, sserver, gserver, pserver, custom<br />

over ssh<br />

3.3 MB<br />

4.4MiB<br />

darcs Haskell Patch Tree Numbers HTTP, custom over ssh, email 1.7 MB<br />

Fossil C Snapshot Tree SHA-1 hashes HTTP<br />

Git<br />

C, shell scripts,<br />

Perl<br />

Snapshot Tree SHA-1 hashes custom, custom over ssh, rsync,<br />

HTTP, email, bundles<br />

7.2 MB [21]<br />

10.2 MB<br />

GNU arch C, shell scripts Changeset Tree Numbers WebDAV, HTTP Unknown<br />

IC Manage C++, C Changeset Unknown Numbers custom Unknown<br />

Libre<strong>Source</strong><br />

Synchronizer<br />

Java Changeset<br />

Unknown<br />

Timestamps HTTP, File-System<br />

Unknown


Comparison of revision control software 39<br />

Mercurial<br />

Python, C Changeset Tree<br />

Numbers, [22]<br />

SHA-1 hashes<br />

HTTP, custom over ssh, email<br />

bundles (with standard plugin)<br />

1.2 MB<br />

MKS C, Java Unknown Unknown Numbers HTTP, custom Unknown<br />

Monotone<br />

C++<br />

Hybrid [23] Tree SHA-1 hashes custom (netsync), custom over ssh,<br />

file system<br />

4.4 MB<br />

Perforce C++, C Changeset Tree Numbers custom Unknown<br />

Rational Team<br />

Concert<br />

Java Changeset<br />

Unknown<br />

Numbers REST services over HTTP/HTTPS<br />

Unknown<br />

StarTeam C, Java Snapshot Unknown MD5 hashes custom, TCP/IP Unknown<br />

Subversion<br />

C Changeset and<br />

Snapshot<br />

Tree Numbers custom (svn), custom (svn) over ssh,<br />

HTTP and SSL (using WebDAV)<br />

5.2 MB<br />

SVK Perl Changeset Tree Numbers Unknown Unknown<br />

Synergy<br />

Team<br />

Foundation<br />

Server<br />

Java Changeset (text),<br />

Snapshot(binary)<br />

C++ and C# Changeset<br />

Unknown<br />

Unknown<br />

Numbers HTTP, custom over ssh, custom<br />

Numbers SOAP over HTTP or HTTPS<br />

Unknown<br />

Unknown<br />

Vault C# Changeset Unknown Unknown HTTP, HTTPS Unknown<br />

Visual<br />

<strong>Source</strong>Safe<br />

Software Programming<br />

Table Explanation<br />

C Snapshot<br />

language<br />

History model Scope of<br />

Unknown Unknown<br />

change<br />

• Software: The name of the application that is described.<br />

SMB<br />

Unknown<br />

Revision IDs Network protocols <strong>Source</strong><br />

• Programming Language: The coding language in which the application is being developed<br />

Code Size<br />

• History model: describes the form in which changes are stored in the repository. For example, when a change is<br />

committed, a system could store a copy of the tree before and after the change (snapshot), or it might instead store<br />

a copy of the tree before the change and a changeset representing the changes.<br />

• Scope of change: Describes whether changes are recorded for individual files or for a entire directory trees.<br />

• Revision IDs: are used internally to identify specific versions of files in the repository. Systems may use<br />

pseudorandom identifiers, content hashes of revisions, or filenames with sequential version numbers<br />

(namespace). With Integrated Difference, revisions are based on the Changesets themselves, which can describe<br />

changes to more than one file.<br />

• Network protocols: lists the protocols used for synchronization of changes.<br />

• <strong>Source</strong> Code Size: Gives the size of the source code in megabytes.<br />

Features


Comparison of revision control software 40<br />

Software Atomic<br />

commits<br />

File<br />

renames<br />

Merge<br />

file<br />

renames<br />

Symbolic<br />

links Pre/post-event<br />

hooks<br />

Signed<br />

revisions<br />

Merge<br />

tracking<br />

End of line<br />

conversions<br />

Tags<br />

International<br />

AccuRev Yes Yes Yes Yes Yes Yes Yes Yes N/A Yes<br />

Support<br />

Bazaar Yes Yes Yes Yes Yes Partial [24] Yes Yes [25] Yes Yes Yes<br />

BitKeeper Yes Yes<br />

Unknown Unknown<br />

Unknown Unknown Yes Unknown Yes Unknown<br />

Unicode<br />

filename<br />

support<br />

Unknown<br />

Unknown<br />

ClearCase Partial [26] Yes Yes Yes Yes Yes Yes Yes Yes Yes [27] Unknown<br />

Code Co-op Yes Yes Yes No Partial No No No Yes Unknown<br />

Codeville Unknown Unknown<br />

Unknown Unknown<br />

Unknown Unknown Unknown Unknown Unknown Unknown<br />

CVS No No No No Partial No No Yes Yes Unknown No<br />

CVSNT Yes Yes Yes Yes Yes No Yes Yes Yes Yes Yes<br />

darcs Yes Yes Yes No Yes Yes N/A [28] No Yes No<br />

Fossil Yes Yes<br />

Unknown<br />

No No Yes Yes No Yes Yes<br />

Git Yes Partial [29] Yes Yes Yes Yes Yes Yes Yes Partial [30]<br />

GNU arch Yes Yes<br />

Unknown<br />

Yes Yes Yes<br />

Unknown Unknown Yes Unknown<br />

IC Manage Yes Yes No Yes Yes Yes Yes Yes Yes Yes<br />

Libre<strong>Source</strong><br />

Synchronizer<br />

Software Atomic<br />

Yes Yes Yes No Partial [32] No Yes [33] No Yes Unknown<br />

commits<br />

File<br />

renames<br />

Merge<br />

file<br />

renames<br />

Symbolic<br />

links Pre/post-event<br />

hooks<br />

Signed<br />

revisions<br />

Merge<br />

tracking<br />

End of line<br />

conversions<br />

Tags<br />

International<br />

Support<br />

Mercurial Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes [34] No<br />

MKS No Yes Yes No Yes Unknown No Yes Yes Unknown<br />

Monotone Yes Yes Yes No [35] Yes<br />

Yes,<br />

Unknown<br />

Unknown<br />

Unknown<br />

Unknown<br />

Partial [31]<br />

Unknown<br />

Unknown<br />

Unknown<br />

Unicode<br />

filename<br />

support<br />

Unknown<br />

mandatory Yes Yes Yes Unknown Yes<br />

Perforce Yes Yes [36] No Yes Yes Yes Yes [37] Yes Yes Yes [38]<br />

Rational<br />

Team<br />

Concert<br />

StarTeam Yes [41] Yes<br />

Yes Yes Yes Yes Yes [40] Yes Yes Yes Yes Yes Yes<br />

Unknown<br />

Yes No No Yes Yes Yes Yes<br />

Subversion Yes Yes [42] No Yes Yes No Yes [43] . Yes Partial [44] Yes Yes<br />

SVK Yes Yes Yes Yes Yes [45]<br />

Yes [46] Yes Yes Yes Yes<br />

Yes [39]<br />

Unknown<br />

Unknown


Comparison of revision control software 41<br />

Synergy Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes [47]<br />

Team<br />

Foundation<br />

Server<br />

Yes Yes Yes<br />

Unknown<br />

Yes Unknown Yes Unknown Yes Yes<br />

Vault Yes Yes Yes No Yes No No Yes Yes Unknown<br />

Visual<br />

<strong>Source</strong>Safe<br />

Software Atomic<br />

No [48] Unknown<br />

No<br />

commits<br />

Table Explanation<br />

File<br />

renames<br />

Merge<br />

file<br />

renames<br />

No Yes No No Unknown Yes Yes<br />

Symbolic<br />

links Pre/post-event<br />

hooks<br />

• Software: The name of the application that is described.<br />

Signed<br />

revisions<br />

Merge<br />

tracking<br />

End of line<br />

conversions<br />

Tags<br />

International<br />

Support<br />

• Atomic commits: refers to a guarantee that all changes made are merged, or that no change at all will be made.<br />

• File renames: describes whether a system allows files to be renamed while retaining their version history.<br />

• Merge file renames: describes whether a system can merge changes made to a file on one branch into the same<br />

file that has been renamed on another branch (or vice versa). If the same file has been renamed on both branches<br />

then there is a rename conflict that the user must resolve.<br />

• Symbolic links: describes whether a system allows revision control of symbolic links as with regular files.<br />

Versioning symbolic links is considered by some people a feature and some people a security breach (e.g., a<br />

symbolic link to /etc/passwd). Symbolic links are only supported on select platforms, depending on the software.<br />

• Pre/post event hooks: indicates the capability to trigger commands before or after an action, such as a commit,<br />

takes place.<br />

• Signed revisions: refers to integrated digital signing of revisions, in a format such as OpenPGP.<br />

• Merge tracking: describes whether a system remembers what changes have been merged between which branches<br />

and only merges the changes that are missing when merging one branch into another.<br />

• End of line conversions: describes whether a system can adapt the end of line characters for text files such that<br />

they match the end of line style for the operating system under which it is used. The granularity of control varies.<br />

Subversion, for example, can be configured to handle EOLs differently according to the file type, whereas<br />

Perforce converts all text files according a single, per-client setting.<br />

• Tags: indicates if meaningful names can be given to specific revisions, regardless of whether these names are<br />

called tags or labels.<br />

• International Support: indicates if the software has support for multiple language environments and operating<br />

system<br />

• Unicode filename support: indicates if the software has support for interoperations under file systems using<br />

different character encodings.<br />

Advanced features<br />

Unknown<br />

Unknown<br />

Unknown<br />

Unicode<br />

filename<br />

support


Comparison of revision control software 42<br />

Software RCS<br />

AccuRev<br />

Bazaar<br />

ClearCase<br />

keyword<br />

Interactive<br />

commits<br />

external<br />

references<br />

partial<br />

checkout/clone<br />

Yes Unknown Yes Yes<br />

Yes [49]<br />

Yes [50]<br />

Yes [51] No<br />

permissions timestamp<br />

execution bit<br />

only<br />

execution bit<br />

only<br />

preservation<br />

supported formats<br />

Unknown Unknown<br />

Yes<br />

bzr, subversion [52] , git [53] ,<br />

hg [54] , any that has a<br />

fastexporter<br />

Yes [55] No No Yes Yes Yes N/A<br />

CVS Yes No Yes Yes [56]<br />

darcs No Yes No No [58]<br />

Partial [57] Yes cvs<br />

Partial [59] No darcs<br />

Fossil No Yes No No No Unknown fossil<br />

Git<br />

Mercurial<br />

Rational<br />

Team<br />

Concert<br />

Yes [60]<br />

Yes [65]<br />

Yes [61]<br />

Yes [66]<br />

Yes [62]<br />

No [63]<br />

Yes [67] No<br />

execution bit<br />

only<br />

execution bit<br />

Yes Yes Yes Yes Yes Unknown<br />

only<br />

No [64] git, cvs, subversion, hg, any<br />

that has a fastexporter<br />

No<br />

hg, subversion [68] , git [69] ,<br />

any other format supported by<br />

the Convert extension [70]<br />

SVK Unknown Yes [71] Unknown Yes Unknown Unknown subversion<br />

Subversion<br />

Table Explanation<br />

Yes [72] No Yes [73] Yes Partial [74]<br />

• RCS keyword: Support of RCS commands<br />

N/A<br />

Yes [75] subversion<br />

• Interactive commits: Interactive commits allow the user to cherrypick the patch-hunks that become part of a<br />

commit (leaving unselected changes as changes in the working copy), instead of having only a file-level<br />

granularity. See darcs record [76] .<br />

• external references: embedding of foreign repositories in the source tree<br />

• partial checkout/clone: Ability to check out or clone only a specified subdirectory from a repository.<br />

• permissions: Tracks file permission bits in the revision history.<br />

• timestamp preservation: Overwrites the last modified filesystem attribute with the commit time upon checkout.<br />

• supported formats: either read/write support or read-only (conversion, potentially repeated)<br />

Basic Commands


Software<br />

Comparison of revision control software 43<br />

repository<br />

init<br />

clone pull push local branches checkout<br />

update<br />

add<br />

remove<br />

move copy<br />

merge commit<br />

AccuRev mkdepot No No promote mkstream mkws update add defunct move No merge keep revert No chstream<br />

Bazaar<br />

ClearCase<br />

CVS<br />

darcs<br />

Fossil<br />

Git<br />

Mercurial<br />

Monotone<br />

init clone pull push<br />

init No No No No checkout edcs<br />

create-local-branch [77] checkout update add rm mv No merge commit<br />

mkelem rmname<br />

mv No merge<br />

init No No No No checkout update add rm No No<br />

init get/put pull push<br />

new/open clone pull push clone/open<br />

init / init<br />

--bare<br />

clone<br />

N/A [79] get pull add remove move No<br />

clone/open update add rm/del mv/rename<br />

fetch [81] push branch clone pull add rm mv<br />

init clone pull push<br />

update<br />

-j<br />

pull /<br />

push<br />

No merge commit<br />

cp [then]<br />

git<br />

add [82]<br />

merge commit<br />

bookmark [83] clone pull -u add rm mv copy merge commit<br />

init clone pull push No checkout update add drop rename No merge commit<br />

Perforce Unknown Unknown<br />

SVK svk<br />

depotmap<br />

[or]<br />

svnadmin<br />

create)<br />

Subversion svnadmin<br />

Software<br />

create<br />

repository<br />

init<br />

Unknown Unknown Unknown edit sync add delete move<br />

revert<br />

generate<br />

bundle<br />

file<br />

revert send<br />

checkin uncheckout/rmver<br />

commit remove [then]<br />

update<br />

record revert<br />

revert<br />

Unknown resolve submit revert<br />

mirror pull push svk copy checkout update add rm mv cp merge commit<br />

svnadmin [work-around:] [work-around:]<br />

hotcopy<br />

svnadmin load<br />

svnadmin<br />

dump<br />

No<br />

svn<br />

checkout<br />

clone pull push local branches checkout<br />

Table Explanation<br />

svn<br />

update<br />

update<br />

svn add svn rm svn mv svn cp<br />

add<br />

remove<br />

move copy<br />

svn<br />

merge<br />

svn<br />

merge commit<br />

rebase<br />

rebase [78]<br />

No findmerge<br />

No No<br />

send<br />

-o [80]<br />

Coming<br />

Soon<br />

Unknown Unknown<br />

checkout bundle rebase<br />

revert bundle<br />

rebase<br />

[84]<br />

revert No No<br />

Unknown Unknown<br />

revert No smerge -I<br />

commit svn revert No No<br />

• Commands in green rectangles that are not surrounded by [square brackets] are at an interactive command-line<br />

prompt. Text in [square brackets] is an explanation of where to find equivalent functionality.<br />

• repository init: Create a new empty repository (i.e., version control database)<br />

• clone: Create an identical instance of a repository (in a safe transaction)<br />

• pull: Download revisions from a remote repository to a local repository<br />

• push: Upload revisions from a local repository to a remote repository<br />

• local branches: Create a local branch that does not exist in the original remote repository<br />

• checkout: Create a local working copy from a (remote) repository<br />

• update: Update the files in a working copy with the latest version from a repository<br />

revert<br />

generate<br />

bundle<br />

file<br />

rebase


Comparison of revision control software 44<br />

• add: Mark specified files to be added to repository at next commit<br />

• remove: Mark specified files to be removed at next commit (note: keeps cohesive revision history of before and at<br />

the remove.)<br />

• move: Mark specified files to be moved to a new location at next commit<br />

• copy: Mark specified files to be copied at next commit<br />

• merge: Apply the differences between two sources to a working copy path<br />

• commit: Record changes in the repository<br />

• revert: Restore working copy file from repository<br />

• generate bundle file: Create a file that contains a compressed set of changes to a given repository<br />

• rebase: Forward-port local commits to the updated upstream head<br />

Advanced commands<br />

Software command<br />

AccuRev<br />

Bazaar<br />

aliases<br />

No<br />

lock/unlock<br />

enable file<br />

locking<br />

shelve/unshelve<br />

rollback<br />

alias No shelve/unshelve uncommit<br />

cherry-picking<br />

bisect incoming/outgoing grep<br />

keep / co revert / purge patch No No No<br />

merge<br />

(non-tracking)<br />

Darcs No No revert/unrevert unrecord yes [85]<br />

Git [in<br />

Mercurial<br />

'.gitconfig'<br />

file]<br />

[in '.hgrc'<br />

file]<br />

Monotone [in<br />

No<br />

No<br />

stash/stash<br />

pop [87]<br />

shelve/unshelve<br />

(bundled<br />

extension [88] )<br />

reset --hard<br />

HEAD^<br />

rollback<br />

bisect (bisect<br />

plugin)<br />

missing<br />

--theirs-only/missing<br />

--mine-only<br />

grep<br />

(grep<br />

plugin)<br />

trackdown [86] pull/push --dry-run No<br />

cherry-pick bisect cherry grep<br />

transplant<br />

(bundled<br />

extension [89] )<br />

bisect incoming/outgoing grep<br />

monotonerc] No No kill_rev_locally [90] pluck bisect No No<br />

Perforce No lock/unlock shelve/unshelve obliterate integ [91] Unknown Unknown grep<br />

SVK No No No No svk merge No status [92] No<br />

Subversion No svn lock/unlock No No<br />

Surround<br />

SCM No<br />

Team<br />

Foundation<br />

Server<br />

Unknown<br />

Software command<br />

aliases<br />

Table Explanation<br />

sscm<br />

svnmerge<br />

cherry-picking<br />

yes [93]<br />

status -u [94] No<br />

checkin/checkout No sscm rollback No No sscm diffreport No<br />

[missing<br />

command name]<br />

[missing<br />

lock/unlock shelve<br />

command name] Unknown Yes Unknown Unknown<br />

(stash)/unshelve<br />

rollback<br />

cherry-picking<br />

Unknown<br />

bisect incoming/outgoing grep


Comparison of revision control software 45<br />

• Commands in green rectangles that are not surrounded by [square brackets] are at an interactive command-line<br />

prompt. Text in [square brackets] is an explanation of where to find equivalent functionality.<br />

• command aliases: create custom aliases for specific commands or combination thereof<br />

• lock/unlock: exclusively lock a file to prevent others from editing it<br />

• shelve/unshelve: temporarily set aside part or all of the changes in the working directory<br />

• rollback: remove a patch/revision from history<br />

• cherry-picking: move only some revisions from a branch to another one (instead of merging the branches)<br />

• bisect: binary search of a change<br />

• incoming/outgoing: query the differences between the local repository and a remote one (the patches that would<br />

be fetched/sent on a pull/push)<br />

• grep: search repository for lines matching a pattern<br />

User interfaces<br />

Software Web interfaces Stand-alone GUIs Integration and/or Plug-ins for IDEs<br />

AccuRev<br />

Bazaar<br />

ClearCase<br />

Code Co-op<br />

CVS<br />

CVSNT<br />

darcs<br />

Git<br />

GNU arch<br />

Yes Windows (incl. explorer<br />

integration), Linux, Unix, Mac<br />

OS X, BeOS available<br />

can use a plain webserver,<br />

webserve [96] , Launchpad<br />

[97] , loggerhead [98] or Trac<br />

[99]<br />

included, Clearcase Web<br />

Interface<br />

Not necessary since entire<br />

project is replicated locally<br />

cvsweb [111] , ViewVC,<br />

codeBeamer, others<br />

cvsweb [111] , ViewVC,<br />

others<br />

darcs.cgi included;<br />

darcsweb [114] , Trac<br />

gitweb, wit, cgit, GitHub,<br />

gitorious, Trac, codeBeamer<br />

ArchZoom [122]<br />

IC Manage included<br />

Olive [100] , bzr-gtk [101]<br />

(GTK+), Bazaar Explorer [102]<br />

(Qt), QBzr [103] (Qt),<br />

TortoiseBzr (Windows)<br />

older: MS Windows native,<br />

Motif-based GUI for Unix-like<br />

systems, TSO client for z/OS.<br />

Windows<br />

TortoiseCVS (Windows<br />

Explorer), WinCVS, Mac OS X,<br />

GTK, Qt available<br />

Windows, Mac OS X, OS/400,<br />

GTK, Qt available<br />

under development;<br />

TortoiseDarcs (Windows<br />

Explorer), Mac OS X (alpha),<br />

gitk, git-gui (Tcl/Tk), tig,<br />

TortoiseGit, qgit, gitg [117]<br />

(GNOME/GTK), (h)gct (Qt),<br />

git-cola (Qt), Git Extensions<br />

[118] (Windows Explorer)<br />

ArchWay [123] (GTK2), TlaLog<br />

[124]<br />

Windows, Linux, Unix, Mac<br />

OS X<br />

IntelliJ IDEA ( AccuRev4IDEA 3:rd party plugin [95] ),<br />

Eclipse, Visual Studio<br />

Eclipse ( BzrEclipse [104] , QBzrEclipse [105] ), Visual<br />

Studio ( bzr-visualstudio [106] ), TextMate (<br />

TextMateBundle [107] ), Komodo IDE<br />

Emacs, Eclipse ( IBM Proprietary [108] , Eclipse-CCase<br />

[109] ), Visual Studio (IBM proprietary), KDevelop<br />

(standard?), IntelliJ IDEA ( standard in Ultimate<br />

Edition [110] )<br />

Unknown<br />

Eclipse (Team), KDevelop (standard), IntelliJ IDEA (<br />

standard in Community and Ultimate Editions [112] ),<br />

Emacs (standard VC [113] ), Komodo IDE, BBEdit<br />

All those that support CVS, plus commercial plugins<br />

for SCCI, Bugzilla, Build<br />

Eclipse ( eclipsedarcs [115] ), Emacs ( vc-darcs.el [116] )<br />

Eclipse ( JGit/EGit [119] ); Netbeans ( NbGit [57] );<br />

Visual Studio ( Git Extensions [118] ); Emacs (<br />

extension [120] for standard VC); TextMate ( Git<br />

TextMate Bundle [121] ); Vim (VCSCommand plugin);<br />

IntelliJ IDEA >8.1 ( standard in Community and<br />

Ultimate Editions [61] ); Komodo IDE; Anjuta<br />

Emacs (standard VC [113] )<br />

Emacs, Cadence Design Framwork, Synopsys Custom<br />

Designer


Comparison of revision control software 46<br />

Libre<strong>Source</strong><br />

Synchronizer<br />

Mercurial<br />

Monotone<br />

Libre<strong>Source</strong><br />

included [126] , <strong>Bitbucket</strong>,<br />

Trac, codeBeamer<br />

ViewMTN [132] ,<br />

TracMonotone [133] ,<br />

Perforce included, P4Web, P4FTP<br />

Rational Team<br />

Concert<br />

Yes<br />

StarTeam included<br />

Subversion<br />

Synergy<br />

Team<br />

Foundation<br />

Server<br />

Apache 2 module included,<br />

WebSVN [140] , ViewSVN<br />

[141] , ViewVC, Trac,<br />

SharpForge, sventon [142] ,<br />

Warehouse [143] ,<br />

codeBeamer<br />

via Telelogic Change<br />

interface<br />

included (Sharepoint Server<br />

used for web services)<br />

Vault included<br />

Visual<br />

<strong>Source</strong>Safe<br />

none included; SSWI [151] ,<br />

VSS Remoting [152]<br />

Windows, Linux, Unix, Mac OS<br />

X available [125]<br />

Hgk (Tcl/Tk), (h)gct (Qt),<br />

TortoiseHg [127] (Windows<br />

Explorer, Nautilus),<br />

MacMercurial [9] (MacOS X<br />

10.4 and newer)<br />

Monotone-Viz [134] (GTK+),<br />

Guitone [135] (Qt), Monotone<br />

Browser [136] (GTK+, Perl)<br />

Windows, Linux, Unix, Mac OS<br />

X, BeOS available<br />

Unknown<br />

IntelliJ IDEA ( hg4idea 3:rd party plugin [128] ),<br />

Eclipse ( Mercurial Eclipse [129] ), NetBeans ([130]),<br />

Visual Studio 2008 ([131]), Emacs, Vim<br />

(VCSCommand plugin), Komodo IDE<br />

Unknown<br />

Eclipse, Visual Studio (P4SCC), KDevelop<br />

(standard?), IntelliJ IDEA ( standard in Ultimate<br />

Edition [137] ), Komodo IDE, BBEdit, Emacs ( p4.el<br />

[138] )<br />

Eclipse-based GUI Eclipse integration; MS Visual Studio integration<br />

Windows, Java, Eclipse, Visual<br />

Studio, BDS2006 integration,<br />

plus Java command-line<br />

Java, KDESVN, Mac OS X<br />

[144] (including Finder<br />

integration [145] ), Nautilus, Qt,<br />

RabbitVCS, TortoiseSVN<br />

(Windows Explorer)<br />

Windows (incl. explorer<br />

integration), Linux, Unix<br />

Windows included; MacOS,<br />

Unix available<br />

Windows, Unix-like, Mac OS<br />

X<br />

Windows included; Linux, Mac<br />

OS and Solaris using<br />

<strong>Source</strong>OffSite [153] ; any Java<br />

VM using <strong>Source</strong>AnyWhere for<br />

VSS [154]<br />

IntelliJ IDEA ( standard in Ultimate Edition [139] ),<br />

Visual Studio, JBuilder, Eclipse<br />

Anjuta, BBEdit, Eclipse ( Subclipse [146] , Emacs<br />

(standard VC [113] ), IntelliJ IDEA ( standard in<br />

Community and Ultimate Editions [147] ), KDevelop<br />

(standard), Komodo IDE, MonoDevelop (standard),<br />

Netbeans, RabbitVCS (for GEdit), Subversive [148] ),<br />

TextMate SVNMate plugin [149] ), Visual Studio<br />

(AnkhSVN, VisualSVN)<br />

Eclipse (Telelogic proprietary), Visual Studio<br />

(Telelogic proprietary), IntelliJ IDEA (Telelogic<br />

proprietary)<br />

Visual Studio. Java client for Eclipse IDE and IntelliJ<br />

IDEA ( standard in Ultimate Edition [150] )<br />

Visual Studio 2003 and higher, Eclipse 3.2 and higher<br />

Visual Studio, IntelliJ IDEA ( standard in Ultimate<br />

Edition [155] )<br />

Software Web interfaces Stand-alone GUIs Integration and/or plug-ins for IDEs<br />

Table explanation<br />

• Software: The name of the application that is described.<br />

• Web Interface: Describes whether the software application contains a web interface. A web interface could allow<br />

the software to post diagnostics data to a website, or could even allow remote control of the software application.<br />

• GUIs: A GUI is a graphical user interface. If a software product features a GUI its functionality can be accessed<br />

through application windows as opposed to accessing functionality based upon typing commands at the command<br />

prompt such as a DOS interface.


Comparison of revision control software 47<br />

• Plug-ins: functionality is available through an Integrated Development Environment. Minimum functionality<br />

should be to list the revision state of a file and check in/check out files.<br />

History and adoption<br />

Software History Notable users<br />

AccuRev<br />

Bazaar<br />

BitKeeper<br />

ClearCase<br />

First publicly released in 2002 Clients include: SanDisk, Sony, Orbitz, MCI,<br />

and Polycom<br />

Loosely related to baz. Sponsored by Canonical Ltd..<br />

Evolved from Sun WorkShop TeamWare<br />

Developed beginning in 1990 by Atria Software, following concepts<br />

developed by Apollo Computer in DSEE during the 1980s. The most<br />

recent version is 7.1.1, released in Dec 2009.<br />

Code Co-op The first distributed VCS, demoed in 1997 [158], released soon after.<br />

Ubuntu, Launchpad, KatchTV [156], MySQL,<br />

GRUB2, Bugzilla, GNU Emacs<br />

Linux Kernel (2002–2005) and many<br />

companies [157]<br />

IBM, Alcatel-Lucent, Cisco, Motorola,<br />

Siemens, Ericsson, Nokia and other large<br />

organizations worldwide<br />

Clients include: Logitech, HP, Ericsson<br />

CVS First publicly released July 3, 1986; based on RCS thousands of organizations worldwide<br />

CVSNT<br />

darcs<br />

First publicly released 1998; based on CVS. Started by CVS<br />

developers with the goal adding support for a wider range of<br />

development methods and processes.<br />

First announced on April 9, 2003<br />

Fossil Fossil and SQLite have used Fossil since 21 July 2007. SQLite, Fossil<br />

Git<br />

GNU arch<br />

IC Manage<br />

Libre<strong>Source</strong><br />

Synchronizer<br />

Mercurial<br />

Started by Linus Torvalds in April 2005, following the BitKeeper<br />

controversy. [160]<br />

Started by Tom Lord, it later became part of the GNU project. Lord<br />

resigned as maintainer in August 2005.<br />

Developed by IC Manage, Inc which was founded in 2003 by Shiv<br />

Sikand and Dean Drako.<br />

GHC, Mnet, xmonad, Projects Using Darcs<br />

[159]<br />

Linux kernel, GNOME, Perl 5 [161], X.Org,<br />

Cairo, Qt Software, Samba, OpenEmbedded,<br />

Ruby on Rails, Wine, Fluxbox, Openbox,<br />

Compiz Fusion, XCB, ELinks, XMMS2,<br />

e2fsprogs, GNU Core Utilities, DokuWiki<br />

(Also see list of Git projects [162] )<br />

available for GNU Savannah and Gna.org<br />

projects<br />

many organizations worldwide [163]<br />

First publicly released on June 13, 2005 Most of the Libre<strong>Source</strong> Community<br />

Started April 6, 2005 by Matt Mackall, following the BitKeeper<br />

controversy. [160] First released on April 19, 2005<br />

Monotone First released in April 2003<br />

Perforce<br />

Rational Team<br />

Concert<br />

Developed by Perforce Software, Inc which was founded in 1995 by<br />

Christopher Seiwald.<br />

Version 1.0 released on June, 2008 IBM<br />

Mozilla, NetBeans, Xine, Xen, OpenJDK,<br />

OpenOffice.org, OpenSolaris, wmii,<br />

MoinMoin, Linux-HA, Python [164] (Also see<br />

list of projects using Mercurial [165] )<br />

CTWM, Pidgin, Xaraya [166]<br />

many organizations worldwide [167],<br />

FreeBSD[168]<br />

?


Comparison of revision control software 48<br />

Revision<br />

<strong>Control</strong><br />

System<br />

<strong>Source</strong> Code<br />

<strong>Control</strong><br />

System<br />

StarTeam<br />

Subversion<br />

SVK<br />

Synergy<br />

Team<br />

Foundation<br />

Server<br />

July 1985 RCS is generally (but not always) superseded<br />

by other systems such as CVS, which began as<br />

a wrapper on top of RCS.<br />

Version 1.0 1995 [169]; Developed by StarBase software, acquired by<br />

Borland(which was acquired by Micro Focus).<br />

Started in 2000 by CVS developers with goal of replacing CVS<br />

Authored by Chia-liang Kao with Audrey Tang. First version was on<br />

November 19, 2003. 1.00 on May 9, 2005. 2.0.0 on Dec 28th, 2006.<br />

SVK became a product of Best Practical on June 5, 2006.<br />

Developed beginning in 1988 by Caseware, as Amplify<strong>Control</strong>. The<br />

company was renamed Continuus in 1994, where the product became<br />

better known as Continuus/CM. Continuus was acquired by Telelogic<br />

in 1999 shortly after going public; the product was renamed Telelogic<br />

Synergy. IBM acquired Telelogic in 2008 for integration into their<br />

Rational tool suite. The product is now known as IBM Rational<br />

Synergy.<br />

as the POSIX source-control tool, SCCS is<br />

widely available on UNIX platforms. Sun<br />

WorkShop TeamWare uses SCCS files.<br />

Borland, BT, Cintas, EDS, Kaiser Permanente,<br />

Met Office, Quest Software, Raymond James,<br />

Siemens, and many more globally distributed<br />

companies [170]<br />

ASF, <strong>Source</strong>Forge, FreeBSD, Google Code,<br />

KDE, GCC, Ruby, Mono, PuTTY, Zope, Xiph,<br />

GnuPG, CUPS, Wireshark, TWiki, Django,<br />

аvailable on CodePlex, and many organizations<br />

worldwide [171]<br />

Request Tracker<br />

General Motors, BMW, Chrysler, Nokia,<br />

Philips, Raytheon, Morgan Stanley, Friends<br />

Provident, Boeing, Lockheed Martin, Siemens<br />

and other small, medium and large<br />

organizations worldwide<br />

First publicly released on March, 2006 Available on CodePlex, Microsoft itself and<br />

other large organizations worldwide<br />

Vault First publicly released in February, 2003 Unknown<br />

Visual<br />

<strong>Source</strong>Safe<br />

originally created by a company called One Tree Software, version<br />

3.1. Company was bought by Microsoft which released version 4.0 of<br />

VSS around 1995<br />

Unknown<br />

Software History Notable users<br />

Table Explanation<br />

• Software: The name of the application that is described.<br />

• Notable users: is a list of well known projects using the software as their primary revision control system,<br />

excluding the software itself, followed by a link to a full list if available.<br />

• History: briefly describes the software's origins and development.


Comparison of revision control software 49<br />

See also<br />

• List of revision control software<br />

• Comparison of free software hosting facilities<br />

References<br />

[1] Bazaar is a Distributed version control system but it can also be used in a centralized manner (http:/ / bazaar-vcs. org/ Tutorials/<br />

CentralizedWorkflow) using lock step development (http:/ / bazaar-vcs. org/ LockStepDevelopment) and checkouts (http:/ / bazaar-vcs. org/<br />

CheckoutTutorial).<br />

[2] In ClearCase, a trigger may be set to allow for the lock model, and this is done at many sites. However, ClearCase development usually takes<br />

place on private branches where each developer is given their own branch, so the lock vs. merge concurrency model doesn't matter as much.<br />

Code is merged back to the main branch once the developer is ready to deliver their code to the project.<br />

[3] http:/ / codeville. org<br />

[4] http:/ / savannah. nongnu. org/ project/ memberlist. php?detailed=1& group=cvs<br />

[5] http:/ / march-hare. com/ cvspro/<br />

[6] http:/ / www. artenum. com<br />

[7] "a workspace can be synchronized with more than one Libre<strong>Source</strong> Synchronizer. As a limitation, the network must have tree topology." says<br />

Libre<strong>Source</strong> Synchronizer.<br />

[8] As of version 2.5, "Libre<strong>Source</strong> is now released under GPL Version 2" (http:/ / dev. libresource. org/ home/ news/<br />

Mature_the_collaborative_forge_Libre<strong>Source</strong>_now_released_under_GPL). .<br />

[9] http:/ / www. perforce. com/ perforce/ price. html<br />

[10] https:/ / jazz. net/ projects/ rational-team-concert/<br />

[11] http:/ / www. collab. net/<br />

[12] SVK allows Subversion to have Distributed branches.<br />

[13] In Subversion, a file attribute enables the lock model on per-file basis. This file attribute can be set automatically using file name wildcard<br />

expressions.<br />

[14] http:/ / bestpractical. com/<br />

[15] "The Future of SVK" (http:/ / lists. bestpractical. com/ pipermail/ svk-devel/ 2009-May/ 001224. html). May 28, 2009. . Retrieved June 6,<br />

2009.<br />

[16] http:/ / www. ibm. com/ software/ awdtools/ synergy<br />

[17] http:/ / www. sourcegear. com<br />

[18] Bazaar's critical modules are written in Pyrex. They are automatically translated to pure C; except for the patience sorting module, used in<br />

merge resolution, which is written directly in the C language.<br />

[19] A Bazaar bundle is a summary diff, with sufficient extra information to preserve history.<br />

[20] http:/ / www. elegosoft. com/ cvs/ cvsclient. html<br />

[21] 4 MB of which are sqlite3.c<br />

[22] Mercurial revision numbers are local to a repository; they can differ from repository to repository depending on in which order merges are<br />

performed.<br />

[23] A Monotone's revisions represent changesets and its manifests represent snapshots, each revision is linked to some manifest. But manifests<br />

are legacy constructs, they aren't kept in the database anymore and reconstructed on the fly if needed. The real work now happen in rosters<br />

which are hybrid snapshot/changeset structures.<br />

[24] They can be automatically generated (http:/ / bazaar-vcs. org/ BzrGpgSigning) and manually verified, but verification is not automatic<br />

[25] EOL conversions are supported since bzr 1.14 (http:/ / doc. bazaar-vcs. org/ bzr. 1. 14/ en/ release-notes/ NEWS. html#bzr-1-14)<br />

[26] Atomic commit can be enabled for individual checkin's ClearCase 7.1.1 release notes (https:/ / publib. boulder. ibm. com/ infocenter/ cchelp/<br />

v7r1m0/ index. jsp?topic=/ com. ibm. rational. clearcase. relnotes. doc/ topics/ c_cc_relnotes_features. htm).<br />

[27] Support Policy for National Languages and ClearCase (http:/ / www. ibm. com/ support/ docview. wss?uid=swg21229688)<br />

[28] darcs' patches each bear a unique identifier, impossible to merge twice the same patch in a repository (without destructively modifying<br />

history using "unsafe" commands).<br />

[29] Git does not explicitly track renames, because by design it does not track individual files. Renames and split of source files are detected after<br />

the fact, if the file content does not change dramatically.<br />

[30] Git itself is not internationalized, just git-gui and gitk (both are shipped with git).<br />

[31] Git is encoding agnostic and hence can work with all file names without problems. It only may not display them properly in its console<br />

output.<br />

[32] Its possible to embed the action in a shell or Ant script.<br />

[33] A merged is tracked by its workspace origin.<br />

[34] Mercurial is in the process of being translated to at least dutch and chinese<br />

[35] It could be done via user level hooks<br />

[36] Perforce Knowledge Base: Renaming Files (http:/ / www. perforce. com/ perforce/ technotes/ note007. html)


Comparison of revision control software 50<br />

[37] (http:/ / www. perforce. com/ perforce/ technotes/ note009. html)<br />

[38] (http:/ / kb. perforce. com/ ?article=66)<br />

[39] (http:/ / kb. perforce. com/ article/ 66/ internationalization-and-localization#i18n)<br />

[40] Through the procees behaviour components: Operation advisors and Operation participants. http:/ / jazz. net/ library/ article/ 292<br />

[41] StarTeam supports atomic commits as of version 2006<br />

[42] Subversion can move a file and conserve its history, if and only if the target of the move is in the same Subversion repository as the source.<br />

Cross-repository moves require third-party tools such as svk. Also, a rename operation is actually a copy-with-history-and-delete sequence.<br />

[43] New to SVN 1.5 ( (http:/ / subversion. tigris. org/ svn_1. 5_releasenotes. html#merge-tracking)). A separate tool "svnmerge" ( (http:/ / www.<br />

dellroad. org/ svnmerge/ )) provides merge tracking for older versions.<br />

[44] In Subversion, tags are a special case of the more generic "cheap copy" concept of Subversion. Per convention, a tag is a copy into a<br />

directory named "tags". Because of this, even tags are versioned. See (http:/ / svnbook. red-bean. com/ nightly/ en/ svn. branchmerge. tags.<br />

html) for more information. The reason for partial support in the table is because Subversion's emulation of tags in this manner does not meet<br />

the requirement that the tag name can be used in place of any revision identifier wherever the user may be required to enter one. This column<br />

would be meaningless if the definition were to be loosened enough to encompass Subversion's approach as every version control system<br />

supports branching and would therefore support tags as well.<br />

[45] Uses subversion server<br />

[46] Signature - SVK Wiki (http:/ / svk. bestpractical. com/ view/ Signature)<br />

[47] in Asian releases, v6.6a to v7.1a<br />

[48] Version change history is removed upon rename; old name not referenced.<br />

[49] Bazaar keywords plugin (http:/ / launchpad. net/ bzr-keywords)<br />

[50] Bazaar interactive plugin (https:/ / launchpad. net/ bzr-interactive)<br />

[51] Bazaar Externals plugin (http:/ / launchpad. net/ bzr-externals)<br />

[52] bzr-svn (http:/ / launchpad. net/ bzr-svn)<br />

[53] bzr-git (http:/ / launchpad. net/ bzr-git)<br />

[54] bzr-hg (http:/ / launchpad. net/ bzr-hg)<br />

[55] IBM Rational ClearCase: The ten best triggers (http:/ / www. ibm. com/ developerworks/ rational/ library/ 4311. html#N10496)<br />

[56] Using alias of the CVSROOT/modules file.<br />

[57] CVS records executable bit when a file is added, but does not allow changing it later on.<br />

[58] Darcs can do sparse checkouts from explicit checkpoints on darcs-1 repositories, but not from darcs-2 ones<br />

[59] Darcs can automatically detect #! scripts and make them executable on checkout.<br />

[60] The Git FAQ (http:/ / git. wiki. kernel. org/ index. php/ GitFaq#keywords) states that keyword expansion is not a good thing<br />

[61] add -i and add -p, see git-add(1) Manual Page (http:/ / www. kernel. org/ pub/ software/ scm/ git/ docs/ git-add. html)<br />

[62] git-submodule(1) Manual Page (http:/ / www. kernel. org/ pub/ software/ scm/ git/ docs/ git-submodule. html)<br />

[63] The Git Community Handbook (http:/ / book. git-scm. com/ 5_submodules. html) clearly explains that "Git does not allow partial<br />

checkouts"<br />

[64] The Git FAQ (http:/ / git. wiki. kernel. org/ index. php/ GitFaq#modtime) explains why preserving modification time is considered harmful<br />

[65] Mercurial KeywordExtension page (http:/ / www. selenic. com/ mercurial/ wiki/ index. cgi/ KeywordExtension)<br />

[66] Mercurial RecordExtension page (http:/ / www. selenic. com/ mercurial/ wiki/ index. cgi/ RecordExtension)<br />

[67] hgforest repository (http:/ / bitbucket. org/ pmezard/ hgforest-crew/ overview/ )<br />

[68] hgsubversion page (http:/ / www. selenic. com/ mercurial/ wiki/ index. cgi/ HgSubversion)<br />

[69] Hg-Git Mercurial Plugin (http:/ / hg-git. github. com/ )<br />

[70] Mercurial ConvertExtension page (http:/ / www. selenic. com/ mercurial/ wiki/ index. cgi/ ConvertExtension)<br />

[71] commit --interactive, see SVK::Command::Commit (http:/ / search. cpan. org/ dist/ SVK/ lib/ SVK/ Command/ Commit. pm)<br />

[72] Keyword Substitution (http:/ / svnbook. red-bean. com/ en/ 1. 4/ svn. advanced. props. special. keywords. html)<br />

[73] Externals Definitions (http:/ / svnbook. red-bean. com/ en/ 1. 0/ ch07s03. html)<br />

[74] SVN records file permissions when a file is added, but does not allow changing them later on.<br />

[75] Disabled by default.<br />

[76] http:/ / darcs. net/ manual/ node8. html#SECTION00861000000000000000<br />

[77] bzr-local-branches plugin<br />

[78] rebase plugin<br />

[79] darcs doesn't have named branches, local or not, branching is handled solely through repository cloning<br />

[80] darcs send prepares a bundle of patches, defaults to sending it by mail but can send it to a file instead<br />

[81] pull is fetch plus merge.<br />

[82] copies are detected after the fact, much like renames<br />

[83] Mercurial Bookmarks (http:/ / www. selenic. com/ mercurial/ wiki/ index. cgi/ BookmarksExtension) are similar to local branches, with<br />

some limitations (http:/ / blog. experimentalworks. net/ 2008/ 11/ mercurial-bookmarks/ ).<br />

[84] Mercurial rebase extension project's page (http:/ / www. selenic. com/ mercurial/ wiki/ index. cgi/ RebaseProject)<br />

[85] darcs operate on patches not revision, cherrypicking simply consists in pulling a given patch from one repository to another one as long as<br />

the dependencies are fulfilled


Comparison of revision control software 51<br />

[86] trackdown performs an automated search by repeatedly running a provided command on previous revisions on the working copy until the<br />

command succeeds (doesn't return an error code) (http:/ / darcs. net/ manual/ node8. html#SECTION008114000000000000000)<br />

[87] git stash is a multi-level shelve, it's possible to shelve several change groups at the same time<br />

[88] Mercurial Shelve extension page (http:/ / www. selenic. com/ mercurial/ wiki/ index. cgi/ ShelveExtension)<br />

[89] Mercurial Transplant extension page (http:/ / www. selenic. com/ mercurial/ wiki/ index. cgi/ TransplantExtension)<br />

[90] Only works on a local repository and only on revisions without children. The disapprove command might be an alternative.<br />

[91] http:/ / kb. perforce. com/ article/ 567/<br />

[92] svk status lists differences between working copy and repository, not differences between two repositories<br />

[93] Using the free third-party tool svn-bisect (http:/ / search. cpan. org/ dist/ App-SVN-Bisect/ bin/ svn-bisect)<br />

[94] svn status lists differences between working copy and repository, not differences between two repositories<br />

[95] http:/ / accurev4idea. dev. java. net/<br />

[96] https:/ / launchpad. net/ bzr-webserve<br />

[97] http:/ / www. launchpad. net<br />

[98] http:/ / www. lag. net/ loggerhead<br />

[99] http:/ / launchpad. net/ trac-bzr<br />

[100] http:/ / bazaar-vcs. org/ Olive<br />

[101] http:/ / bazaar-vcs. org/ bzr-gtk<br />

[102] http:/ / doc. bazaar. canonical. com/ explorer/ en/<br />

[103] http:/ / bazaar-vcs. org/ QBzr<br />

[104] http:/ / bazaar-vcs. org/ BzrEclipse<br />

[105] http:/ / bazaar-vcs. org/ QBzrEclipse<br />

[106] http:/ / launchpad. net/ bzr-visualstudio<br />

[107] http:/ / bazaar-vcs. org/ TextMateBundle<br />

[108] http:/ / www. ibm. com/ developerworks/ rational/ library/ content/ 03July/ 2500/ 2834/ ClearCase/ clearcase_plugins. html<br />

[109] http:/ / eclipse-ccase. sourceforge. net/<br />

[110] http:/ / www. jetbrains. com/ idea/ features/ version_control. html#Rational_ClearCase_support<br />

[111] http:/ / www. freebsd. org/ projects/ cvsweb. html<br />

[112] http:/ / www. jetbrains. com/ idea/ features/ version_control. html#CVS_Integration<br />

[113] http:/ / www. gnu. org/ software/ emacs/ manual/ html_node/ emacs/ Version-<strong>Control</strong>. html<br />

[114] http:/ / blitiri. com. ar/ p/ darcsweb/<br />

[115] http:/ / eclipsedarcs. org/<br />

[116] http:/ / www. pps. jussieu. fr/ ~jch/ software/ repos/ vc-darcs/<br />

[117] http:/ / trac. novowork. com/ gitg/<br />

[118] http:/ / code. google. com/ p/ gitextensions/<br />

[119] http:/ / freshmeat. net/ projects/ jgit<br />

[120] http:/ / www. emacswiki. org/ cgi-bin/ wiki/ Git<br />

[121] http:/ / gitorious. org/ projects/ git-tmbundle<br />

[122] http:/ / migo. sixbit. org/ software/ archzoom/<br />

[123] http:/ / www. nongnu. org/ archway/<br />

[124] http:/ / www. univ-paris12. fr/ lacl/ pommereau/ tla/<br />

[125] Any OS that support a Java Virtual Machine 1.5<br />

[126] hgweb for single-repository access and hgwebdir for multiple repository access from a single HTTP address<br />

[127] http:/ / tortoisehg. org<br />

[128] http:/ / www. bitbucket. org/ willemv/ hg4idea<br />

[129] http:/ / www. vectrace. com/ mercurialeclipse/<br />

[130] http:/ / wiki. netbeans. org/ wiki/ view/ MercurialVersion<strong>Control</strong><br />

[131] http:/ / www. newsupaplex. pp. ru/ hgscc_news_eng. html<br />

[132] http:/ / grahame. angrygoats. net/ viewmtn. shtml<br />

[133] http:/ / tracmtn. 1erlei. de<br />

[134] http:/ / oandrieu. nerim. net/ monotone-viz<br />

[135] http:/ / guitone. thomaskeller. biz<br />

[136] http:/ / www. coosoft. plus. com/ software. html<br />

[137] http:/ / www. jetbrains. com/ idea/ features/ version_control. html#Perforce_Integration<br />

[138] http:/ / p4el. sourceforge. net/<br />

[139] http:/ / www. jetbrains. com/ idea/ features/ version_control. html#StarTeam_Integration<br />

[140] http:/ / www. websvn. info/<br />

[141] http:/ / viewsvn. berlios. de/<br />

[142] http:/ / www. sventon. org/<br />

[143] http:/ / warehouseapp. com/


Comparison of revision control software 52<br />

[144] http:/ / www. lachoseinteractive. net/ en/ community/ subversion/ svnx/ features/<br />

[145] http:/ / scplugin. tigris. org/<br />

[146] http:/ / subclipse. tigris. org/<br />

[147] http:/ / www. jetbrains. com/ idea/ features/ version_control. html#Subversion_Client_and_Integration<br />

[148] http:/ / www. eclipse. org/ subversive/<br />

[149] http:/ / ciaranwal. sh/ 2007/ 10/ 10/ svn-plug-in-for-textmate<br />

[150] http:/ / www. jetbrains. com/ idea/ features/ version_control. html#Team_Foundation_Server_integration<br />

[151] http:/ / www. componentworkshop. com/ Default. aspx<br />

[152] http:/ / www. sourceremoting. com/ vssr_overview. htm<br />

[153] http:/ / www. sourcegear. com/ sos/<br />

[154] http:/ / www. dynamsoft. com/ Products/ SAW_Overview. aspx<br />

[155] http:/ / www. jetbrains. com/ idea/ features/ version_control. html#Visual_<strong>Source</strong>Safe_Integration<br />

[156] http:/ / bazaar-vcs. org/ WhoUsesBzr<br />

[157] http:/ / www. bitkeeper. com/ Customers. html<br />

[158] http:/ / portal. acm. org/ citation. cfm?id=716428& dl=ACM& coll=portal<br />

[159] http:/ / wiki. darcs. net/ DarcsWiki/ ProjectsUsingDarcs<br />

[160] Towards A Better SCM: Revlogs and Mercurial (http:/ / mercurial. selenic. com/ wiki/ Presentations?action=AttachFile& do=get&<br />

target=ols-mercurial. pdf), presented by Matt Mackall to the Ottawa Linux Symposium, July 2006<br />

[161] http:/ / dev. perl. org/ perl5/ source. html<br />

[162] http:/ / git. wiki. kernel. org/ index. php/ GitProjects<br />

[163] http:/ / icmanage. com/ customer. html<br />

[164] transition ongoing (http:/ / www. python. org/ dev/ peps/ pep-0374/ #decision)<br />

[165] http:/ / www. selenic. com/ mercurial/ wiki/ index. cgi/ ProjectsUsingMercurial<br />

[166] http:/ / www. venge. net/ monotone/ wiki/ ProjectsUsingMonotone<br />

[167] http:/ / www. perforce. com/ perforce/ customers. html<br />

[168] http:/ / www. freebsd. org/ doc/ en_US. ISO8859-1/ articles/ p4-primer/ index. html<br />

[169] http:/ / web. archive. org/ web/ 19980507011804/ demo. starbase. com/ WebDraw+ Old+ Web+ Site/ StarTeam/ StarTeam. htm<br />

[170] http:/ / www. borland. com/ us/ customers/ profiles/ view-by-product. jsp<br />

[171] http:/ / subversion. tigris. org/ testimonials. html<br />

External links<br />

• Comparison between Git and Mercurial (http:/ / code. google. com/ p/ support/ wiki/ DVCSAnalysis) by Google<br />

(summer 2008)<br />

• Comments on Open <strong>Source</strong> Software / Free Software SCM systems (http:/ / www. dwheeler. com/ essays/ scm.<br />

html) by David A. Wheeler<br />

• Quick Reference Guide to Free Software Decentralized Revision <strong>Control</strong> Systems (http:/ / zooko. com/<br />

revision_control_quick_ref. html) by Zooko Wilcox-O'Hearn<br />

• Comparison of commercial Version <strong>Control</strong> Systems (http:/ / www. relisoft. com/ co_op/ vcs_compare. html)<br />

from the creators of Code Co-op<br />

• Version <strong>Control</strong> System Comparison (http:/ / better-scm. berlios. de/ comparison/ comparison. html) from<br />

better-scm.berlios.de<br />

• Evaluation of distributed source code management solutions for OpenSolaris (http:/ / opensolaris. org/ os/<br />

community/ tools/ scm/ ) by Sun<br />

• Comparison of CVS and Subversion (http:/ / www. softeng. rl. ac. uk/ media/ uploads/ publications/ 2010/ 03/<br />

cvs-svn. pdf)


Revision control 53<br />

Revision control<br />

Revision control, also known as version control, source control or<br />

software configuration management (SCM), is the management of changes<br />

to documents, programs, and other information stored as computer files. It is<br />

most commonly used in software development, where a team of people may<br />

change the same files. Changes are usually identified by a number or letter<br />

code, termed the "revision number", "revision level", or simply "revision".<br />

For example, an initial set of files is "revision 1". When the first change is<br />

made, the resulting set is "revision 2", and so on. Each revision is associated<br />

with a timestamp and the person making the change. Revisions can be<br />

compared, restored, and with some types of files, merged.<br />

Version control systems (VCSs - singular VCS) most commonly run as<br />

stand-alone applications, but revision control is also embedded in various<br />

types of software such as word processors (e.g., Microsoft Word,<br />

OpenOffice.org Writer, KWord, Pages, etc.), spreadsheets (e.g., Microsoft<br />

Excel, OpenOffice.org Calc, KSpread, Numbers, etc.), and in various content<br />

management systems (e.g., Drupal, Joomla, WordPress). Integrated revision<br />

control is a key feature of wiki software packages such as MediaWiki,<br />

DokuWiki, TWiki etc. In wikis, revision control allows for the ability to<br />

revert a page to a previous revision, which is critical for allowing editors to<br />

track each other's edits, correct mistakes, and defend public wikis against<br />

vandalism, spam and spammers.<br />

Software tools for revision control are essential for the organization of<br />

multi-developer projects. [1]<br />

Overview<br />

Example history tree of a<br />

revision-controlled project.<br />

Engineering revision control developed from formalized processes based on tracking revisions of early blueprints or<br />

bluelines. This system of control implicitly allowed returning to any earlier state of the design, for cases in which an<br />

engineering dead-end was reached in the development of the design. Likewise, in computer software engineering,<br />

revision control is any practice that tracks and provides control over changes to source code. Software developers<br />

sometimes use revision control software to maintain documentation and configuration files as well as source code.<br />

Also, version control is widespread in business and law. Indeed, "contract redline" and "legal blackline" are some of<br />

the earliest forms of revision control, and are still employed with varying degrees of sophistication. An entire<br />

industry has emerged to service the document revision control needs of business and other users, and some of the<br />

revision control technology employed in these circles is subtle, powerful, and innovative. The most sophisticated<br />

techniques are beginning to be used for the electronic tracking of changes to CAD files (see product data<br />

management), supplanting the "manual" electronic implementation of traditional revision control.<br />

As teams design, develop and deploy software, it is common for multiple versions of the same software to be<br />

deployed in different sites and for the software's developers to be working simultaneously on updates. Bugs or<br />

features of the software are often only present in certain versions (because of the fixing of some problems and the<br />

introduction of others as the program develops). Therefore, for the purposes of locating and fixing bugs, it is vitally<br />

important to be able to retrieve and run different versions of the software to determine in which version(s) the


Revision control 54<br />

problem occurs. It may also be necessary to develop two versions of the software concurrently (for instance, where<br />

one version has bugs fixed, but no new features (branch), while the other version is where new features are worked<br />

on (trunk).<br />

At the simplest level, developers could simply retain multiple copies of the different versions of the program, and<br />

label them appropriately. This simple approach has been used on many large software projects. While this method<br />

can work, it is inefficient as many near-identical copies of the program have to be maintained. This requires a lot of<br />

self-discipline on the part of developers, and often leads to mistakes. Consequently, systems to automate some or all<br />

of the revision control process have been developed.<br />

Moreover, in software development, legal and business practice and other environments, it has become increasingly<br />

common for a single document or snippet of code to be edited by a team, the members of which may be<br />

geographically dispersed and may pursue different and even contrary interests. Sophisticated revision control that<br />

tracks and accounts for ownership of changes to documents and code may be extremely helpful or even necessary in<br />

such situations.<br />

Revision control may also track changes to configuration files, such as those typically stored in /etc or /usr/local/etc<br />

on Unix systems. This gives system administrators another way to easily track changes made and a way to roll back<br />

to earlier versions should the need arise.<br />

<strong>Source</strong>-management models<br />

Traditional revision control systems use a centralized model where all the revision control functions take place on a<br />

shared server. If two developers try to change the same file at the same time, without some method of managing<br />

access the developers may end up overwriting each other's work. Centralized revision control systems solve this<br />

problem in one of two different "source management models": file locking and version merging.<br />

Atomic operations<br />

Computer scientists speak of atomic operations if the system is left in a consistent state even if the operation is<br />

interrupted. The commit operation is usually the most critical in this sense. Commits are operations which tell the<br />

revision control system you want to make a group of changes you have been making final and available to all users.<br />

Not all revision control systems have atomic commits; notably, the widely-used CVS lacks this feature.<br />

File locking<br />

The simplest method of preventing "concurrent access" problems involves locking files so that only one developer at<br />

a time has write access to the central "repository" copies of those files. Once one developer "checks out" a file,<br />

others can read that file, but no one else may change that file until that developer "checks in" the updated version (or<br />

cancels the checkout).<br />

File locking has both merits and drawbacks. It can provide some protection against difficult merge conflicts when a<br />

user is making radical changes to many sections of a large file (or group of files). However, if the files are left<br />

exclusively locked for too long, other developers may be tempted to bypass the revision control software and change<br />

the files locally, leading to more serious problems.


Revision control 55<br />

Version merging<br />

Most version control systems allow multiple developers to edit the same file at the same time. The first developer to<br />

"check in" changes to the central repository always succeeds. The system may provide facilities to merge further<br />

changes into the central repository, and preserve the changes from the first developer when other developers check<br />

in.<br />

Merging two files can be a very delicate operation, and usually possible only if the data structure is simple, as in text<br />

files. The result of a merge of two image files might not result in an image file at all. The second developer checking<br />

in code will need to take care with the merge, to make sure that the changes are compatible and that the merge<br />

operation does not introduce its own logic errors within the files. These problems limit the availability of automatic<br />

or semi-automatic merge operations mainly to simple text based documents, unless a specific merge plugin is<br />

available for the file types.<br />

The concept of a reserved edit can provide an optional means to explicitly lock a file for exclusive write access, even<br />

when a merging capability exists.<br />

Baselines, labels and tags<br />

Most revision control tools will use only one of these similar terms (baseline, label, tag) to refer to the action of<br />

identifying a snapshot ("label the project") or the record of the snapshot ("try it with baseline X"). Typically only one<br />

of the terms baseline, label, or tag is used in documentation or discussion; they can be considered synonyms.<br />

In most projects some snapshots are more significant than others, such as those used to indicate published releases,<br />

branches, or milestones.<br />

When both the term baseline and either of label or tag are used together in the same context, label and tag usually<br />

refer to the mechanism within the tool of identifying or making the record of the snapshot, and baseline indicates the<br />

increased significance of any given label or tag.<br />

Most formal discussion of configuration management uses the term baseline.<br />

Distributed revision control<br />

Distributed revision control (DRCS) takes a peer-to-peer approach, as opposed to the client-server approach of<br />

centralized systems. Rather than a single, central repository on which clients synchronize, each peer's working copy<br />

of the codebase is a bona-fide repository. [2] Distributed revision control conducts synchronization by exchanging<br />

patches (change-sets) from peer to peer. This results in some important differences from a centralized system:<br />

• No canonical, reference copy of the codebase exists by default; only working copies.<br />

• Common operations (such as commits, viewing history, and reverting changes) are fast, because there is no need<br />

to communicate with a central server. [3]<br />

Rather, communication is only necessary when pushing or pulling changes to or from other peers.<br />

• Each working copy effectively functions as a remote backup of the codebase and of its change-history, providing<br />

natural protection against data loss. [3]


Revision control 56<br />

Integration<br />

Some of the more advanced revision-control tools offer many other facilities, allowing deeper integration with other<br />

tools and software-engineering processes. Plugins are often available for IDEs such as Oracle JDeveloper, IntelliJ<br />

IDEA, Eclipse and Visual Studio. NetBeans IDE and Xcode come with integrated version control support.<br />

Common vocabulary<br />

[4] [5]<br />

Terminology can vary from system to system, but some terms in common usage include:<br />

Baseline<br />

Branch<br />

Change<br />

An approved revision of a document or source file from which subsequent changes can be made. See<br />

baselines, labels and tags.<br />

A set of files under version control may be branched or forked at a point in time so that, from that time<br />

forward, two copies of those files may develop at different speeds or in different ways independently of each<br />

other.<br />

Change list<br />

Checkout<br />

Commit<br />

Conflict<br />

A change (or diff, or delta) represents a specific modification to a document under version control. The<br />

granularity of the modification considered a change varies between version control systems.<br />

On many version control systems with atomic multi-change commits, a changelist, change set, or patch<br />

identifies the set of changes made in a single commit. This can also represent a sequential view of the source<br />

code, allowing the examination of source "as of" any particular changelist ID.<br />

A check-out (or co) creates a local working copy from the repository. A user may specify a specific revision<br />

or obtain the latest.<br />

A commit (checkin, ci or, more rarely, install, submit or record) occurs when writing or merging a copy of<br />

the changes made to the working copy into the repository.<br />

A conflict occurs when different parties make changes to the same document, and the system is unable to<br />

reconcile the changes. A user must resolve the conflict by combining the changes, or by selecting one change<br />

in favour of the other.<br />

Delta compression<br />

Most revision control software uses delta compression, which retains only the differences between successive<br />

versions of files. This allows for more efficient storage of many different versions of files.<br />

Dynamic stream<br />

Export<br />

Head<br />

Import<br />

A stream in which some or all file versions are mirrors of the parent stream's versions.<br />

An export resembles a check-out except that it creates a clean directory tree without the version-control<br />

metadata used in a working copy. Often used prior to publishing the contents.<br />

The most recent commit.


Revision control 57<br />

Label<br />

Mainline<br />

Merge<br />

An import involves copying a local directory tree (that is not currently a working copy) into the repository for<br />

the first time.<br />

See tag.<br />

Similar to trunk, but there can be a mainline for each branch.<br />

A merge or integration is an operation in which two sets of changes are applied to a file or set of files. Some<br />

sample scenarios are as follows:<br />

• A user, working on a set of files, updates or syncs their working copy with changes made, and checked into<br />

the repository, by other users. [6]<br />

• A user tries to check-in files that have been updated by others since the files were checked out, and the<br />

revision control software automatically merges the files (typically, after prompting the user if it should<br />

proceed with the automatic merge, and in some cases only doing so if the merge can be clearly and reasonably<br />

resolved).<br />

• A set of files is branched, a problem that existed before the branching is fixed in one branch, and the fix is<br />

then merged into the other branch.<br />

• A branch is created, the code in the files is independently edited, and the updated branch is later incorporated<br />

Promote<br />

Repository<br />

Resolve<br />

into a single, unified trunk.<br />

The act of copying file content from a less controlled location into a more controlled location. For example,<br />

from a user's workspace into a repository, or from a stream to its parent. [7]<br />

The repository is where files' current and historical data are stored, often on a server. Sometimes also called a<br />

depot (for example, by SVK, AccuRev and Perforce).<br />

The act of user intervention to address a conflict between different changes to the same document.<br />

Reverse integration<br />

Revision<br />

Ring<br />

Share<br />

Stream<br />

Tag<br />

The process of merging different team branches into the main trunk of the versioning system.<br />

Also version: A version is any change in form. In SVK, a Revision is the state at a point in time of the entire<br />

tree in the repository.<br />

See tag.<br />

The act of making one file or folder available in multiple branches at the same time. When a shared file is<br />

changed in one branch, it is changed in other branches.<br />

A container for branched files that has a known relationship to other such containers. Streams form a<br />

hierarchy; each stream can inherit various properties (like versions, namespace, workflow rules, subscribers,<br />

etc.) from its parent stream.


Revision control 58<br />

Trunk<br />

Update<br />

A tag or label refers to an important snapshot in time, consistent across many files. These files at that point<br />

may all be tagged with a user-friendly, meaningful name or revision number. See baselines, labels and tags.<br />

The unique line of development that is not a branch (sometimes also called Baseline or Mainline)<br />

An update (or sync) merges changes made in the repository (by other people, for example) into the local<br />

working copy. [6]<br />

Working copy<br />

See also<br />

The working copy is the local copy of files from a repository, at a specific time or revision. All work done to<br />

the files in a repository is initially done on a working copy, hence the name. Conceptually, it is a sandbox.<br />

• Comparison of revision control software<br />

• Distributed revision control<br />

• Software configuration management (SCM)<br />

• Software versioning<br />

• Versioning file system<br />

References<br />

[1] "Rapid Subversion Adoption Validates Enterprise Readiness and Challenges Traditional Software Configuration Management Leaders"<br />

(http:/ / www. eetimes. com/ press_releases/ bizwire/ showPressRelease. jhtml?articleID=608063& CompanyId=2). EETimes. May 17, 2007. .<br />

Retrieved June 1, 2007. "Version management is essential to software development and is considered the most critical component of any<br />

development environment."<br />

[2] Wheeler, David. "Comments on Open <strong>Source</strong> Software / Free Software (OSS/FS) Software Configuration Management (SCM) Systems"<br />

(http:/ / www. dwheeler. com/ essays/ scm. html). . Retrieved May 8, 2007.<br />

[3] O'Sullivan, Bryan. "Distributed revision control with Mercurial" (http:/ / hgbook. red-bean. com/ hgbook. html). . Retrieved July 13, 2007.<br />

[4] Collins-Sussman, Ben; Fitzpatrick, B.W. and Pilato, C.M. (2004). Version <strong>Control</strong> with Subversion (http:/ / svnbook. red-bean. com/ ).<br />

O'Reilly. ISBN 0-596-00448-6. .<br />

[5] Wingerd, Laura (2005). Practical Perforce (http:/ / safari. oreilly. com/ 0596101856). O'Reilly. ISBN 0-596-10185-6. .<br />

[6] Collins-Sussman, Ben; Brian W. Fitpatrick, and C. Michael Pilato. "Version <strong>Control</strong> with Subversion" (http:/ / svnbook. red-bean. com/ en/ 1.<br />

5/ svn. tour. cycle. html#svn. tour. cycle. resolve). . Retrieved 8 June 2010. "The G stands for merGed, which means that the file had local<br />

changes to begin with, but the changes coming from the repository didn't overlap with the local changes."<br />

[7] Accurev Concepts Manual, Version 4.7. Accurev, Inc.. July, 2008.<br />

External links<br />

• Eric Sink's <strong>Source</strong> <strong>Control</strong> HOWTO (http:/ / www. ericsink. com/ scm/ source_control. html) A primer on the<br />

basics of version control<br />

• Visual Guide to Version <strong>Control</strong> (http:/ / betterexplained. com/ articles/ a-visual-guide-to-version-control/ )<br />

• Better SCM Initiative: Comparison (http:/ / better-scm. berlios. de/ comparison/ ) A useful summary of different<br />

systems and their features.


Article <strong>Source</strong>s and Contributors 59<br />

Article <strong>Source</strong>s and Contributors<br />

Mercurial <strong>Source</strong>: http://en.wikipedia.org/w/index.php?oldid=388580812 Contributors: AMackenzie, Amniarix, Amux, Ananthshrinivas, Arcy, Aron.gombas, Ash, Aurelien, BenAllard, Bk0,<br />

Boredzo, Bytesmiths, CalculusAndCoffee, ChristianEdwardGruber, Chtito, Cmcqueen1975, CornedBee, Cybercobra, DD2K, Damian Yerrick, Daniel.Cardenas, Dgc, Digana, Dmitry Dzhus, EAi,<br />

Edhoprima, ElTchanggo, Emurphy42, FaranNegarestan, Fmitha, Frap, Free Software Knight, FrenchIsAwesome, Fudoreaper, Gary King, Gioto, Gjbloom, Gogo hr, Grandscribe, Gronky,<br />

Gutworth, Harryboyles, Heimy, Hervegirod, Hyperfusion, IByte, IanVaughan, Imz, Ingvildr, Intgr, JWWalker, Jeffreymcmanus, Jemts, Jonik, Jp8900308, Kaźmierczyk Krzysztof, Kbrose,<br />

Kl4m-AWB, Krier.cedric, LimeHat, Maju wiki, MarSch, Marinovi, MarkusHagenlocher, Martin Geisler, Martin.komunide.com, Matthewn, Mewtu, Mfedyk, Mhi, Mitchan, Mordomo, Naive<br />

cynic, NeuroBells123, Nickpd, Nsavch, Omnifarious, Orderinchaos, Orderud, Orgads, Palfrey, Paul Delhanty, Pax:Vobiscum, Pdz, Peak, Peepeedia, Pen1234567, Peso, Peter.arrenbrecht, Piet<br />

Delport, Pne, RG72, Robert.maclean, Sdudah, Sebastian Goll, Simetrical, Skalee, Sligocki, Slipstream, Smimram, Snowsmash, Tghw, The RedBurn, Thumperward, ThurnerRupert, Timothy<br />

Clemans, Tuggler, Tuxcantfly, Venkytv, W Hukriede, Wesley, Wmahan, Yoghurt, Zuckerberg, 127 anonymous edits<br />

Distributed revision control <strong>Source</strong>: http://en.wikipedia.org/w/index.php?oldid=387192388 Contributors: Adjohnson916, Allen Moore, Apotheon, Asparagus, Bartosz, Bluebusy, Cander0000,<br />

CharlesC, Dondegroovily, Escape Orbit, Furrykef, Greenrd, Grimboy, Ilari Halminen, Imz, Iridescent, JDubman, Jaalto, Jfromcanada, Kateshortforbob, Kenny Strawn, Kevins, Kockster,<br />

LapoLuchini, MarsRover, Martijn Hoekstra, Mdupont, Medovina, MicahElliott, Modify, Ninly, Niteowlneils, Paul Pogonyshev, PaulColby, RossPatterson, Rtc, Samer.hc, Sergiy Kheylyk,<br />

SunCreator, Thumperward, Triwbe, Tuxcantfly, Tzadikv, VictorAnyakin, Wace, Woon Tien Jing, 51 anonymous edits<br />

Git (software) <strong>Source</strong>: http://en.wikipedia.org/w/index.php?oldid=388995597 Contributors: A.M., A2Kafir, Adam Katz, Alerante, Alex.muller, Alisha.4m, AlistairMcMillan, Alphax,<br />

Amalthea, Andre.goddard, AngelKnight, Arichnad, Arjun G. Menon, Artw, Atheuz, Audriusa, Banpei, Bender235, Betterworld, Beyazid, Bigbluefish, Blazar, Bluebusy, Boyski,<br />

Bramschoenmakers, Brentonson, Camponez, Cburnett, CesarB, Chaos.squirrel, Choas, Chr1syr, Chx1975, CiaPan, Ck3d, ConradPino, Coonsta, Cybercobra, Daev, Daniel Thompson,<br />

Daniel.Cardenas, Daniel.ugra, DataWraith, David Gerard, David.hilton.p, Davidswelt, Debarshiray, Deleteme42, Demitsu, Dennis714, DigitalPig, Direvus, DonPaolo, DopefishJustin, Dpotapov,<br />

Drizzd, Dscho, Dwheeler, Eaglizard, Eddie Nixon, Ehamberg, Eleveneleven, Eloquence, Enormekever, Erlendaakre, Eschnett, Eturkay, EvanCarroll, Ewlyahoocom, Fanf, Fatespeaks, Felix<br />

Wiemann, Fiftyquid, Fleasoft, Folajimi, Fragglet, Francis Tyers, FrancisTyers, FrankTobia, Frap, Frecklefoot, Fred Bradstadt, Fredrik, Free Software Knight, Furrykef, Gaius Cornelius, Gdavidp,<br />

Generalk, Gil mo, GivePeasAChance, Gjmulhol, Glenn, Gloin, Gogo hr, Gonzonoir, Greg Tyler, GregorB, Grendelkhan, Gronky, Groxx, Grutness, Gustavb, Gwern, Hairy Dude, Hanifbbz,<br />

Hannes Röst, Hawaiian717, Henon, Henridv, Hervegirod, Hooperbloob, Hpv, Hu2hugo, Hulten, HumbertoDiogenes, Hypersw, ISoron, IainDavidson, IanVaughan, Iani, Ino5hiro, Int19h, Intgr,<br />

IvanLanin, J Di, J.delanoy, JLaTondre, JamesTeterenko, Jeffrey Smith, Jeffz1, Jengelh, Jfcarr, Jherland, Jidanni, Jnareb, John Vandenberg, Jonnycando, Juhtolv, Jun-Dai, Junkblocker, Justin545,<br />

KYSoh, Kesla, Kevinbsmith, Kinema, King of Hearts, Kl4m-AWB, Kntrabssi, Kugland, Kwerle, Landroni, Leonid Volnitsky, LimeHat, Linuxbeak, Liontooth, Liyf, MBisanz, Maddyunlocked,<br />

Majromax, Mamling, Martin Geisler, Marudubshinki, Matonen, MattFS218, MattGiuca, Matthieu fr, Meandtheshell, Meonkeys, Meow, Methmann, Mfedyk, MikeRS, Mitchan, Modargo,<br />

Mosquitopsu, Moxfyre, MrDolomite, MrOllie, Mugwumpjism, Myrdred, NapoliRoma, Ninly, Nippysaurus, Noam, Orderud, Oska, Padraigk, Pagingmrherman, Palfrey, Paradoja, PaulJackson99,<br />

Pcap, Pelerin2, Pengo, Petteri, Phil.a, Pjrm, Pnorcks, Qutezuce, Qwe, RCX, Raggha, RainerBlome, RandalSchwartz, Raul654, Raysonho, Reedy, Renku, ReyBrujo, Rich Farmbrough,<br />

Rigmahroll, Rjwilmsi, Rogerdpack, RossPatterson, Rossami, Rst, STGM, Samdutton, Sandrafromgermany, Sanxiyn, Saric, Sathallrin, Secleinteer, Shanes, Shd, Shentino, Shoujun, SimenH,<br />

Sivaraj, Sligocki, Smyth, Socrates32, Spasquali, SpeedyGonsales, Spyhawk, Stassats, Stevenj, Stevertigo, Strimo, Subsolar, Superm401, Sverdrup, Svick, Sycarr, Sysmonblog, TakuyaMurata,<br />

Tchoř, Tedickey, Thayvian, Thepizzaking, Thumperward, ThurnerRupert, Thv, TigerShark, Tim abell, Toofishes, Tpk5010, Trevor37, Trödel, Tuxcantfly, Uncle G, Unicodemonkey, VanGore,<br />

Vanuan, Vegpuff, Venkytv, Veratien, Viatropos, Vl'hurg, Warren, Wmahan, Woohookitty, Woseph, Wwwwolf, Xan2, Zzzawir, Ævar Arnfjörð Bjarmason, Žiedas, 494 anonymous edits<br />

BitKeeper <strong>Source</strong>: http://en.wikipedia.org/w/index.php?oldid=376843146 Contributors: -fin, Ahoerstemeier, Andrewtn, Ashawley, Benabell, Betacommand, Betterworld, Bk0, BlueAzure,<br />

Bryan Derksen, CesarB, Ciphergoth, Computerjoe, Connelly, Cyde, Elifarley, Elpincha, Evice, Evil Eccentric, Finlay McWalter, Frap, Fredrik, Furrykef, Glenn Willen, Graue, Grendelkhan,<br />

Guaka, Guppie, Hairy Dude, Hyuri, Inclusivedisjunction, Jamelan, Jamesday, Jdtyler, Jnareb, Josephw, Jrka, Male1979, Marudubshinki, Mellery, Mipadi, Mkcmkc, Morwen, Moxfyre, Naddy,<br />

Nixdorf, Ob, Ortzinator, Pakaran, Pascal666, Pengo, Rich Farmbrough, Seitz, Shlomif, Sikon, Skapur, Sligocki, Stevenj, Sydneyfong, TakuyaMurata, Thv, Tobias, Uncle G, Unixguy, Vsion,<br />

WikianJim, Wsc9tt, Wuzzeb, 50 anonymous edits<br />

ikiwiki <strong>Source</strong>: http://en.wikipedia.org/w/index.php?oldid=380075048 Contributors: Chase me ladies, I'm the Cavalry, CiaranG, Den fjättrade ankan, Fetchcomms, Greenrd, Greg Tyler, Imz,<br />

Isoxyl, JLaTondre, Jayjg, Josh Triplett, MBParker, Mahahahaneapneap, Merriam, Nomeata, Pcap, Rich Farmbrough, Shaundakulbara, Sverdrup, Tbleher, Thumperward, Tobias Bergemann,<br />

Xan2, Yaron K., Yworo, 9 anonymous edits<br />

Subversion (software) <strong>Source</strong>: http://en.wikipedia.org/w/index.php?oldid=356190295 Contributors: ABLsaurusRex, AThing, Abelson, Abi79, Aceeca, Adamantios, Adrian.benko, Agencius,<br />

Akamu37, Al001, AlistairMcMillan, AliveFreeHappy, Allanhalme, Alvin-cs, Ameaijou, Amitverma, AndreaPersephone, Andrew Bond, Anna512, Annabel, Ansell, Appraiser, Arrataz,<br />

Arseny1992, ArthurBarrett, Arwhyte, Autrijus, Avonderluft, Barefootguru, Bdesham, Bdude, Beethoven05, Beland, Beradrian, Billportelli, Bk0, Bodhi.root, Boredzo, Borisvolfson, BraneJ,<br />

Brettporter, Brighterorange, Btwied, Btyner, Cabcodespring, Campuscodi, Carribeiro, Catapult, Chealer, Chiak, Concavelenz, Coralguy80, Corti, Crcd, Csabo, Cshay, Cysiek10, DCEvoCE, Dan<br />

Forever, Daniel.Cardenas, Dany4762, Darkride, Darshana.jayasinghe, David Gerard, Derprediger, Djg2006, Doopokko, Dougher, DrSpice, Drrngrvy, Dulciana, Duplicity, Dwlegg, Ecerutti, Ed<br />

g2s, Ehn, Ejrh, Eliyahu S, Eloquence, Enochlau, EoGuy, Esycat, Ext9, FlashSheridan, Fractal3, Fragglet, Fran Rogers, Fred Bradstadt, Free Software Knight, FrenchIsAwesome, Ftiercel,<br />

Furrykef, GTyron, Gameguy43, Giddie, Gilesmorant, Gordonrox24, Gottowik, Greenrd, Gronky, Gstein, Gtrmp, Guidohaarmans, Gutworth, Hawaiian717, Hede2000, Hermzz, Hm2k, Hoylen,<br />

Husky, Hyperthermia, IMSoP, Ian wild, IanVaughan, Iceb, Icek, Idumont2007, Illustir, Imroy, Imz, Intgr, IvanLanin, J JMesserly, JHunterJ, JLaTondre, Jacosi, JamesHenstridge, Jdm64,<br />

Jehochman, Jeremy Visser, John L Wallace, John Vandenberg, Jonas Olson, Jopsen, Julesd, Juliano, Jwestbrook, Jwmillerusa, Kae, Karam.Anthony.K, Karson, Kenguest, Kfogel, Khalid hassani,<br />

Kingdon, Kjoonlee, Kkinder, Kl4m-AWB, Knutux, Kolja,nahimov, Korg, KublaChaos, Kukini, LDiracDelta, Lee Carre, Leigh, Lesionarian, Levin, Lion.guo, Liorkaplan, Lithrium, LittleDan,<br />

Loqui, Lpangelrob, Luuse, Mahpatel, Mailtodaman, Marchash, Mark Renier, MarkPilgrim, Marmelad, MarsRover, Martin Tux Simons, Martinjglover, Marudubshinki, Marysunshine, Mathrick,<br />

Matt Crypto, Mauget, Mbbeaton, Mebden, MerlinYoda, Michael Hardy, Michael Sinz, Mikeblas, Mindmatrix, Mintrick, Mipadi, MisterSheik, Mitul0520, Mkegelmann, Mml, Moa3333, Morte,<br />

Motine, Moxfyre, Moyda, Mpeg4codec, MrOllie, Mtoley, Mxn, NeARAZ, Neilc, Nertzy, Nialsh, Nick Levine, Nikai, Nixeagle, Nux, Oberiko, Ojigiri, Olekva, Olivier Debre, Orderud, Owlsfan,<br />

PEJL, Pablo-flores, Pallaert, Parklandspanaway, Patrick, Pburba, PeteVerdon, Peu, Peyre, Phmarek, Pne, Polymorp, Prodoc, PseudoSudo, Pwae, Quartz25, R3m0t, Rajah, Rama, Ramanavelan,<br />

Rankinke, Rayngwf, Rcalhoun, ReCover, Reagle, Red Thrush, RedWolf, Redprimary, Reelrt, Regibox, Reinderien, Renku, RenniePet, Reub2000, RickBeton, Rjwilmsi, Rob.daemon, Robert K S,<br />

RossPatterson, RoyBoy, Rufous, Ruud Koot, SCEhardt, SF007, Sae1962, Sam Staton, Sami Kerola, Samuella, Sandrafromgermany, SarekOfVulcan, Sbressler, Scarlet Lioness, Schapel, SchreyP,<br />

SchwaberWocky, Sega381, Seidenstud, Shaddack, Sheremetyev, Shirishag75, Shlomif, Sietse Snel, Signalhead, Sirsam, Sligocki, Slreynolds, Smcleish, Smfair, Smrose, Snaq, Somercet,<br />

Spacy73, Stan231, Stannered, Stassats, Stephan Leeds, Stevenjgarner, Stevertigo, Stillnotelf, Strait, Stroebti, StuffOfInterest, Stwalkerster, SugarKane, SunCreator, Sunny256, Superm401,<br />

SvenGodo, Svick, Swpb, Syncrosoft, TFOWR, Taw, Teratornis, Tetracube, The Anome, TheDarkNomad, Thue, Thumperward, Thv, Tidam, Tobias Bergemann, Tobius, Tosha, TropicalMonkey,<br />

Ubik70, User A1, Vectro, VictorReinhart, Vikrant42, Vincent Jacobs, Vints, Vsion, WadeSchuette, Wesley, Whitlockjc, WikHead, Winterst, Witepa, Wlievens, Wmahan, Wondersz, Wwwwolf,<br />

Xompanthy, YordanGeorgiev, Youngwr, ZealousCoder, Zedlander, Zenzee, Zephyrfalcon, Ævar Arnfjörð Bjarmason, 495 anonymous edits<br />

List of revision control software <strong>Source</strong>: http://en.wikipedia.org/w/index.php?oldid=389286972 Contributors: .digamma, 2D, A1, Afc, Alensha, Allen Moore, Alxeedo, Amfahrj,<br />

Arndbergmann, ArthurBarrett, Ashley Y, Bartosz, Bill Clark, Ccady, CesarB, ChrisCork, CiaranG, ClaudineChionh, Connelly, Cspurrier, DEddy, Darth Panda, David-Sarah Hopwood,<br />

DenMoren, Diegof79, Douga, Douglaurac98, Dpotapov, Dreadstar, EagleOne, Eisnard, Elego, Ericlee748, Etnies99, EwanMcNab, Excirial, Faginwiki, Faltenin, Firien, Flet, Fractal3,<br />

Francesco.biccari, Frecklefoot, Furrykef, Gbjbaanb, Greenman, Haakon, Harej, Haricotvert, Harmony07, Heron, IanOsgood, Imroy, Intachange, J voris, JLaTondre, JRHorse, Jack Merridew,<br />

Jackey Jones, Jemfinch, Jpgolay, Juliano, Jwarhol, Karnesky, Kevins, Kfogel, Kgrandpak, Khalid hassani, Kippson, Langpavel, Lee Carre, Lpgeffen, Malcolmxl5, MarkMascolino,<br />

Mckaysalisbury, MidrangeMan, Mike Payne, Moa3333, Molyneux.peter, Motio, Moxfyre, Mukis, Mware, NellieBly, Netstar, Ninly, Ohnoitsjamie, Ompty, Open haris, Orderud, Payton11,<br />

Pelago, Peter S., Peter.vk, PetersonPro1, Petra.hegarty, Plolet, PsychoSafari, Raboof, Ratiocination, Red Director, Reinyday, Reisio, RossPatterson, Samer.hc, Sara Cooper, Satori Son, Seitz, Shd,<br />

SickTwist, Sigma 7, Ssentinel, StaticSan, SteinbDJ, Sundae, Tedickey, Theman01, Themshow, Thiseye, Thv, Timc, Tnizani, Tobias Bergemann, Trashbird1240, Tvarnoe, Urimargalit, Usafi,<br />

VanRysselberghe, Vsion, Warren, WhiteLightning, WiKiMan3L, Windharp, Wmahan, Wnoise, Workshare, Wormholio, Xsgauthier, Youngwr, Ziroby, Ævar Arnfjörð Bjarmason, 243<br />

anonymous edits<br />

Comparison of revision control software <strong>Source</strong>: http://en.wikipedia.org/w/index.php?oldid=390459450 Contributors: 127, AdamSiska, Afc, Aigenta, Akmg, AlanBarrett, Albertvanbiljon,<br />

Alejandro66, Amfahrj, Andrea Lamar, Andreas S., Angedelamort, ArchiSchmedes, Arichnad, ArthurBarrett, Astronaut, Bartosz, Beland, Bigbluefish, Bigfoot00, Boemanneke, Bones0,<br />

Bytesmiths, C777, Cburnett, Ccady, Ceros, Chapliong, Chnacat, Chris the speller, Ciphergoth, CompIsMyRx, Craig Stuntz, Crazeinc, CrazyTerabyte, CrisLander, Ctrlsoft, Cubonic, Damien<br />

Cassou, DanConnolly, DanielVasicek, Danipen, Dark ixion, Dave Yost, David-Sarah Hopwood, DejanLekic, Demono, Dpotapov, Drake Wilson, Drizzd, Dulciana, Dvarrazzo, Earle Martin, EdC,<br />

Ehudm1, Emreg00, EnTerr, Epimienta, Etaekema, Etherboy, EvanED, Excirial, F.svehla, Fale, Faltenin, Fedwa, FraGGod, Fraterm, Frecklefoot, FutureDomain, Gaal, GarenParham, Gaz Man,<br />

Ghen, Glyphobet, Grafen, Greenman, Greenrd, GreyCat, Gstein, Gudeldar, Gê, HPSCHD, Haakon, Heirpixel, Huazheng, IByte, ISC PB, IanOsgood, IanVaughan, Ideaworks, Imachuchu, Imroy,<br />

Imz, Infofarmer, Intachange, Intgr, Intheairalot, JLaTondre, Jack Merridew, Jameinel, Jdm64, Jec, Jengelh, Jeremy Visser, John Vandenberg, John Yesberg, Joke de Buhr, JonJuan, Jonabbey,<br />

JoshRyan, Juliano, KAtremer, Kae, KampfCaspar, Keramida, Kissedsmiley, Kvangend, Lammig, Larry Hastings, Ldoron, Leachim6, LilHelpa, Lkundrak, Lod, Ludovic Brenta, Luks, MBParker,<br />

MagnusW, Malcolmxl5, Masklinn, Matthew V Ball, MaxSem, Mccabeusers, Mcld, Mdg149, Merbabu, MichaelDavid1, MichaelPloujnikov, Mikeblas, Miketinte, Mild Bill Hiccup, Mindmatrix,<br />

Mino, Mister Farkas, Mitchan, Mlevison, Moxfyre, Mskfisher, Mukis, NapoliRoma, Narendra Sisodiya, Nberardi, Nealmcb, NenoLoje, Neoseeker.com, Neustradamus, Nfearnley, Nicholas<br />

Allen74, OlavN, Optikos, Orderud, Orz, Outmind, Panzi, PaulBoxley, Payton11, Peak, Pehaynes, Pen1234567, Peter.vk, Peter.weseloh, Petra.hegarty, Peu, Pol098, Polluks, Proub, Python,<br />

RalphMoritz, RandomPrecision, Revolus, Roamingbecki, Roarkh, RobLa, Rriehle, Rskrueger, Rzclawson, S.borchers, SF007, Sanxiyn, Sara Cooper, Schwern, Scottb1978, Sensorflo, Servel333,


Article <strong>Source</strong>s and Contributors 60<br />

Shinmawa, Sid1138, Smoorfoo, St.General, Stassats, Stephan Leeds, Steppres, Stevage, Szilveszter Farkas, Tedickey, Themshow, Thumperward, Tianyi Cui, Timcharper, Timneu22, Tobias<br />

Bergemann, Tommyd3mdi, Trustable, Tuxcantfly, Urchin22, VMiklos, Van der Hoorn, VladV, Waldir, Warren, Wm243, Wmahan, Wonderstruck, Woseph, XPav, Ysangkok, Zilog Jones, 633<br />

anonymous edits<br />

Revision control <strong>Source</strong>: http://en.wikipedia.org/w/index.php?oldid=391806712 Contributors: .digamma, 1-is-blue, 16@r, 16x9, A.M., Aitias, Aldie, Alvatov, Ancheta Wis, Antonielly,<br />

ArneBab, Bartosz, Baudway, Berny, Bevo, Bgpaulus, Bjmiller, Blackeagle, BobBagwill, Boobtimelive, Breakpoint, Brockert, Btwied, Burris, Bursar42, Burschik, Cander0000, CanisRufus,<br />

Centrx, CesarB, CharlesC, CitizenDAK, Cjcollier, Clkao, Collabi, Cquan, Crossmr, Cyde, CyrilB, DARTH SIDIOUS 2, DRAGON Elemental, Danielx, David Crawshaw, Deagle AP, Degenera,<br />

Deuchlincoln35, Dionye, Dondegroovily, Dorftrottel, Echion2, Edward, Edward Z. Yang, Eep², Egfrank, Eloquence, Elwikipedista, Erik9, EvanCarroll, Ewlyahoocom, Felixdakat, Flammifer,<br />

Flash200, Fractal3, Frau K, Frecklefoot, Fryed-peach, Gamefreak2413, Greenrd, Grimboy, Gsmgm, Gurch, Harmil, Hellboy1975, Hhhjjjkkk, IanClatworthy, Imroy, Iridescent, Iulianu,<br />

IvanLanin, Ixfd64, J-Wiki, Janakan86, Jblack, Jni, Jonabbey, Jose.mira, JoshRyan, Joshbosh, Kate, KennethJ, Kevins, Khym Chanur, Krischik, Ksd5, LeeHunter, Lichen0426, Lotje, Lquilter,<br />

Luna Santin, Madduck, MarkBrooks, Martinkunev, Memogron, MicahElliott, Michael Allan, Minghong, Moa3333, Moxfyre, Msikma, MyNameIsJackson, Naradapuri, Nashev, NawlinWiki,<br />

Netsnipe, Nickg, Nigelj, Nikai, ObfuscatePenguin, Ohnoitsjamie, Olivier Debre, Orderud, Pascal666, Peruvianllama, PeteVerdon, Peter.vk, Petra.hegarty, Phil Boswell, PhilipMW, Phoe6,<br />

PiRSquared17, Piet Delport, Pkchan, Pne, Prodoc, Project2501a, Qxz, R'n'B, Rachana09, Rashack, RedWolf, Rich Farmbrough, Righteye, Rjd0060, Rjwilmsi, Rob Hooft, Robert Illes, Robert<br />

Merkel, Robth, Rodii, RossPatterson, Ruud Koot, Sabri76, Salgueiro, Sam Korn, Seitz, Shenme, SickTwist, Sietse Snel, Silsor, Sjgcit, Skoczko, Skyezx, Slakr, Snarpel, Soumyasch, Spalding,<br />

Stevietheman, Sunny256, Synthetik, Talgalili, TechnoGuyRob, Technobadger, Tedickey, Tejas81, Teratornis, Tevildo, Thejoshwolfe, Thiagomacieira, ThomasOwens, Thv, Timkccb, Timneu22,<br />

Tobias Bergemann, Tommyjb, TruthinQuest, Tue18nov, Tyler McHenry, Tyler Oderkirk, UU, Vcwizard, Voyagerfan5761, Wesley, Weyrick, Wikipelli, Winterst, Wmahan, YUL89YYZ, Yage,<br />

Yaronf, Yevrah342, Youandme, Zhxjojo, Ziounclesi, 308 anonymous edits


Image <strong>Source</strong>s, Licenses and Contributors 61<br />

Image <strong>Source</strong>s, Licenses and Contributors<br />

File:Mercurial logo.png <strong>Source</strong>: http://en.wikipedia.org/w/index.php?title=File:Mercurial_logo.png License: unknown Contributors: Cybercobra<br />

Image:Hgk.png <strong>Source</strong>: http://en.wikipedia.org/w/index.php?title=File:Hgk.png License: Public Domain Contributors: Original uploader was Sebastian Goll at en.wikipedia<br />

File:git-logo.svg <strong>Source</strong>: http://en.wikipedia.org/w/index.php?title=File:Git-logo.svg License: GNU General Public License Contributors: User:Stannered<br />

Image:ikiwiki.png <strong>Source</strong>: http://en.wikipedia.org/w/index.php?title=File:Ikiwiki.png License: GNU General Public License Contributors: ikiwiki project<br />

File:Subversion.png <strong>Source</strong>: http://en.wikipedia.org/w/index.php?title=File:Subversion.png License: unknown Contributors: JWWalker, Jwestbrook, Sfan00 IMG, Stannered, Ysangkok, 1<br />

anonymous edits<br />

File:Svn 3D-tree.svg <strong>Source</strong>: http://en.wikipedia.org/w/index.php?title=File:Svn_3D-tree.svg License: Creative Commons Attribution-Sharealike 2.5 Contributors: User:Marmelad<br />

File:Subversion project visualization.svg <strong>Source</strong>: http://en.wikipedia.org/w/index.php?title=File:Subversion_project_visualization.svg License: GNU Free Documentation License<br />

Contributors: User:Stannered<br />

File:Revision controlled project visualization-2010-24-02.svg <strong>Source</strong>: http://en.wikipedia.org/w/index.php?title=File:Revision_controlled_project_visualization-2010-24-02.svg License: GNU<br />

Free Documentation License Contributors: User:Echion2, User:Moxfyre, User:Stannered


License 62<br />

License<br />

Creative Commons Attribution-Share Alike 3.0 Unported<br />

http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!