DVCS History
How did we end up with git?
Tim Penhey
Before DVCS
there was just VCS
My first version control
- CVS (at Otago University)
- RCS (at first job)
- CVS - OMG concurrent
- SVN - oh... transactional commits
Really just looking at Open Source DVCS
GNU Arch
- Started in 2001
- Maintainer was Tom Lord
- Written in C
- TLA - Tom Lord's Arch
- Change set oriented
- Easy branching
- Atomic commits
- Rename tracking
- 3-way merges
Darcs
- Started June 2002 by David Roundy
- Evolved from GNU Arch - wanted a new patch format
- Branches are linearly ordered patches
- Ordering was determined algorithmically
- Early versions had exponential failure cases
Bitkeeper
- First publicly available version in 2000
- Free (as in beer) version available
- Proprietory
- Chosen by Linus for the linux kernel in 2002
- Controversial decision
- Not free (as in speech) software
- Richard Stallman
- Alan Cox
Bazaar - baz
- Fork of TLA
- Backed by Canonical
- Announced Oct 2004
- Deprecated mid-2005
Bazaar - bzr
- Initially bazaar-ng (next generation)
- Python rewrite of baz
- Announced Feb 2005
- Backed by Canonical
- Contributor Licence Agreement an issue
- Focus was on modeling and correctness
- Speed was an issue with early releases
Mercurial - hg
- Announced April 2005
- Planned as a Bitkeeper replacement for the kernel
- Primarily Python
- C used for speed where necessary
- Focus on speed primarily
- Good initial adoption among open source projects
- Firefox was a lighthouse project
Git
- Started April 2005 - few days before Hg
- Needed replacement for Bitkeeper
- Existing DVCS tools too slow - 30s to apply patch
- Linus decided to write his own based on a few principles
- Patching should take no longer than 3 seconds
- If in doubt, do the opposite of CVS
- Should have DVCS workflow like bitkeeper
- Include strong safeguards against corruption
What was the push?
- Andrew Tridgell, kernel developer and samba creator wanted an open source tool to use
- Reverse engineered wire protocol
- Larry McVoy said this was a violation of no compete clause in the licence agreement
- should use pay version, free version, or nothing
- Tridgell said he never agreed to any agreement
- McVoy withdrew free version
Git Characteristics
Non-linear development support
rapid branching and merging
Distributed development
every developer had own copy of the repository
Compatibility with existing systems and protocols
http, ftp, ssh
CVS and SVN server emulation
Efficient for large projects
10x faster than some other DVCS systems
Cryptographic authentication of history
ID of a particular change depends on complete history
Toolkit based design
set of C programs and shell scripts
Pluggable merge strategies
well defined model of incomplete merge, and multiple algorithms
Garbage accumulates until collected
incomplete or backed out changes leave dangling objects
Periodic explicit object packing
efficient compressed deltas periodic tree snapshots
So why did git win the DVCS war?
My opinions here
- Network effect
- kernel -> freedesktop.org
- freedesktop.org -> GNOME & KDE
- GNOME -> all gnome apps
- KDE -> all KDE apps
- Rest of open source
- Other projects using bzr or hg moved too
- Firefox & Mozilla
- Ubuntu packaging
Github ?
Questions ?
DVCS History
By Tim Penhey
DVCS History
- 528