Source Code Management with git
In Linus's own words as the creator of git:
"git" can mean anything, depending on your mood.
- random three-letter combination that is pronounceable, and not
actually used by any common UNIX command. The fact that it is a
mispronunciation of "get" may or may not be relevant.
- stupid. contemptible and despicable. simple. Take your pick from the
dictionary of slang.
- "global information tracker": you're in a good mood, and it actually
works for you. Angels sing, and a light suddenly fills the room.
- "goddamn idiotic truckload of sh*t": when it breaks
git is a "directory content manager". git has been designed to handle
absolutely massive projects with speed and efficiency, and the release of the
2.6.12 and (soon) the 2.6.13 version of the Linux kernel would indicate that it
does this task well.
git falls into the category of distributed source code management tools,
similar to Arch or Darcs (or, in the commercial world, BitKeeper). Every git
working directory is a full-fledged repository with full revision tracking
capabilities, not dependent on network access to a central server.
git provides a content-addressable pseudo filesystem, complete with its own
version of fsck.
- Speed of use, both for the project maintainer, and the end-users, is
a key development principle.
- The history is stored as a directed acyclic graph, making long-lived
branches and repeated merging simple.
- The core git project considers itself to provide "plumbing" for other
projects, as well as to serve to arbitrate for compatibility between them.
The project built on top of the core git are referred to as "porcelain".
Stgit, Cogito, qgit, gitk and gitweb are all building upon the core git
tools, and providing an easy to use interface to various pieces of
- Some other projects have taken the concepts from the core git project, and
are either porting an existing toolset to use the git tools, or
reimplementing the concepts internally, to benefit from the performance
improvements. This includes both Arch 2.0, and Darcs-git.
- Two, interchangeable, on-disk formats are used:
- An efficient, packed format that saves space and network
- An unpacked format, optimized for fast writes and incremental
To get a copy of git
Daily snapshots are available at:
(Thanks to Dave Jones)
Source tarballs and RPMs at:
Debian packages should be availabe in unstable (sid) as "git-core"
Or via git itself:
git clone http://www.kernel.org/pub/scm/git/git.git/ <local directory>
git clone rsync://rsync.kernel.org/pub/scm/git/git.git/ <local directory>
(rsync is generally faster for an initial clone, you can switch later
and changing the url)
To get the 'Porcelain' tools
SCM Interface layers:
cogito - http://www.kernel.org/pub/software/scm/cogito/
Patch Management (similar to Quilt):
StGIT - http://www.procode.org/stgit/
- http://ozlabs.org/~paulus/gitk/ (Included in the standard git distribution)
git distributions contain a tutorial in the Documentation subdirectory.
Additionally, the Kernel-Hacker's git Tutorial at
may be useful. (Thanks to Jeff Garzik for
git development takes place on the git mailing list. To subscribe, send an
email with just "subscribe git" in the body to
Mailing list archives are available at
(This summary written by Ryan Anderson . Please bug him
with any corrections or complaints.)