Source Control Research - Bitbucket
Source Control Research - Bitbucket
Source Control Research - Bitbucket
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/