Go to file
Linus Torvalds cf558704fb Create pathname-based hash-table lookup into index
This creates a hash index of every single file added to the index.
Right now that hash index isn't actually used for much: I implemented a
"cache_name_exists()" function that uses it to efficiently look up a
filename in the index without having to do the O(logn) binary search,
but quite frankly, that's not why this patch is interesting.

No, the whole and only reason to create the hash of the filenames in the
index is that by modifying the hash function, you can fairly easily do
things like making it always hash equivalent names into the same bucket.

That, in turn, means that suddenly questions like "does this name exist
in the index under an _equivalent_ name?" becomes much much cheaper.

Guiding principles behind this patch:

 - it shouldn't be too costly. In fact, my primary goal here was to
   actually speed up "git commit" with a fully populated kernel tree, by
   being faster at checking whether a file already existed in the index. I
   did succeed, but only barely:

	Best before:
		[torvalds@woody linux]$ time git commit > /dev/null
		real    0m0.255s
		user    0m0.168s
		sys     0m0.088s

	Best after:

		[torvalds@woody linux]$ time ~/git/git commit > /dev/null
		real    0m0.233s
		user    0m0.144s
		sys     0m0.088s

   so some things are actually faster (~8%).

   Caveat: that's really the best case. Other things are invariably going
   to be slightly slower, since we populate that index cache, and quite
   frankly, few things really use it to look things up.

   That said, the cost is really quite small. The worst case is probably
   doing a "git ls-files", which will do very little except puopulate the
   index, and never actually looks anything up in it, just lists it.

	Before:
		[torvalds@woody linux]$ time git ls-files > /dev/null
		real    0m0.016s
		user    0m0.016s
		sys     0m0.000s

	After:
		[torvalds@woody linux]$ time ~/git/git ls-files > /dev/null
		real    0m0.021s
		user    0m0.012s
		sys     0m0.008s

   and while the thing has really gotten relatively much slower, we're
   still talking about something almost unmeasurable (eg 5ms). And that
   really should be pretty much the worst case.

   So we lose 5ms on one "benchmark", but win 22ms on another. Pick your
   poison - this patch has the advantage that it will _likely_ speed up
   the cases that are complex and expensive more than it slows down the
   cases that are already so fast that nobody cares. But if you look at
   relative speedups/slowdowns, it doesn't look so good.

 - It should be simple and clean

   The code may be a bit subtle (the reasons I do hash removal the way I
   do etc), but it re-uses the existing hash.c files, so it really is
   fairly small and straightforward apart from a few odd details.

Now, this patch on its own doesn't really do much, but I think it's worth
looking at, if only because if done correctly, the name hashing really can
make an improvement to the whole issue of "do we have a filename that
looks like this in the index already". And at least it gets real testing
by being used even by default (ie there is a real use-case for it even
without any insane filesystems).

