Go to file
Linus Torvalds 750f7b668f Finally implement "git log --follow"
Ok, I've really held off doing this too damn long, because I'm lazy, and I
was always hoping that somebody else would do it.

But no, people keep asking for it, but nobody actually did anything, so I
decided I might as well bite the bullet, and instead of telling people
they could add a "--follow" flag to "git log" to do what they want to do,
I decided that it looks like I just have to do it for them..

The code wasn't actually that complicated, in that the diffstat for this
patch literally says "70 insertions(+), 1 deletions(-)", but I will have
to admit that in order to get to this fairly simple patch, you did have to
know and understand the internal git diff generation machinery pretty
well, and had to really be able to follow how commit generation interacts
with generating patches and generating the log.

So I suspect that while I was right that it wasn't that hard, I might have
been expecting too much of random people - this patch does seem to be
firmly in the core "Linus or Junio" territory.

To make a long story short: I'm sorry for it taking so long until I just
did it.

I'm not going to guarantee that this works for everybody, but you really
can just look at the patch, and after the appropriate appreciative noises
("Ooh, aah") over how clever I am, you can then just notice that the code
itself isn't really that complicated.

All the real new code is in the new "try_to_follow_renames()" function. It
really isn't rocket science: we notice that the pathname we were looking
at went away, so we start a full tree diff and try to see if we can
instead make that pathname be a rename or a copy from some other previous
pathname. And if we can, we just continue, except we show *that*
particular diff, and ever after we use the _previous_ pathname.

One thing to look out for: the "rename detection" is considered to be a
singular event in the _linear_ "git log" output! That's what people want
to do, but I just wanted to point out that this patch is *not* carrying
around a "commit,pathname" kind of pair and it's *not* going to be able to
notice the file coming from multiple *different* files in earlier history.

IOW, if you use "git log --follow", then you get the stupid CVS/SVN kind
of "files have single identities" kind of semantics, and git log will just
pick the identity based on the normal move/copy heuristics _as_if_ the
history could be linearized.

Put another way: I think the model is broken, but given the broken model,
I think this patch does just about as well as you can do. If you have
merges with the same "file" having different filenames over the two
branches, git will just end up picking _one_ of the pathnames at the point
where the newer one goes away. It never looks at multiple pathnames in
parallel.

And if you understood all that, you probably didn't need it explained, and
if you didn't understand the above blathering, it doesn't really mtter to
you. What matters to you is that you can now do

	git log -p --follow builtin-rev-list.c

