Find a 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
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
Documentation Document git-gui, git-citool as mainporcelain manual pages 2007-06-22 22:32:32 -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
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 Remove unsupported C99 style struct initializers in git-archive. 2006-11-04 23:48:36 -08:00
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 [PATCH] Anal retentive 'const unsigned char *sha1' 2005-06-08 13:04:53 -07:00
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 Further clean-up: usage() vs die() 2006-08-03 21:55:41 -07:00
builtin-checkout-index.c _GIT_INDEX_OUTPUT: allow plumbing to output to an alternative index file. 2007-04-03 23:44:32 -07:00
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 Allow git-diff exit with codes similar to diff(1) 2007-03-14 16:21:19 -07:00
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 General const correctness fixes 2007-03-07 10:47:10 -08:00
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 Make merge-base a built-in. 2007-01-09 17:57:03 -08:00
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 prune-packed: add -q to usage 2007-01-18 14:30:05 -08:00
builtin-prune.c minor git-prune optimization 2007-03-20 22:17:47 -07:00
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 prefixcmp(): fix-up leftover strncmp(). 2007-02-20 22:03:15 -08:00
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 simplify inclusion of system header files. 2006-12-20 09:51:35 -08:00
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 Merge branch 'maint' 2007-02-24 01:42:06 -08:00
builtin-stripspace.c Even more missing static 2007-06-08 02:54:57 -07:00
builtin-symbolic-ref.c add logref support to git-symbolic-ref 2007-01-28 02:16:46 -08:00
builtin-tar-tree.c prefixcmp(): fix-up mechanical conversion. 2007-02-20 22:03:15 -08:00
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 short i/o: fix calls to read to use xread or read_in_full 2007-01-08 15:44:47 -08:00
builtin-verify-pack.c Load core configuration in git-verify-pack. 2006-12-29 11:36:45 -08:00
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 write-tree: --prefix=<path> 2006-05-01 22:29:16 -07:00
cache.h Merge branch 'ei/oneline+add-empty' 2007-06-22 23:32:19 -07:00
check-builtins.sh cherry is built-in, do not ship git-cherry.sh 2006-11-05 11:26:21 -08:00
check-racy.c Add check program "git-check-racy" 2006-08-15 21:38:07 -07:00
color.c simplify inclusion of system header files. 2006-12-20 09:51:35 -08:00
color.h Move color option parsing out of diff.c and into color.[ch] 2006-09-08 16:44:10 -07:00
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 Eliminate checks of user-specified Tcl/Tk interpreter. 2007-03-31 23:59:47 -07:00
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
COPYING Add a COPYING notice, making it explicit that the license is GPLv2. 2005-04-11 10:18:16 -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 pack-object: slightly more efficient 2006-05-15 12:32:13 -07:00
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 Cast 64 bit off_t to 32 bit size_t 2007-03-07 11:15:26 -08:00
diffcore-delta.c diffcore-delta: 64-byte-or-EOL ultrafast replacement (hash fix). 2006-03-15 13:19:27 -08:00
diffcore-order.c Cast 64 bit off_t to 32 bit size_t 2007-03-07 11:15:26 -08:00
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 Do not use memcmp(sha1_1, sha1_2, 20) with hardcoded length. 2006-08-17 14:23:53 -07:00
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 Mechanical conversion to use prefixcmp() 2007-02-20 22:03:15 -08:00
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 Teach git-local-fetch the --stdin switch 2006-07-27 19:33:48 -07:00
generate-cmdlist.sh More static 2007-06-13 02:02:10 -07:00
git-add--interactive.perl git-add -i: update removed path correctly. 2007-02-07 10:56:38 -08:00
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 [PATCH] Rename git-repo-config to git-config. 2007-01-28 16:16:53 -08:00
git-lost-found.sh Fix lost-found to show commits only referenced by reflogs 2007-04-05 15:00:03 -07:00
git-ls-remote.sh Add git-bundle: move objects and references by archive 2007-02-22 22:30:33 -08:00
git-merge-octopus.sh read-tree --aggressive 2006-02-06 21:43:27 -08:00
git-merge-one-file.sh War on whitespace 2007-06-07 00:04:01 -07:00
git-merge-ours.sh Use diff* with --exit-code in git-am, git-rebase and git-merge-ours 2007-03-24 23:01:36 -07:00
git-merge-resolve.sh Assorted typo fixes 2007-02-03 21:49:54 -08:00
git-merge-stupid.sh Use Daniel's read-tree in the merge strategy 'resolve'. 2005-09-10 18:30:41 -07:00
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 Big tool rename. 2005-09-07 17:45:20 -07:00
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 Commands requiring a work tree must not run in GIT_DIR 2007-02-05 14:02:16 -08:00
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-VERSION-GEN GIT 1.5.2.2 2007-06-16 01:13:35 -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 grep --all-match 2006-09-27 23:59:09 -07:00
hash-object.c index_fd(): pass optional path parameter as hint for blob conversion 2007-02-28 12:00:00 -08:00
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
INSTALL INSTALL: explain how to build documentation 2007-06-20 16:22:09 -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 pack-objects: further work on internal rev-list logic. 2006-09-07 02:46:02 -07:00
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 Add msg_sep to diff_options 2006-06-26 14:58:41 -07:00
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
Makefile Merge branch 'js/filter' 2007-06-22 23:20:40 -07:00
match-trees.c War on whitespace 2007-06-07 00:04:01 -07:00
merge-file.c convert object type handling from a string to a number 2007-02-27 01:34:21 -08:00
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 Remove "pathlen" from "struct name_entry" 2007-03-21 10:21:56 -07:00
mktag.c Remove unnecessary code and comments on non-existing 8kB tag object restriction 2007-06-09 10:51:46 -07:00
mktree.c convert object type handling from a string to a number 2007-02-27 01:34:21 -08:00
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 pager: Work around window resizing bug in 'less' 2007-02-05 15:42:36 -08:00
patch-delta.c make patch_delta() error cases a bit more verbose 2006-12-18 15:30:17 -08:00
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 General const correctness fixes 2007-03-07 10:47:10 -08:00
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 Fix pkt-line.h to compile with a non-GCC compiler 2006-06-26 02:11:53 -07:00
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 Initialize tree descriptors with a helper function rather than by hand. 2007-03-21 10:21:57 -07:00
reachable.h Move traversal of reachable objects into a separate library. 2007-01-06 22:57:34 -08:00
read-cache.c War on whitespace 2007-06-07 00:04:01 -07:00
README Update README to point at a few key periodical messages to the list 2007-03-25 17:42:32 -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 log --reflog: use dwim_log 2007-02-08 17:48:22 -08:00
reflog-walk.h log --reflog: honour --relative-date 2007-02-08 16:20:52 -08:00
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
RelNotes Release Notes: start preparing for 1.5.3 2007-06-02 19:34:54 -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 simplify inclusion of system header files. 2006-12-20 09:51:35 -08:00
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 Don't coredump on bad refs in update-server-info. 2007-01-31 13:09:58 -08:00
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 Mechanical conversion to use prefixcmp() 2007-02-20 22:03:15 -08:00
show-index.c show-index.c: learn about index v2 2007-04-10 12:48:14 -07:00
sideband.c atomic write for sideband remote messages 2006-10-11 11:13:01 -07:00
sideband.h atomic write for sideband remote messages 2006-10-11 11:13:01 -07:00
ssh-fetch.c Don't force everybody to call setup_ident(). 2007-01-28 01:58:50 -08:00
ssh-pull.c Be more backward compatible with git-ssh-{push,pull}. 2005-09-15 14:56:37 -07:00
ssh-push.c Be more backward compatible with git-ssh-{push,pull}. 2005-09-15 14:56:37 -07:00
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 [PATCH] Kill a bunch of pointer sign warnings for gcc4 2005-05-18 08:44:23 -07:00
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 Be careful when dereferencing tags. 2005-11-02 16:50:58 -08:00
tar.h tar-tree: Introduce write_entry() 2006-03-25 16:35:43 -08:00
test-chmtime.c Add test-chmtime: a utility to change mtime on files 2007-02-25 11:09:56 -08:00
test-date.c simplify inclusion of system header files. 2006-12-20 09:51:35 -08:00
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: test hashing large buffer 2006-06-24 02:59:20 -07:00
test-sha1.sh test-sha1: test hashing large buffer 2006-06-24 02:59:20 -07:00
trace.c git-branch, git-checkout: autosetup for remote branch tracking 2007-03-10 23:41:58 -08:00
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 Remove last vestiges of generic tree_entry_list 2006-05-29 19:08:37 -07:00
unpack-file.c convert object type handling from a string to a number 2007-02-27 01:34:21 -08:00
unpack-trees.c Merge branch 'maint-1.5.1' into maint 2007-05-20 19:57:00 -07:00
unpack-trees.h unpack-trees: get rid of *indpos parameter. 2007-04-04 00:19:28 -07:00
update-server-info.c Make the rest of commands work from a subdirectory. 2005-11-28 23:13:02 -08:00
upload-pack.c Even more missing static 2007-06-08 02:54:57 -07:00
usage.c Rename warn() to warning() to fix symbol conflicts on BSD and Mac OS 2007-03-31 01:11:11 -07:00
utf8.c wcwidth redeclaration 2007-05-07 22:02:40 -07:00
utf8.h Actually make print_wrapped_text() useful 2007-02-27 17:29:02 -08:00
var.c War on whitespace 2007-06-07 00:04:01 -07:00
write_or_die.c write_in_full: size_t is unsigned. 2007-01-26 17:39:03 -08:00
wt-status.c Missing statics. 2007-06-08 02:37:19 -07:00
wt-status.h Provide better feedback for the untracked only case in status output 2007-01-10 14:29:21 -08:00
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

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

	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.