NOTE NOTE NOTE! The current hash is a joke. I'm ashamed of it, I'm just
not ashamed of it enough to really care. I took all the numbers out of my
nether regions - I'm sure it's good enough that it works in practice, but
the whole point was that you can make a really much fancier hash that
hashes characters not directly, but by their upper-case value or something
like that, and thus you get a case-insensitive hash, while still keeping
the name and the index itself totally case sensitive.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-01-22 21:46:30 -08:00
arm War on whitespace 2007-06-07 00:04:01 -07:00
compat Simplify strchrnul() compat code 2007-11-11 12:10:35 -08:00
contrib Update git-completion for new 'remote rm' option 2008-01-19 23:06:02 -08:00
Documentation GIT 1.5.4-rc4 2008-01-20 17:05:11 -08:00
git-gui Merge git://repo.or.cz/git-gui 2008-01-20 16:58:38 -08:00
gitk-git Merge git://git.kernel.org/pub/scm/gitk/gitk 2008-01-20 16:57:56 -08:00
gitweb gitweb: fix whitespace in config_to_multi (indent with tab) 2007-12-20 19:07:24 -08:00
mozilla-sha1 War on whitespace 2007-06-07 00:04:01 -07:00
perl Don't cache DESTDIR in perl/perl.mak. 2007-12-11 00:38:46 -08:00
ppc War on whitespace 2007-06-07 00:04:01 -07:00
t index: be careful when handling long names 2008-01-21 12:44:31 -08:00
templates Officially deprecate repo-config. 2008-01-17 22:52:40 -08:00
xdiff Remove unreachable statements 2007-11-15 21:23:47 -08:00
.gitignore Remove old generated files from .gitignore. 2007-12-20 17:05:31 -08:00
.mailmap GIT 1.5.4-rc1 2007-12-19 17:24:04 -08:00
alloc.c Clean up object creation to use more common code 2007-04-16 23:36:16 -07:00
archive-tar.c Fix the expansion pattern of the pseudo-static path buffer. 2007-09-20 22:19:17 -07:00
archive-zip.c preserve executable bits in zip archives 2007-09-18 14:56:55 -07:00
archive.c Move sha1_file_to_archive into libgit 2008-01-18 12:33:50 -08:00
archive.h archive: specfile support (--pretty=format: in archive files) 2007-09-03 16:46:16 -07:00
attr.c Merge branch 'maint' 2007-10-19 01:18:55 -04: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 Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-annotate.c War on whitespace 2007-06-07 00:04:01 -07:00
builtin-apply.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
builtin-archive.c Move sha1_file_to_archive into libgit 2008-01-18 12:33:50 -08:00
builtin-blame.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
builtin-branch.c git config --get-colorbool 2007-12-05 17:57:11 -08:00
builtin-bundle.c bundle create: keep symbolic refs' names instead of resolving them 2007-11-22 15:15:25 -08:00
builtin-cat-file.c Cleanup variables in cat-file 2007-04-22 00:43:24 -07:00
builtin-check-attr.c Full rework of quote_c_style and write_name_quoted. 2007-09-20 23:45:49 -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 Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-clean.c git-clean: fix off-by-one memory access when given no arguments 2008-01-12 11:10:09 -08:00
builtin-commit-tree.c Re-fix "builtin-commit: fix --signoff" 2007-12-09 00:55:55 -08:00
builtin-commit.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
builtin-config.c config --get-colorbool: diff.color is a deprecated synonym to color.diff 2007-12-05 23:05:10 -08:00
builtin-count-objects.c Make builtin-count-objects.c use parse_options. 2007-10-29 21:03:31 -07:00
builtin-describe.c make 'git describe --all --contains' work 2007-12-19 14:59:19 -08:00
builtin-diff-files.c add a "basic" diff config callback 2008-01-04 16:05:23 -08:00
builtin-diff-index.c add a "basic" diff config callback 2008-01-04 16:05:23 -08:00
builtin-diff-tree.c add a "basic" diff config callback 2008-01-04 16:05:23 -08:00
builtin-diff.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-fast-export.c Fix git-fast-export for zero-sized blobs 2007-12-12 10:59:22 -08:00
builtin-fetch--tool.c Error out when user doesn't have access permission to the repository 2007-11-30 13:10:11 -08:00
builtin-fetch-pack.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-fetch.c Rewrite builtin-fetch option parsing to use parse_options(). 2007-12-04 23:48:39 -08:00
builtin-fmt-merge-msg.c Fix parent rewriting in --early-output 2007-11-14 03:59:37 -08:00
builtin-for-each-ref.c for-each-ref: Fix quoting style constants. 2007-12-06 07:53:20 -08:00
builtin-fsck.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
builtin-gc.c slightly better auto gc message 2008-01-07 14:02:25 -08:00
builtin-grep.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
builtin-http-fetch.c http-push and http-fetch: handle URLs without trailing / 2008-01-20 15:18:34 -08:00
builtin-init-db.c Allow a relative builtin template directory. 2007-11-14 15:18:39 -08:00
builtin-log.c git show <tag>: show the tagger 2007-12-19 14:59:11 -08:00
builtin-ls-files.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
builtin-ls-remote.c ls-remote: add -t and -h options. 2008-01-15 17:04:21 -08:00
builtin-ls-tree.c Full rework of quote_c_style and write_name_quoted. 2007-09-20 23:45:49 -07:00
builtin-mailinfo.c Make mailsplit and mailinfo strip whitespace from the start of the input 2007-11-02 01:58:40 -07:00
builtin-mailsplit.c Merge branch 'maint' 2007-11-09 00:21:44 -08:00
builtin-merge-base.c Make every builtin-*.c file #include "builtin.h" 2007-07-14 22:44:09 -07:00
builtin-merge-file.c Make every builtin-*.c file #include "builtin.h" 2007-07-14 22:44:09 -07:00
builtin-merge-ours.c git-merge-ours: make it a builtin. 2007-11-22 14:21:59 -08:00
builtin-mv.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-name-rev.c Make builtin-name-rev.c use parse_options. 2007-10-29 21:03:31 -07:00
builtin-pack-objects.c pack-objects: remove redundant and wrong call to deflateEnd() 2008-01-10 23:27:39 -08:00
builtin-pack-refs.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-prune-packed.c return the prune-packed progress display to the inner loop 2007-11-01 15:22:32 -07:00
builtin-prune.c Add "--expire <time>" option to 'git prune' 2007-11-30 15:47:01 -08:00
builtin-push.c Merge branch 'sp/refspec-match' 2007-12-04 17:07:10 -08:00
builtin-read-tree.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08: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 Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
builtin-reset.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-rev-list.c Don't access line[-1] for a zero-length "line" from fgets. 2008-01-04 12:28:58 -08:00
builtin-rev-parse.c git-rev-parse --symbolic-full-name 2008-01-06 18:41:43 -08:00
builtin-revert.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-rm.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin-send-pack.c Update callers of check_ref_format() 2008-01-02 11:20:09 -08:00
builtin-shortlog.c shortlog: mention the "-e" option in the usage 2008-01-09 12:25:27 -08:00
builtin-show-branch.c format-patch -s: add MIME encoding header if signer's name requires so 2007-11-07 18:37:27 -08:00
builtin-show-ref.c Make every builtin-*.c file #include "builtin.h" 2007-07-14 22:44:09 -07:00
builtin-stripspace.c Clean up stripspace a bit, use strbuf even more. 2007-09-27 00:33:33 -07:00
builtin-symbolic-ref.c Make builtin-symbolic-ref.c use parse_options. 2007-10-29 21:03:31 -07:00
builtin-tag.c Fix $EDITOR regression introduced by rewrite in C. 2007-12-22 10:26:08 -08:00
builtin-tar-tree.c prefixcmp(): fix-up mechanical conversion. 2007-02-20 22:03:15 -08:00
builtin-unpack-objects.c relax usage of the progress API 2007-10-30 16:08:40 -07:00
builtin-update-index.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
builtin-update-ref.c Make builtin-update-ref.c use parse_options 2007-10-29 21:03:31 -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-verify-tag.c verify-tag: also grok CR/LFs in the tag signature 2007-09-03 16:44:35 -07:00
builtin-write-tree.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
builtin.h Merge branch 'kh/commit' 2007-12-04 17:16:33 -08:00
bundle.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
bundle.h Move bundle specific stuff into bundle.[ch] 2007-09-19 03:22:30 -07:00
cache-tree.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
cache-tree.h Small cache_tree_write refactor. 2007-09-26 02:27:06 -07:00
cache.h Create pathname-based hash-table lookup into index 2008-01-22 21:46:30 -08: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 ce_match_stat, run_diff_files: use symbolic constants for readability 2007-11-10 00:24:51 -08:00
color.c Support GIT_PAGER_IN_USE environment variable 2007-12-11 00:42:05 -08:00
color.h git config --get-colorbool 2007-12-05 17:57:11 -08:00
combine-diff.c Fix rewrite_diff() name quoting. 2007-12-26 17:13:36 -08:00
command-list.txt Officially deprecate repo-config. 2008-01-17 22:52:40 -08:00
commit.c parse_commit_buffer: tighten checks while parsing 2008-01-20 11:00:57 -08:00
commit.h add -i: Fix running from a subdirectory 2007-11-25 10:23:13 -08:00
config.c Improve use of lockfile API 2008-01-16 15:35:35 -08:00
config.mak.in autoconf: Add checking for unsetenv function 2008-01-17 23:35:36 -08:00
configure.ac autoconf: Add checking for unsetenv function 2008-01-17 23:35:36 -08:00
connect.c Miscellaneous const changes and utilities 2007-11-02 22:40:43 -07:00
convert.c treat any file with NUL as binary 2008-01-16 09:10:34 -08: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 remove dead code from the csum-file interface 2007-11-05 12:55:33 -08:00
csum-file.h remove dead code from the csum-file interface 2007-11-05 12:55:33 -08:00
ctype.c War on whitespace 2007-06-07 00:04:01 -07:00
daemon.c Style: place opening brace of a function definition at column 1 2007-11-08 15:35:32 -08:00
date.c parse_date_format(): convert a format name to an enum date_mode 2007-09-29 20:31:59 -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 Support fetching the memory usage of a delta index 2007-07-12 14:32:35 -07:00
diff-delta.c fix style of a few comments in diff-delta.c 2007-12-18 15:22:28 -08:00
diff-lib.c Also use unpack_trees() in do_diff_cache() 2008-01-21 13:09:07 -08:00
diff.c Avoid running lstat(2) on the same cache entry. 2008-01-21 12:44:31 -08:00
diff.h add a "basic" diff config callback 2008-01-04 16:05:23 -08:00
diffcore-break.c rename: Break filepairs with different types. 2007-12-02 02:24:46 -08:00
diffcore-delta.c optimize diffcore-delta by sorting hash entries. 2007-10-04 00:05:36 -07:00
diffcore-order.c Use xmemdupz() in many places. 2007-09-18 17:42:17 -07:00
diffcore-pickaxe.c War on whitespace 2007-06-07 00:04:01 -07:00
diffcore-rename.c Fix a pathological case in git detecting proper renames 2007-11-30 15:49:17 -08:00
diffcore.h copy vs rename detection: avoid unnecessary O(n*m) loops 2007-10-26 23:18:06 -07:00
dir.c Create pathname-based hash-table lookup into index 2008-01-22 21:46:30 -08:00
dir.h per-directory-exclude: lazily read .gitignore files 2007-11-29 02:19:14 -08: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 Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
environment.c Support GIT_PAGER_IN_USE environment variable 2007-12-11 00:42:05 -08:00
exec_cmd.c Trace and quote with argv: get rid of unneeded count argument. 2007-12-03 22:11:53 -08:00
exec_cmd.h use only the $PATH for exec'ing git commands 2007-10-29 20:51:37 -07:00
fast-import.c fast-import: Don't use a maybe-clobbered errno value 2008-01-18 13:19:37 -08:00
fetch-pack.h Always obtain fetch-pack arguments from struct fetch_pack_args 2007-09-19 03:22:31 -07:00
fixup-builtins Start deprecating "git-command" in favor of "git command" 2007-07-02 22:39:10 -07:00
generate-cmdlist.sh Consolidate command list to one. 2007-12-01 23:48:28 -08:00
git-add--interactive.perl add--interactive: allow diff colors without interactive colors 2008-01-06 18:41:44 -08:00
git-am.sh git-am: Run git gc only once and not for every patch. 2008-01-05 00:07:57 -08:00
git-archimport.perl Make git-archimport log entries more consistent 2007-08-30 19:22:02 -07:00
git-bisect.sh git-bisect visualize: work in non-windowed environments better 2007-12-08 02:58:26 -08:00
git-checkout.sh Fix a typo in checkout.sh and cleanup one-line help messages 2007-12-11 09:52:44 -08:00
git-clone.sh clone: fix options '-o' and '--origin' to be recognised again 2007-12-19 14:59:18 -08:00
git-compat-util.h Uninline prefixcmp() 2008-01-03 01:23:12 -08:00
git-cvsexportcommit.perl cvsexportcommit: fix massive commits 2007-12-14 12:06:04 -08:00
git-cvsimport.perl cvsimport: remove last use of repo-config from git standard tools 2008-01-13 21:48:22 -08:00
git-cvsserver.perl git-cvsserver runs hooks/post-update 2007-12-05 01:15:01 -08:00
git-filter-branch.sh filter-branch: work correctly with ambiguous refnames 2008-01-06 18:41:43 -08:00
git-help--browse.sh rename git-browse--help to git-help--browse 2007-12-16 12:52:40 -08:00
git-instaweb.sh Fix git-instaweb breakage on MacOS X due to the limited sed functionality 2007-12-19 14:59:19 -08:00
git-lost-found.sh Merge branch 'ph/parseopt-sh' 2007-11-17 21:39:37 -08:00
git-merge-octopus.sh Rewrite "git-frotz" to "git frotz" 2007-07-02 22:52:14 -07:00
git-merge-one-file.sh Support a merge with conflicting gitlink change 2007-12-11 00:40:56 -08:00
git-merge-resolve.sh Fixing comment in merge strategies 2007-08-30 17:18:22 -07:00
git-merge-stupid.sh Fixing comment in merge strategies 2007-08-30 17:18:22 -07:00
git-merge.sh Merge branch 'ph/parseopt-sh' 2007-11-17 21:39:37 -08:00
git-mergetool.sh Allow git-mergetool to handle paths with a leading space 2008-01-07 21:00:54 -08:00
git-parse-remote.sh Rewrite "git-frotz" to "git frotz" 2007-07-02 22:52:14 -07:00
git-pull.sh "git pull --tags": error out with a better message. 2007-12-28 21:01:24 -08:00
git-quiltimport.sh Replace instances of export VAR=VAL with VAR=VAL; export VAR 2007-11-28 17:23:18 -08:00
git-rebase--interactive.sh Squelch bogus progress output from git-rebase--interactive 2008-01-14 20:04:02 -08:00
git-rebase.sh Merge branch 'maint' 2007-11-28 17:06:57 -08:00
git-relink.perl Big tool rename. 2005-09-07 17:45:20 -07:00
git-remote.perl Merge branch 'maint' 2007-10-26 23:17:23 -07:00
git-repack.sh Migrate git-repack.sh to use git-rev-parse --parseopt 2007-11-05 22:48:13 -08:00
git-request-pull.sh Merge branch 'ph/parseopt-sh' 2007-11-17 21:39:37 -08:00
git-send-email.perl send-email: add no-validate option 2008-01-18 13:33:57 -08:00
git-sh-setup.sh shell-scripts usage(): consistently exit with non-zero 2007-12-20 12:58:06 -08:00
git-stash.sh git-stash clear: refuse to work with extra parameter for now 2008-01-06 18:41:36 -08:00
git-submodule.sh Do not rely on the exit status of "unset" for unset variables 2007-12-04 14:48:45 -08:00
git-svn.perl git-svn: handle leading/trailing whitespace from svnsync revprops 2008-01-12 10:58:06 -08:00
GIT-VERSION-GEN GIT 1.5.4-rc3 2008-01-11 21:40:55 -08:00
git.c Merge branch 'kh/commit' 2007-12-04 17:16:33 -08:00
git.spec.in RPM spec: include gitk message files. 2008-01-11 21:40:25 -08: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 git-hash-object should honor config variables 2007-11-11 02:51:53 -08:00
hash.c Do linear-time/space rename logic for exact renames 2007-10-26 23:18:06 -07:00
hash.h Do linear-time/space rename logic for exact renames 2007-10-26 23:18:06 -07:00
help.c rename git-browse--help to git-help--browse 2007-12-16 12:52:40 -08:00
http-push.c http-push and http-fetch: handle URLs without trailing / 2008-01-20 15:18:34 -08:00
http-walker.c Move fetch_ref from http-push.c and http-walker.c to http.c 2007-12-14 21:31:59 -08:00
http.c Move fetch_ref from http-push.c and http-walker.c to http.c 2007-12-14 21:31:59 -08:00
http.h Move fetch_ref from http-push.c and http-walker.c to http.c 2007-12-14 21:31:59 -08:00
ident.c Fix grammar nits in documentation and in code comments. 2008-01-03 09:15:17 -08:00
imap-send.c strbuf change: be sure ->buf is never ever NULL. 2007-09-29 02:13:33 -07:00
index-pack.c Merge branch 'np/progress' 2007-11-14 14:04:19 -08:00
INSTALL Mention 'cpio' dependency in INSTALL 2007-10-02 17:35:29 -07:00
interpolate.c Merge branch 'mv/unknown' 2007-10-03 04:28:24 -07:00
interpolate.h Lift 16kB limit of log message output 2007-06-13 00:41:21 -07:00
list-objects.c Fix memory leak in traverse_commit_list 2007-11-10 01:52:54 -08:00
list-objects.h pack-objects: further work on internal rev-list logic. 2006-09-07 02:46:02 -07:00
lockfile.c close_lock_file(): new function in the lockfile API 2008-01-16 15:35:03 -08:00
log-tree.c Make the diff_options bitfields be an unsigned with explicit masks. 2007-11-11 16:54:15 -08:00
log-tree.h rev-list: implement --bisect-all 2007-10-26 23:27:23 -07:00
mailmap.c mailmap: fix bogus for() loop that happened to be safe by accident 2007-12-08 03:40:12 -08:00
mailmap.h Split out mailmap handling out of shortlog 2007-04-29 02:05:06 -07:00
Makefile Move sha1_file_to_archive into libgit 2008-01-18 12:33:50 -08:00
match-trees.c Improved const correctness for strings 2007-10-21 01:43:27 -04:00
merge-file.c xdl_diff: identify call sites. 2007-12-13 23:04:26 -08:00
merge-index.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
merge-recursive.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
merge-tree.c xdl_diff: identify call sites. 2007-12-13 23:04:26 -08:00
mktag.c Now that cache.h needs strbuf.h, remove useless includes. 2007-09-16 17:30:03 -07:00
mktree.c Rework unquote_c_style to work on a strbuf. 2007-09-20 23:32:18 -07:00
object-refs.c War on whitespace 2007-06-07 00:04:01 -07:00
object.c Don't dereference NULL upon lookup failure. 2007-12-22 11:15:38 -08: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 Merge branch 'np/progress' 2007-11-02 16:27:37 -07:00
pack.h Merge branch 'np/progress' 2007-11-02 16:27:37 -07:00
pager.c Support GIT_PAGER_IN_USE environment variable 2007-12-11 00:42:05 -08:00
parse-options.c Force the sticked form for options with optional arguments. 2007-12-22 10:26:08 -08:00
parse-options.h parse-options: Allow to hide options from the default usage. 2007-11-22 22:11:28 -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 Make the diff_options bitfields be an unsigned with explicit masks. 2007-11-11 16:54:15 -08: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 path-list.c: always free strdup'ed paths 2007-08-15 13:43:08 -07:00
path-list.h path-list.c: always free strdup'ed paths 2007-08-15 13:43:08 -07:00
path.c Add is_absolute_path() and make_absolute_path() 2007-08-01 00:38:30 -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
pretty.c custom pretty format: tolerate empty e-mail address 2008-01-06 18:41:43 -08:00
progress.c Flush progress message buffer in display(). 2007-11-20 13:16:15 -08:00
progress.h nicer display of thin pack completion 2007-11-08 15:43:41 -08:00
quote.c Fix rewrite_diff() name quoting. 2007-12-26 17:13:36 -08:00
quote.h Fix rewrite_diff() name quoting. 2007-12-26 17:13:36 -08:00
reachable.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
reachable.h Move traversal of reachable objects into a separate library. 2007-01-06 22:57:34 -08:00
read-cache.c Create pathname-based hash-table lookup into index 2008-01-22 21:46:30 -08: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 receive-pack: reject invalid refnames 2008-01-04 15:59:43 -08:00
reflog-walk.c git log -g: Complain, but do not fail, when no reflogs are there 2007-07-24 17:28:10 -07:00
reflog-walk.h git log -g: Complain, but do not fail, when no reflogs are there 2007-07-24 17:28:10 -07:00
refs.c refs.c: rework ref_locks by abstracting from underlying struct lock_file 2008-01-16 15:36:10 -08:00
refs.h lock_any_ref_for_update(): reject wildcard return from check_ref_format 2008-01-02 02:28:54 -08:00
RelNotes GIT 1.5.3.8 2008-01-07 22:41:43 -08:00
remote.c remote: Fix bogus make_branch() call in configuration reader. 2007-12-14 20:34:56 -08:00
remote.h Add remote.<name>.proxy 2007-12-03 23:43:07 -08:00
revision.c Fix "git log --diff-filter" bug 2007-12-26 11:57:36 -08:00
revision.h shortlog: default to HEAD when the standard input is a tty 2007-12-11 17:01:31 -08:00
run-command.c run-command: Support sending stderr to /dev/null 2007-11-11 17:09:55 -08:00
run-command.h run-command: Support sending stderr to /dev/null 2007-11-11 17:09:55 -08:00
send-pack.h Teach send-pack a mirror mode 2007-11-09 21:14:10 -08:00
server-info.c Don't access line[-1] for a zero-length "line" from fgets. 2008-01-04 12:28:58 -08:00
setup.c Fix grammar nits in documentation and in code comments. 2008-01-03 09:15:17 -08:00
sha1_file.c Fix random fast-import errors when compiled with NO_MMAP 2008-01-17 22:39:20 -08:00
sha1_name.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
shallow.c War on whitespace 2007-06-07 00:04:01 -07:00
shell.c shell should call the new setup_path() to setup $PATH 2007-10-29 20:51:37 -07:00
show-index.c Use PRIuMAX instead of 'unsigned long long' in show-index 2007-10-21 02:16:57 -04:00
sideband.c recv_sideband: Do not use ANSI escape sequence on dumb terminals. 2008-01-09 12:23:59 -08:00
sideband.h atomic write for sideband remote messages 2006-10-11 11:13:01 -07:00
strbuf.c Uninline prefixcmp() 2008-01-03 01:23:12 -08:00
strbuf.h builtin-commit.c: export GIT_INDEX_FILE for launch_editor as well. 2007-11-26 09:13:17 -08:00
symlinks.c Add has_symlink_leading_path() function. 2007-05-11 22:11:07 -07:00
tag.c parse_tag_buffer: don't parse invalid tags 2008-01-06 18:41:44 -08: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-absolute-path.c Add is_absolute_path() and make_absolute_path() 2007-08-01 00:38:30 -07: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-parse-options.c parse-options: abbreviation engine fix. 2007-11-05 22:46:45 -08:00
test-sha1.c test-sha1: test hashing large buffer 2006-06-24 02:59:20 -07:00
test-sha1.sh the use of 'tr' in the test suite isn't really portable 2007-12-17 20:49:18 -08:00
trace.c Trace and quote with argv: get rid of unneeded count argument. 2007-12-03 22:11:53 -08:00
transport.c Don't access line[-1] for a zero-length "line" from fgets. 2008-01-04 12:28:58 -08:00
transport.h Merge branch 'aw/mirror-push' into jk/send-pack 2007-11-14 03:13:30 -08:00
tree-diff.c Fix small memory leaks induced by diff_tree_setup_paths 2007-12-12 10:59:22 -08:00
tree-walk.c tree-walk: don't parse incorrect entries 2008-01-06 18:41:44 -08:00
tree-walk.h rename: Break filepairs with different types. 2007-12-02 02:24:46 -08:00
tree.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
tree.h Remove last vestiges of generic tree_entry_list 2006-05-29 19:08:37 -07:00
unpack-file.c Use xmkstemp() instead of mkstemp() 2007-08-14 22:20:26 -07:00
unpack-trees.c Make on-disk index representation separate from in-core one 2008-01-21 12:44:31 -08:00
unpack-trees.h Make run_diff_index() use unpack_trees(), not read_tree() 2008-01-21 13:05:27 -08: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 upload-pack: Use finish_{command,async}() instead of waitpid(). 2007-11-05 22:47:28 -08:00
usage.c print warning/error/fatal messages in one shot 2007-11-09 22:25:36 -08:00
utf8.c utf8_width(): allow non NUL-terminated input 2008-01-06 20:53:46 -08:00
utf8.h utf8_width(): allow non NUL-terminated input 2008-01-06 20:53:46 -08:00
var.c Re-fix "builtin-commit: fix --signoff" 2007-12-09 00:55:55 -08:00
walker.c Clarify error response from 'git fetch' for bad responses 2007-12-17 20:49:18 -08:00
walker.h Modularize commit-walker 2007-09-19 03:22:30 -07:00
write_or_die.c Don't fflush(stdout) when it's not helpful 2007-06-30 20:16:12 -07:00
ws.c whitespace: more accurate initial-indent highlighting 2007-12-16 13:07:58 -08:00
wt-status.c Make run_diff_index() use unpack_trees(), not read_tree() 2008-01-21 13:05:27 -08:00
wt-status.h git-commit: squelch needless message during an empty merge 2007-12-12 20:50:33 -08:00
xdiff-interface.c Re(-re)*fix trim_common_tail() 2007-12-20 20:54:23 -08:00
xdiff-interface.h xdl_diff: identify call sites. 2007-12-13 23:04:26 -08: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.