and it will find the point where the old "rev-list.c" got renamed to
"builtin-rev-list.c" and show it as such.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2007-06-22 23:37:11 -07:00
Documentation Document git-gui, git-citool as mainporcelain manual pages 2007-06-22 22:32:32 -07:00
arm War on whitespace 2007-06-07 00:04:01 -07:00
compat Merge branch 'maint' to sync with GIT 1.5.2.2 2007-06-16 01:22:10 -07:00
contrib gitview: run blame with -C -C 2007-06-13 02:14:26 -07:00
git-gui Merge branch 'master' of git://repo.or.cz/git-gui 2007-06-12 00:14:47 -07:00
gitweb gitweb: change filename/directory name of snapshots 2007-06-12 22:22:06 -07:00
mozilla-sha1 War on whitespace 2007-06-07 00:04:01 -07:00
perl War on whitespace 2007-06-07 00:04:01 -07:00
ppc War on whitespace 2007-06-07 00:04:01 -07:00
t filter-branch: add example to move everything into a subdirectory 2007-06-22 23:20:44 -07:00
templates Remove trailing slash from $(template_dir). 2007-06-12 00:23:31 -07:00
xdiff Missing statics. 2007-06-08 02:37:19 -07:00
.gitignore Merge branch 'maint' to sync with GIT 1.5.2.2 2007-06-16 01:22:10 -07:00
.mailmap Add DLH to .mailmap 2007-05-30 10:45:55 -07:00
COPYING
GIT-VERSION-GEN GIT 1.5.2.2 2007-06-16 01:13:35 -07:00
INSTALL INSTALL: explain how to build documentation 2007-06-20 16:22:09 -07:00
Makefile Merge branch 'js/filter' 2007-06-22 23:20:40 -07:00
README
RelNotes GIT 1.5.2.2 2007-06-16 01:13:35 -07:00
alloc.c Clean up object creation to use more common code 2007-04-16 23:36:16 -07:00
archive-tar.c rename dirlink to gitlink. 2007-05-21 23:34:54 -07:00
archive-zip.c rename dirlink to gitlink. 2007-05-21 23:34:54 -07:00
archive.h
attr.c Fix crash in t0020 (crlf conversion) 2007-04-22 10:44:56 -07:00
attr.h Fix funny types used in attribute value representation 2007-04-18 16:17:13 -07:00
base85.c decode_85(): fix missing return. 2007-05-30 15:03:50 -07:00
blob.c Clean up object creation to use more common code 2007-04-16 23:36:16 -07:00
blob.h
builtin-add.c builtin-add: simplify (and increase accuracy of) exclude handling 2007-06-13 00:41:52 -07:00
builtin-annotate.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-apply.c git-apply: what is detected and fixed is not just trailing spaces. 2007-06-02 20:02:19 -07:00
builtin-archive.c connect: display connection progress 2007-05-16 12:48:18 -07:00
builtin-blame.c git-blame -w: ignore whitespace 2007-06-09 18:34:58 -07:00
builtin-branch.c Merge branch 'ei/oneline+add-empty' 2007-06-22 23:32:19 -07:00
builtin-bundle.c Ensure return value from xread() is always stored into an ssize_t 2007-05-15 21:16:03 -07:00
builtin-cat-file.c Cleanup variables in cat-file 2007-04-22 00:43:24 -07:00
builtin-check-attr.c Fix funny types used in attribute value representation 2007-04-18 16:17:13 -07:00
builtin-check-ref-format.c
builtin-checkout-index.c
builtin-commit-tree.c init_buffer(): Kill buf pointer 2007-04-25 13:45:12 -07:00
builtin-config.c Update git-config documentation 2007-04-18 22:08:16 -07:00
builtin-count-objects.c Simplify index access condition in count-objects, pack-redundant 2007-05-29 23:30:11 -07:00
builtin-describe.c Teach git-describe how to run name-rev 2007-05-21 23:56:28 -07:00
builtin-diff-files.c Removing -n option from git-diff-files documentation 2007-04-26 22:43:10 -07:00
builtin-diff-index.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-diff-tree.c
builtin-diff.c Diff between two blobs should take mode changes into account now. 2007-04-24 00:08:49 -07:00
builtin-fetch--tool.c Merge branch 'sv/checkout' 2007-05-20 02:18:47 -07:00
builtin-fmt-merge-msg.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-for-each-ref.c
builtin-fsck.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-gc.c Make "git gc" pack all refs by default 2007-05-24 19:05:39 -07:00
builtin-grep.c sscanf/strtoul: parse integers robustly 2007-04-14 19:47:20 -07:00
builtin-init-db.c Remove trailing slash from $(template_dir). 2007-06-12 00:23:31 -07:00
builtin-log.c Finally implement "git log --follow" 2007-06-22 23:37:11 -07:00
builtin-ls-files.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-ls-tree.c Merge branch 'jn/lstree' 2007-05-23 00:17:47 -07:00
builtin-mailinfo.c More missing static 2007-06-08 02:37:19 -07:00
builtin-mailsplit.c More missing static 2007-06-08 02:37:19 -07:00
builtin-merge-base.c
builtin-merge-file.c git-merge-file: refuse to merge binary files 2007-06-04 23:10:29 -07:00
builtin-mv.c Merge branch 'jc/index-output' 2007-04-07 02:26:24 -07:00
builtin-name-rev.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-pack-objects.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-pack-refs.c Make the pack-refs interfaces usable from outside 2007-05-26 20:00:55 -07:00
builtin-prune-packed.c
builtin-prune.c
builtin-push.c Move refspec pattern matching to match_refs(). 2007-05-26 01:20:10 -07:00
builtin-read-tree.c Document git read-tree --trivial 2007-06-16 13:08:09 -07:00
builtin-reflog.c git-update-ref: add --no-deref option for overwriting/detaching ref 2007-05-10 15:24:44 -07:00
builtin-rerere.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-rev-list.c Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
builtin-rev-parse.c
builtin-revert.c More static 2007-06-13 02:02:10 -07:00
builtin-rm.c Add --ignore-unmatch option to exit with zero status when no files are removed. 2007-04-17 00:19:11 -07:00
builtin-runstatus.c
builtin-shortlog.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-show-branch.c Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
builtin-show-ref.c
builtin-stripspace.c Even more missing static 2007-06-08 02:54:57 -07:00
builtin-symbolic-ref.c
builtin-tar-tree.c
builtin-unpack-objects.c Ensure return value from xread() is always stored into an ssize_t 2007-05-15 21:16:03 -07:00
builtin-update-index.c rename dirlink to gitlink. 2007-05-21 23:34:54 -07:00
builtin-update-ref.c git-update-ref: add --no-deref option for overwriting/detaching ref 2007-05-10 15:24:44 -07:00
builtin-upload-archive.c
builtin-verify-pack.c
builtin-write-tree.c Merge branch 'maint' 2007-04-25 23:31:45 -07:00
builtin.h Even more missing static 2007-06-08 02:54:57 -07:00
cache-tree.c Two trivial -Wcast-qual fixes 2007-06-22 23:19:43 -07:00
cache-tree.h
cache.h Merge branch 'ei/oneline+add-empty' 2007-06-22 23:32:19 -07:00
check-builtins.sh
check-racy.c
color.c
color.h
combine-diff.c Ensure return value from xread() is always stored into an ssize_t 2007-05-15 21:16:03 -07:00
commit.c Merge branch 'jc/oneline' 2007-06-22 23:33:08 -07:00
commit.h Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
config.c -Wold-style-definition fix 2007-06-13 02:02:10 -07:00
config.mak.in War on whitespace 2007-06-07 00:04:01 -07:00
configure.ac
connect.c Do not use h_errno after connect(2): the function does not set it 2007-06-16 09:11:58 -07:00
convert-objects.c War on whitespace 2007-06-07 00:04:01 -07:00
convert.c Fix mishandling of $Id$ expanded in the repository copy in convert.c 2007-05-26 01:12:43 -07:00
copy.c War on whitespace 2007-06-07 00:04:01 -07:00
csum-file.c More static 2007-06-13 02:02:10 -07:00
csum-file.h More static 2007-06-13 02:02:10 -07:00
ctype.c War on whitespace 2007-06-07 00:04:01 -07:00
daemon.c Missing statics. 2007-06-08 02:37:19 -07:00
date.c War on whitespace 2007-06-07 00:04:01 -07:00
decorate.c Fix a copy-n-paste bug in the object decorator code. 2007-04-20 19:16:12 -07:00
decorate.h Add a generic "object decorator" interface, and make object refs use it 2007-04-16 16:51:09 -07:00
delta.h
diff-delta.c diff-delta: use realloc instead of xrealloc 2007-05-31 00:15:18 -07:00
diff-lib.c War on whitespace 2007-06-07 00:04:01 -07:00
diff.c Finally implement "git log --follow" 2007-06-22 23:37:11 -07:00
diff.h Finally implement "git log --follow" 2007-06-22 23:37:11 -07:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c War on whitespace 2007-06-07 00:04:01 -07:00
diffcore-rename.c diffcore-rename: favour identical basenames 2007-06-22 22:43:51 -07:00
diffcore.h Make macros to prevent double-inclusion in headers consistent. 2007-04-29 02:05:11 -07:00
dir.c Fix ALLOC_GROW calls with obsolete semantics 2007-06-16 18:00:07 -07:00
dir.h builtin-add: simplify (and increase accuracy of) exclude handling 2007-06-13 00:41:52 -07:00
dump-cache-tree.c
entry.c War on whitespace 2007-06-07 00:04:01 -07:00
environment.c War on whitespace 2007-06-07 00:04:01 -07:00
exec_cmd.c
exec_cmd.h Make macros to prevent double-inclusion in headers consistent. 2007-04-29 02:05:11 -07:00
fast-import.c Merge branch 'maint' 2007-05-23 22:37:23 -07:00
fetch-pack.c War on whitespace 2007-06-07 00:04:01 -07:00
fetch.c War on whitespace 2007-06-07 00:04:01 -07:00
fetch.h
generate-cmdlist.sh More static 2007-06-13 02:02:10 -07:00
git-add--interactive.perl
git-am.sh More echo "$user_message" fixes. 2007-05-26 00:33:03 -07:00
git-archimport.perl War on whitespace 2007-06-07 00:04:01 -07:00
git-bisect.sh Bisect: simplify "bisect start" logging. 2007-04-16 21:44:40 -07:00
git-checkout.sh Merge branch 'maint' 2007-06-08 02:55:19 -07:00
git-clean.sh Add clean.requireForce option, and add -f option to git-clean to override it 2007-04-23 22:13:50 -07:00
git-clone.sh Cloning from a repo without "current branch" 2007-06-20 16:33:24 -07:00
git-commit.sh War on whitespace 2007-06-07 00:04:01 -07:00
git-compat-util.h Add a local implementation of hstrerror for the system which do not have it 2007-06-15 22:48:34 -07:00
git-cvsexportcommit.perl War on whitespace 2007-06-07 00:04:01 -07:00
git-cvsimport.perl Generate tags with correct timestamp (git-svnimport) 2007-06-22 22:13:49 -07:00
git-cvsserver.perl cvsserver: Actually implement --export-all 2007-06-15 22:38:48 -07:00
git-fetch.sh Add another verbosity level to git-fetch 2007-05-24 21:37:03 -07:00
git-filter-branch.sh filter-branch: add example to move everything into a subdirectory 2007-06-22 23:20:44 -07:00
git-instaweb.sh
git-lost-found.sh
git-ls-remote.sh
git-merge-octopus.sh
git-merge-one-file.sh War on whitespace 2007-06-07 00:04:01 -07:00
git-merge-ours.sh
git-merge-resolve.sh
git-merge-stupid.sh
git-merge.sh Merge branch 'ar/mergestat' 2007-05-29 00:38:52 -07:00
git-mergetool.sh git-mergetool: Make default selection of merge-tool more intelligent 2007-06-10 11:17:30 -04:00
git-p4import.py War on whitespace 2007-06-07 00:04:01 -07:00
git-parse-remote.sh Allow fetching references from any namespace 2007-05-12 09:36:06 -07:00
git-pull.sh Add a configuration option to control diffstat after merge 2007-05-24 21:37:08 -07:00
git-quiltimport.sh applymbox & quiltimport: typofix. 2007-04-24 14:27:41 -07:00
git-rebase.sh git-rebase: suggest to use git-add instead of git-update-index 2007-06-02 12:07:44 -07:00
git-relink.perl
git-remote.perl git-remote show: Also shorten non-fast-forward refs in the 'push' listing 2007-06-12 22:26:07 -07:00
git-repack.sh Ensure git-repack -a -d --max-pack-size=N deletes correct packs 2007-05-24 19:45:14 -07:00
git-request-pull.sh Improve request-pull to handle non-rebased branches 2007-05-03 23:27:03 -07:00
git-reset.sh add file checkout progress 2007-04-23 21:39:28 -07:00
git-send-email.perl Unquote From line from patch before comparing with given from address. 2007-06-12 00:13:49 -07:00
git-sh-setup.sh
git-submodule.sh git-submodule: give submodules proper names 2007-06-12 01:06:21 -07:00
git-svn.perl git-svn: avoid string eval for defining functions 2007-06-16 01:20:26 -07:00
git-svnimport.perl Generate tags with correct timestamp (git-svnimport) 2007-06-22 22:13:49 -07:00
git-tag.sh War on whitespace 2007-06-07 00:04:01 -07:00
git-verify-tag.sh War on whitespace 2007-06-07 00:04:01 -07:00
git.c Merge branch 'maint-1.5.1' into maint 2007-05-20 19:57:00 -07:00
git.spec.in Document git-gui, git-citool as mainporcelain manual pages 2007-06-22 22:32:32 -07:00
gitk War on whitespace 2007-06-07 00:04:01 -07:00
grep.c Move buffer_is_binary() to xdiff-interface.h 2007-06-15 23:27:23 -07:00
grep.h
hash-object.c
help.c War on whitespace 2007-06-07 00:04:01 -07:00
http-fetch.c War on whitespace 2007-06-07 00:04:01 -07:00
http-push.c War on whitespace 2007-06-07 00:04:01 -07:00
http.c War on whitespace 2007-06-07 00:04:01 -07:00
http.h http-fetch: Disable use of curl multi support for libcurl < 7.16. 2007-05-03 22:12:40 -07:00
ident.c $EMAIL is a last resort fallback, as it's system-wide. 2007-06-15 23:33:06 -07:00
imap-send.c War on whitespace 2007-06-07 00:04:01 -07:00
index-pack.c Unify write_index_file functions 2007-06-02 13:14:18 -07:00
interpolate.c Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
interpolate.h Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
list-objects.c rename dirlink to gitlink. 2007-05-21 23:34:54 -07:00
list-objects.h
local-fetch.c War on whitespace 2007-06-07 00:04:01 -07:00
lockfile.c War on whitespace 2007-06-07 00:04:01 -07:00
log-tree.c Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
log-tree.h
mailmap.c War on whitespace 2007-06-07 00:04:01 -07:00
mailmap.h Split out mailmap handling out of shortlog 2007-04-29 02:05:06 -07:00
match-trees.c War on whitespace 2007-06-07 00:04:01 -07:00
merge-file.c
merge-index.c War on whitespace 2007-06-07 00:04:01 -07:00
merge-recursive.c merge-recursive: refuse to merge binary files 2007-06-15 23:28:10 -07:00
merge-tree.c
mktag.c Remove unnecessary code and comments on non-existing 8kB tag object restriction 2007-06-09 10:51:46 -07:00
mktree.c
object-refs.c War on whitespace 2007-06-07 00:04:01 -07:00
object.c Don't assume tree entries that are not dirs are blobs 2007-06-06 15:43:18 -07:00
object.h War on whitespace 2007-06-07 00:04:01 -07:00
pack-check.c pack-check: Sort entries by pack offset before unpacking them. 2007-06-06 16:04:02 -07:00
pack-redundant.c War on whitespace 2007-06-07 00:04:01 -07:00
pack-write.c Unify write_index_file functions 2007-06-02 13:14:18 -07:00
pack.h Unify write_index_file functions 2007-06-02 13:14:18 -07:00
pager.c
patch-delta.c
patch-id.c War on whitespace 2007-06-07 00:04:01 -07:00
patch-ids.c Refactor patch-id filtering out of git-cherry and git-format-patch. 2007-04-11 20:02:03 -07:00
patch-ids.h Refactor patch-id filtering out of git-cherry and git-format-patch. 2007-04-11 20:02:03 -07:00
path-list.c War on whitespace 2007-06-07 00:04:01 -07:00
path-list.h Make macros to prevent double-inclusion in headers consistent. 2007-04-29 02:05:11 -07:00
path.c
peek-remote.c connect: display connection progress 2007-05-16 12:48:18 -07:00
pkt-line.c War on whitespace 2007-06-07 00:04:01 -07:00
pkt-line.h
progress.c Fix the progress code to output LF only when it is really needed 2007-05-23 11:30:49 -07:00
progress.h Fix the progress code to output LF only when it is really needed 2007-05-23 11:30:49 -07:00
quote.c Even more missing static 2007-06-08 02:54:57 -07:00
quote.h Even more missing static 2007-06-08 02:54:57 -07:00
reachable.c
reachable.h
read-cache.c War on whitespace 2007-06-07 00:04:01 -07:00
receive-pack.c git-update-ref: add --no-deref option for overwriting/detaching ref 2007-05-10 15:24:44 -07:00
reflog-walk.c
reflog-walk.h
refs.c More static 2007-06-13 02:02:10 -07:00
refs.h git-update-ref: add --no-deref option for overwriting/detaching ref 2007-05-10 15:24:44 -07:00
remote.c Merge branch 'jc/remote' 2007-06-16 01:22:45 -07:00
remote.h Add handlers for fetch-side configuration of remotes. 2007-05-20 21:32:56 -07:00
revision.c Finally implement "git log --follow" 2007-06-22 23:37:11 -07:00
revision.h More missing static 2007-06-08 02:37:19 -07:00
rsh.c
rsh.h War on whitespace 2007-06-07 00:04:01 -07:00
run-command.c Allow environment variables to be unset in the processes started by run_command 2007-05-23 22:38:44 -07:00
run-command.h Allow environment variables to be unset in the processes started by run_command 2007-05-23 22:38:44 -07:00
send-pack.c Move refspec pattern matching to match_refs(). 2007-05-26 01:20:10 -07:00
server-info.c
setup.c War on whitespace 2007-06-07 00:04:01 -07:00
sha1_file.c More static 2007-06-13 02:02:10 -07:00
sha1_name.c Active_nr is unsigned, hence can't be < 0 2007-06-08 02:37:18 -07:00
shallow.c War on whitespace 2007-06-07 00:04:01 -07:00
shell.c
show-index.c show-index.c: learn about index v2 2007-04-10 12:48:14 -07:00
sideband.c
sideband.h
ssh-fetch.c
ssh-pull.c
ssh-push.c
ssh-upload.c War on whitespace 2007-06-07 00:04:01 -07:00
strbuf.c War on whitespace 2007-06-07 00:04:01 -07:00
strbuf.h
symlinks.c Add has_symlink_leading_path() function. 2007-05-11 22:11:07 -07:00
tag.c Merge branch 'maint-1.5.1' into maint 2007-05-28 23:54:26 -07:00
tag.h
tar.h
test-chmtime.c
test-date.c
test-delta.c Fix compilation of test-delta 2007-05-01 02:59:08 -07:00
test-genrandom.c simple random data generator for tests 2007-04-11 19:23:32 -07:00
test-match-trees.c A new merge stragety 'subtree'. 2007-04-07 02:29:40 -07:00
test-sha1.c
test-sha1.sh
trace.c
tree-diff.c Finally implement "git log --follow" 2007-06-22 23:37:11 -07:00
tree-walk.c War on whitespace 2007-06-07 00:04:01 -07:00
tree-walk.h Two trivial -Wcast-qual fixes 2007-06-22 23:19:43 -07:00
tree.c Merge branch 'sv/objfixes' 2007-06-06 15:43:24 -07:00
tree.h
unpack-file.c
unpack-trees.c Merge branch 'maint-1.5.1' into maint 2007-05-20 19:57:00 -07:00
unpack-trees.h
update-server-info.c
upload-pack.c Even more missing static 2007-06-08 02:54:57 -07:00
usage.c
utf8.c wcwidth redeclaration 2007-05-07 22:02:40 -07:00
utf8.h
var.c War on whitespace 2007-06-07 00:04:01 -07:00
write_or_die.c
wt-status.c Missing statics. 2007-06-08 02:37:19 -07:00
wt-status.h
xdiff-interface.c Move buffer_is_binary() to xdiff-interface.h 2007-06-15 23:27:23 -07:00
xdiff-interface.h Move buffer_is_binary() to xdiff-interface.h 2007-06-15 23:27:23 -07:00

README

////////////////////////////////////////////////////////////////

	GIT - the stupid content tracker

////////////////////////////////////////////////////////////////

"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 fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

Git is an Open Source project covered by the GNU General Public License.
It was originally written by Linus Torvalds with help of a group of
hackers around the net. It is currently maintained by Junio C Hamano.

Please read the file INSTALL for installation instructions.
See Documentation/tutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands,
and "man git-commandname" for documentation of each command.
CVS users may also want to read Documentation/cvs-migration.txt.

Many Git online resources are accessible from http://git.or.cz/
including full documentation and Git related tools.

The user discussion and development of Git take place on the Git
mailing list -- everyone is welcome to post bug reports, feature
requests, comments and patches to git@vger.kernel.org. To subscribe
to the list, send an email with just "subscribe git" in the body to
majordomo@vger.kernel.org. The mailing list archives are available at
http://marc.theaimsgroup.com/?l=git and other archival sites.

The messages titled "A note from the maintainer", "What's in
git.git (stable)" and "What's cooking in git.git (topics)" and
the discussion following them on the mailing list give a good
reference for project status, development direction and
remaining tasks.