Go to file
Jeff King 8b8dfd5132 pack-revindex: radix-sort the revindex
The pack revindex stores the offsets of the objects in the
pack in sorted order, allowing us to easily find the on-disk
size of each object. To compute it, we populate an array
with the offsets from the sha1-sorted idx file, and then use
qsort to order it by offsets.

That does O(n log n) offset comparisons, and profiling shows
that we spend most of our time in cmp_offset. However, since
we are sorting on a simple off_t, we can use numeric sorts
that perform better. A radix sort can run in O(k*n), where k
is the number of "digits" in our number. For a 64-bit off_t,
using 16-bit "digits" gives us k=4.

On the linux.git repo, with about 3M objects to sort, this
yields a 400% speedup. Here are the best-of-five numbers for
running

  echo HEAD | git cat-file --batch-check="%(objectsize:disk)

on a fully packed repository, which is dominated by time
spent building the pack revindex:

          before     after
  real    0m0.834s   0m0.204s
  user    0m0.788s   0m0.164s
  sys     0m0.040s   0m0.036s

This matches our algorithmic expectations. log(3M) is ~21.5,
so a traditional sort is ~21.5n. Our radix sort runs in k*n,
where k is the number of radix digits. In the worst case,
this is k=4 for a 64-bit off_t, but we can quit early when
the largest value to be sorted is smaller. For any
repository under 4G, k=2. Our algorithm makes two passes
over the list per radix digit, so we end up with 4n. That
should yield ~5.3x speedup. We see 4x here; the difference
is probably due to the extra bucket book-keeping the radix
sort has to do.

On a smaller repo, the difference is less impressive, as
log(n) is smaller. For git.git, with 173K objects (but still
k=2), we see a 2.7x improvement:

          before     after
  real    0m0.046s   0m0.017s
  user    0m0.036s   0m0.012s
  sys     0m0.008s   0m0.000s

On even tinier repos (e.g., a few hundred objects), the
speedup goes away entirely, as the small advantage of the
radix sort gets erased by the book-keeping costs (and at
those sizes, the cost to generate the the rev-index gets
lost in the noise anyway).

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-07-12 09:20:54 -07:00
block-sha1 Merge branch 'jn/block-sha1' into maint 2012-08-06 15:40:00 -07:00
builtin cat-file: split --batch input lines on whitespace 2013-07-12 09:18:42 -07:00
compat utf8.c: add reencode_string_len() that can handle NULs in string 2013-04-18 16:28:28 -07:00
contrib remote-hg: fix order of configuration comments 2013-05-21 09:33:24 -07:00
Documentation cat-file: split --batch input lines on whitespace 2013-07-12 09:18:42 -07:00
git_remote_helpers git_remote_helpers: remove GIT-PYTHON-VERSION upon "clean" 2013-01-30 12:34:55 -08:00
git-gui git-gui 0.17.0 2012-10-17 15:55:46 -07:00
gitk-git Merge git://ozlabs.org/~paulus/gitk 2013-05-17 11:55:02 -07:00
gitweb gitweb/INSTALL: Simplify description of GITWEB_CONFIG_SYSTEM 2013-04-15 07:25:46 -07:00
mergetools Sync with v1.8.2.3 2013-05-09 13:32:54 -07:00
perl git-svn: added an --include-path flag 2013-05-09 01:13:36 +00:00
po gitk: Update Swedish translation (304t) 2013-05-17 09:25:25 +10:00
ppc
t cat-file: split --batch input lines on whitespace 2013-07-12 09:18:42 -07:00
templates templates/hooks--update.sample: use a lowercase "usage:" string 2013-02-24 13:31:09 -08:00
vcs-svn remote-svn: add incremental import 2012-10-07 14:10:17 -07:00
xdiff Correct common spelling mistakes in comments and tests 2013-04-12 13:38:40 -07:00
.gitattributes git-gui: set whitespace warnings appropriate to this project 2011-11-30 11:35:28 +00:00
.gitignore gitk: Ignore gitk-wish buildproduct 2013-01-30 21:12:16 +11:00
.mailmap mailmap: update Pasky's address 2013-04-04 13:03:34 -07:00
abspath.c Introduce new function real_path_if_valid() 2012-10-29 02:34:58 -04:00
aclocal.m4 configure: use AC_LANG_PROGRAM consistently 2011-02-14 10:55:15 -08:00
advice.c branch: give advice when tracking start-point is missing 2013-04-02 16:14:13 -07:00
advice.h branch: give advice when tracking start-point is missing 2013-04-02 16:14:13 -07:00
alias.c
alloc.c unbreak and eliminate NO_C99_FORMAT 2011-03-17 15:30:49 -07:00
archive-tar.c archive-tar: use parse_config_key when parsing config 2013-01-23 08:41:50 -08:00
archive-zip.c archive-zip: use deflateInit2() to ask for raw compressed data 2013-03-16 22:07:02 -07:00
archive.c archive: handle commits with an empty tree 2013-03-10 22:25:22 -07:00
archive.h archive: delegate blob reading to backend 2012-05-03 10:22:56 -07:00
argv-array.c Merge branch 'fa/remote-svn' 2012-10-25 06:42:02 -04:00
argv-array.h Merge branch 'fa/remote-svn' 2012-10-25 06:42:02 -04:00
attr.c Merge branch 'lf/read-blob-data-from-index' 2013-04-21 18:39:45 -07:00
attr.h correct a few doubled-word nits in comments and documentation 2012-03-28 11:18:35 -07:00
base85.c
bisect.c Merge branch 'jk/bisect-prn-unsigned' into maint 2013-04-12 13:41:46 -07:00
bisect.h Move print_commit_list to libgit.a 2012-10-29 03:08:30 -04:00
blob.c
blob.h
branch.c i18n: branch: mark strings for translation 2013-04-15 21:05:21 -07:00
branch.h checkout: suppress tracking message with "-q" 2012-03-26 21:32:43 -07:00
builtin.h Merge branch 'as/check-ignore' 2013-01-23 21:19:10 -08:00
bulk-checkin.c bulk-checkin: replace fast-import based implementation 2011-12-01 11:46:09 -08:00
bulk-checkin.h bulk-checkin: replace fast-import based implementation 2011-12-01 11:46:09 -08:00
bundle.c bundle: Accept prerequisites without commit messages 2013-04-07 14:45:56 -07:00
bundle.h Merge branch 'jc/unseekable-bundle' 2011-10-21 16:04:32 -07:00
cache-tree.c cache-tree: invalidate i-t-a paths after generating trees 2012-12-15 23:04:22 -08:00
cache-tree.h cache-tree: fix writing cache-tree when CE_REMOVE is present 2012-12-15 23:04:22 -08:00
cache.h teach sha1_object_info_extended a "disk_size" query 2013-07-07 10:53:22 -07:00
check_bindir
check-builtins.sh
check-racy.c
color.c want_color: automatically fallback to color.ui 2011-08-19 15:51:38 -07:00
color.h want_color: automatically fallback to color.ui 2011-08-19 15:51:38 -07:00
column.c column: support piping stdout to external git-column process 2012-04-27 09:26:38 -07:00
column.h column: support piping stdout to external git-column process 2012-04-27 09:26:38 -07:00
combine-diff.c combine-diff: coalesce lost lines optimally 2013-03-25 14:52:33 -07:00
command-list.txt Merge branch 'as/check-ignore' 2013-01-23 21:19:10 -08:00
commit.c Sync with 'maint' 2013-04-12 13:54:01 -07:00
commit.h pretty: save commit encoding from logmsg_reencode if the caller needs it 2013-04-18 16:28:27 -07:00
config.c Merge branch 'jk/config-parsing-cleanup' 2013-02-04 10:24:50 -08:00
config.mak.in Merge branch 'jc/remove-export-from-config-mak-in' 2013-04-01 09:00:02 -07:00
config.mak.uname convert: The native line-ending is \r\n on MinGW 2013-04-16 11:18:35 -07:00
configure.ac Revert "compat: add strtok_r()" 2013-02-26 09:16:58 -08:00
connect.c teach get_remote_heads to read from a memory buffer 2013-02-24 00:17:38 -08:00
connected.c fetch/receive: remove over-pessimistic connectivity check 2012-03-15 15:23:17 -07:00
connected.h check_everything_connected(): libify 2011-09-09 15:19:02 -07:00
convert.c Merge branch 'lf/read-blob-data-from-index' 2013-04-21 18:39:45 -07:00
convert.h teach convert_to_git a "dry run" mode 2012-02-24 14:11:27 -08:00
copy.c
COPYING
credential-cache--daemon.c credentials: add "cache" helper 2011-12-11 23:16:25 -08:00
credential-cache.c credential-cache: ignore "connection refused" errors 2012-01-16 22:15:19 -08:00
credential-store.c credentials: add "store" helper 2011-12-12 16:09:38 -08:00
credential.c credential: convert "url" attribute into its parsed subparts 2012-07-18 13:26:58 -07:00
credential.h git credential fill: output the whole 'struct credential' 2012-06-25 11:56:24 -07:00
csum-file.c csum-file: introduce sha1file_checkpoint 2011-11-30 14:27:59 -08:00
csum-file.h csum-file: introduce sha1file_checkpoint 2011-11-30 14:27:59 -08:00
ctype.c ctype: support iscntrl, ispunct, isxdigit and isprint 2012-10-15 14:58:16 -07:00
daemon.c Merge branch 'jk/pkt-line-cleanup' 2013-04-01 08:59:37 -07:00
date.c Fix time offset calculation in case of unsigned time_t 2013-02-25 14:29:12 -08:00
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c diff: do not use null sha1 as a sentinel value 2012-07-29 15:04:32 -07:00
diff-no-index.c Merge branch 'tr/void-diff-setup-done' into maint-1.7.11 2012-09-11 10:53:40 -07:00
diff.c Merge branch 'jk/diff-algo-finishing-touches' into maint 2013-04-24 16:19:42 -07:00
diff.h Merge branch 'mp/diff-algo-config' 2013-02-17 15:25:52 -08:00
diffcore-break.c diffcore-break: don't divide by zero 2013-04-03 12:48:02 -07:00
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c diffcore-pickaxe: unify code for log -S/-G 2013-04-05 10:31:09 -07:00
diffcore-rename.c Preallocate hash tables when the number of inserts are known in advance 2013-03-16 22:57:29 -07:00
diffcore.h Merge branch 'jk/maint-null-in-trees' into maint-1.7.11 2012-09-10 15:24:54 -07:00
dir.c dir.c: git-status --ignored: don't scan the work tree twice 2013-04-15 12:36:42 -07:00
dir.h dir.c: git-status --ignored: don't scan the work tree twice 2013-04-15 12:36:42 -07:00
editor.c run-command: encode signal death as a positive integer 2013-01-06 11:09:18 -08:00
entry.c Merge branch 'jk/check-corrupt-objects-carefully' 2013-04-03 09:34:29 -07:00
environment.c Merge branch 'jk/alias-in-bare' into maint 2013-04-03 09:25:41 -07:00
exec_cmd.c run-command: treat inaccessible directories as ENOENT 2012-04-05 16:24:13 -07:00
exec_cmd.h
fast-import.c fast-import: Fix an gcc -Wuninitialized warning 2013-03-29 23:46:55 -07:00
fetch-pack.c Merge branch 'jk/pkt-line-cleanup' 2013-04-01 08:59:37 -07:00
fetch-pack.h fetch: use struct ref to represent refs to be fetched 2013-02-07 13:53:59 -08:00
fixup-builtins
fmt-merge-msg.h fmt-merge-msg: use branch.$name.description 2011-10-07 10:11:47 -07:00
fsck.c fsck: warn about ".git" in trees 2012-11-28 13:52:54 -08:00
fsck.h
generate-cmdlist.sh i18n: help: mark strings for translation 2012-04-24 14:55:48 -07:00
gettext.c fetch: align per-ref summary report in UTF-8 locales 2012-09-14 12:45:50 -07:00
gettext.h Merge branch 'nd/fetch-status-alignment' 2012-09-18 14:35:55 -07:00
git-add--interactive.perl Correct common spelling mistakes in comments and tests 2013-04-12 13:38:40 -07:00
git-am.sh git-am: show the final log message on "Applying:" indicator 2013-03-21 08:09:35 -07:00
git-archimport.perl git-archimport: use a lowercase "usage:" string 2013-02-24 13:31:06 -08:00
git-bisect.sh bisect: Log possibly bad, skipped commits at bisection end 2013-04-23 09:09:44 -07:00
git-compat-util.h Merge branch 'jk/a-thread-only-dies-once' into maint 2013-04-26 11:25:59 -07:00
git-cvsexportcommit.perl git-cvsexportcommit: use a lowercase "usage:" string 2013-02-24 13:31:07 -08:00
git-cvsimport.perl git-cvsimport: use a lowercase "usage:" string 2013-02-24 13:31:07 -08:00
git-cvsserver.perl Correct common spelling mistakes in comments and tests 2013-04-12 13:38:40 -07:00
git-difftool--helper.sh difftool--helper: fix printf usage 2013-02-10 11:35:50 -08:00
git-difftool.perl difftool: fix dir-diff when file does not exist in working tree 2013-05-17 11:46:53 -07:00
git-filter-branch.sh Merge branch 'jk/filter-branch-come-back-to-original' into maint 2013-04-22 11:26:55 -07:00
git-instaweb.sh git-instaweb: Check that correct config file exists for (re)start 2011-06-27 09:11:41 +00:00
git-lost-found.sh
git-merge-octopus.sh
git-merge-one-file.sh Merge branch 'kb/p4merge' 2013-03-26 13:15:24 -07:00
git-merge-resolve.sh
git-mergetool--lib.sh doc: generate a list of valid merge tools 2013-02-02 21:46:52 -08:00
git-mergetool.sh Merge branch 'al/mergetool-printf-fix' 2013-02-14 10:29:37 -08:00
git-p4.py git p4: avoid expanding client paths in chdir 2013-03-11 15:03:11 -07:00
git-parse-remote.sh push/pull: adjust missing upstream help text to changed interface 2012-11-08 11:32:38 -05:00
git-pull.sh merge/pull: verify GPG signatures of commits being merged 2013-03-31 19:23:59 -07:00
git-quiltimport.sh Correct common spelling mistakes in comments and tests 2013-04-12 13:38:40 -07:00
git-rebase--am.sh rebase-am: explicitly disable cover-letter 2013-04-14 20:01:07 -07:00
git-rebase--interactive.sh bash-prompt.sh: show where rebase is at when stopped 2013-04-25 09:59:34 -07:00
git-rebase--merge.sh rebase: don't source git-sh-setup twice 2012-06-26 13:17:50 -07:00
git-rebase.sh Merge branch 'ph/rebase-original' 2013-04-26 15:28:34 -07:00
git-relink.perl git-relink: use a lowercase "usage:" string 2013-02-24 13:31:06 -08:00
git-remote-testgit transport-helper: add 'signed-tags' capability 2013-04-15 09:04:43 -07:00
git-remote-testpy.py git-remote-testpy: fix path hashing on Python 3 2013-01-28 09:55:14 -08:00
git-repack.sh gc: do not explode objects which will be immediately pruned 2012-04-11 11:09:49 -07:00
git-request-pull.sh request-pull: really favor a matching tag 2012-06-01 12:38:19 -07:00
git-send-email.perl send-email: make annotate configurable 2013-04-07 00:42:29 -07:00
git-sh-i18n.sh i18n: fix auto detection of gettext scheme for shell scripts 2012-03-12 14:41:15 -07:00
git-sh-setup.sh Merge branch 'kb/p4merge' 2013-03-26 13:15:24 -07:00
git-stash.sh Merge branch 'ph/stash-rerere' into maint-1.7.11 2012-09-11 11:10:12 -07:00
git-submodule.sh Merge branch 'jl/submodule-deinit' 2013-04-05 14:15:13 -07:00
git-svn.perl git-svn: introduce --parents parameter for commands branch and tag 2013-05-20 22:05:54 +00:00
GIT-VERSION-GEN Git 1.8.3-rc3 2013-05-17 12:19:20 -07:00
git-web--browse.sh git-web--browse: recognize any TERM_PROGRAM as a GUI terminal on OS X 2013-03-29 15:24:31 -07:00
git.c Merge branch 'jk/alias-in-bare' into maint 2013-04-03 09:25:41 -07:00
git.spec.in spec: add missing build dependency 2012-04-06 10:15:11 -07:00
gpg-interface.c Merge branch 'mg/gpg-interface-using-status' into maint 2013-04-03 09:26:27 -07:00
gpg-interface.h merge/pull Check for untrusted good GPG signatures 2013-03-31 22:38:49 -07:00
graph.c Revert "graph.c: mark private file-scope symbols as static" 2013-03-03 19:43:54 -08:00
graph.h Revert "graph.c: mark private file-scope symbols as static" 2013-03-03 19:43:54 -08:00
grep.c fix clang -Wtautological-compare with unsigned enum 2013-02-25 07:35:55 -08:00
grep.h fix clang -Wtautological-compare with unsigned enum 2013-02-25 07:35:55 -08:00
hash.c for_each_hash: allow passing a 'void *data' pointer to callback 2011-02-18 22:25:51 -08:00
hash.h Preallocate hash tables when the number of inserts are known in advance 2013-03-16 22:57:29 -07:00
help.c help.c: add a compatibility comment to cmd_version() 2013-04-16 15:01:30 -07:00
help.h Merge branch 'nd/columns' 2012-05-03 15:13:31 -07:00
hex.c get_sha1_hex(): do not read past a NUL character 2011-10-05 13:45:16 -07:00
http-backend.c Merge branch 'jk/http-dumb-namespaces' 2013-04-18 11:49:21 -07:00
http-fetch.c Merge branch 'ab/enable-i18n' 2011-12-19 16:06:41 -08:00
http-push.c http: drop http_error function 2013-04-06 18:56:46 -07:00
http-walker.c Rename static function fetch_pack() to http_fetch_pack() 2012-09-12 11:46:31 -07:00
http.c Merge branch 'mv/ssl-ftp-curl' 2013-04-19 13:31:08 -07:00
http.h Merge branch 'mv/ssl-ftp-curl' 2013-04-19 13:31:08 -07:00
ident.c Merge branch 'jn/do-not-drop-username-when-reading-from-etc-mailname' into maint 2013-02-04 10:04:26 -08:00
imap-send.c Merge branch 'ob/imap-send-ssl-verify' into maint-1.8.1 2013-04-03 08:35:33 -07:00
INSTALL Typo fix: replacing it's -> its 2013-04-11 17:39:05 -07:00
kwset.c kwset: fix spelling in comments 2013-04-12 12:25:08 -07:00
kwset.h Adapt the kwset code to Git 2011-08-20 22:33:57 -07:00
levenshtein.c
levenshtein.h
LGPL-2.1 provide a copy of the LGPLv2.1 2011-05-19 18:23:17 -07:00
list-objects.c tree_entry_interesting(): give meaningful names to return values 2011-10-27 11:38:24 -07:00
list-objects.h list-objects: pass callback data to show_objects() 2011-09-01 15:46:12 -07:00
ll-merge.c convert some config callbacks to parse_config_key 2013-01-23 08:41:50 -08:00
ll-merge.h
lockfile.c Name make_*_path functions more accurately 2011-03-17 16:08:30 -07:00
log-tree.c pretty: share code between format_decoration and show_decorations 2013-04-18 16:28:27 -07:00
log-tree.h pretty: share code between format_decoration and show_decorations 2013-04-18 16:28:27 -07:00
mailmap.c Merge branch 'ap/log-mailmap' 2013-01-20 17:06:53 -08:00
mailmap.h mailmap: simplify map_user() interface 2013-01-10 12:33:08 -08:00
Makefile Merge branch 'jk/common-make-variables-export-safety' 2013-04-01 08:59:47 -07:00
match-trees.c match-trees: simplify score_trees() using tree_entry() 2013-03-25 09:00:30 -07:00
merge-blobs.c Which merge_file() function do you mean? 2012-12-09 23:05:27 -08:00
merge-blobs.h Which merge_file() function do you mean? 2012-12-09 23:05:27 -08:00
merge-recursive.c diff: Introduce --diff-algorithm command line option 2013-01-16 09:41:18 -08:00
merge-recursive.h Move try_merge_command and checkout_fast_forward to libgit.a 2012-10-29 03:08:30 -04:00
merge.c Move try_merge_command and checkout_fast_forward to libgit.a 2012-10-29 03:08:30 -04:00
mergesort.c mergesort: rename it to llist_mergesort() 2012-04-17 11:07:01 -07:00
mergesort.h mergesort: rename it to llist_mergesort() 2012-04-17 11:07:01 -07:00
name-hash.c Sync with 1.8.1 maintenance track 2013-04-03 09:18:01 -07:00
notes-cache.c Merge branch 'jc/show-sig' 2012-01-06 12:44:07 -08:00
notes-cache.h
notes-merge.c Sync with 1.7.11.6 2012-09-11 11:23:54 -07:00
notes-merge.h Convert commit_tree() to take strbuf as message 2011-12-15 10:46:42 -08:00
notes.c Merge branch 'jc/same-encoding' into maint 2012-12-07 14:10:56 -08:00
notes.h format_note(): simplify API 2012-10-17 22:42:40 -07:00
object.c avoid segfaults on parse_object failure 2013-03-17 12:49:03 -07:00
object.h avoid segfaults on parse_object failure 2013-03-17 12:49:03 -07:00
pack-check.c fsck: print progress 2011-11-06 20:31:28 -08:00
pack-refs.c pack-refs: add fully-peeled trait 2013-03-18 08:06:28 -07:00
pack-refs.h
pack-revindex.c pack-revindex: radix-sort the revindex 2013-07-12 09:20:54 -07:00
pack-revindex.h
pack-write.c Appease Sun Studio by renaming "tmpfile" 2011-12-21 10:21:04 -08:00
pack.h Merge branch 'jc/stream-to-pack' 2011-12-16 22:33:40 -08:00
pager.c Move setup_diff_pager to libgit.a 2012-10-29 03:08:30 -04:00
parse-options-cb.c parseopt: add OPT_NOOP_NOARG 2011-09-28 12:46:21 -07:00
parse-options.c Merge branch 'ef/non-ascii-parse-options-error-diag' into maint 2013-02-27 10:04:26 -08:00
parse-options.h fix clang -Wunused-value warnings for error functions 2013-01-16 12:47:46 -08:00
patch-delta.c compat: helper for detecting unsigned overflow 2011-02-10 13:47:56 -08:00
patch-ids.c diff_setup_done(): return void 2012-08-03 12:11:07 -07:00
patch-ids.h
path.c path.c: optimize adjust_shared_perm() 2013-04-05 12:39:38 -07:00
pathspec.c add.c: extract new die_if_path_beyond_symlink() for reuse 2013-01-06 14:26:37 -08:00
pathspec.h add.c: extract new die_if_path_beyond_symlink() for reuse 2013-01-06 14:26:37 -08:00
pkt-line.c pkt-line: share buffer/descriptor reading implementation 2013-02-24 00:14:15 -08:00
pkt-line.h pkt-line: share buffer/descriptor reading implementation 2013-02-24 00:14:15 -08:00
preload-index.c Convert ce_path_match() to use struct pathspec 2011-02-03 14:08:30 -08:00
pretty.c Merge branch 'rs/pp-user-info-without-extra-allocation' 2013-05-01 15:24:08 -07:00
progress.c strbuf: create strbuf_humanise_bytes() to show byte sizes 2013-04-10 12:58:33 -07:00
progress.h
prompt.c prompt: fall back to terminal if askpass fails 2012-02-03 14:37:04 -08:00
prompt.h prompt: use git_terminal_prompt 2011-12-12 16:09:38 -08:00
quote.c Merge branch 'jk/argv-array' into maint 2011-10-26 16:13:31 -07:00
quote.h quote: provide sq_dequote_to_argv_array 2011-09-14 11:56:49 -07:00
reachable.c use parse_object_or_die instead of die("bad object") 2013-03-17 12:52:14 -07:00
reachable.h prune: show progress while marking reachable objects 2011-11-07 22:12:19 -08:00
read-cache.c Merge branch 'lf/read-blob-data-from-index' 2013-04-21 18:39:45 -07:00
README Merge branch 'ta/doc-no-small-caps' 2013-02-05 16:13:32 -08:00
reflog-walk.c Merge branch 'jk/maint-reflog-walk-count-vs-time' into maint 2012-05-14 11:46:16 -07:00
reflog-walk.h Merge branch 'jk/maint-reflog-walk-count-vs-time' into maint 2012-05-14 11:46:16 -07:00
refs.c Sync with 1.8.1 maintenance track 2013-04-03 09:18:01 -07:00
refs.h Merge branch 'jc/reflog-reverse-walk' 2013-03-26 13:15:56 -07:00
RelNotes Git 1.8.2.3 2013-05-09 13:31:17 -07:00
remote-curl.c remote-curl: die directly with http error messages 2013-04-06 18:56:45 -07:00
remote-testsvn.c remote-testsvn: fix unitialized variable 2012-12-15 10:43:11 -08:00
remote.c remote.c: introduce branch.<name>.pushremote 2013-04-02 10:41:43 -07:00
remote.h remote.c: introduce a way to have different remotes for fetch/push 2013-04-02 10:41:42 -07:00
replace_object.c inline lookup_replace_object() calls 2011-05-15 15:23:33 -07:00
rerere.c rerere forget: do not segfault if not all stages are present 2013-04-04 12:27:28 -07:00
rerere.h rerere.c: mark private file-scope symbols as static 2012-09-15 22:58:20 -07:00
resolve-undo.c checkout: avoid unnecessary match_pathspec calls 2013-03-27 08:53:15 -07:00
resolve-undo.h checkout: avoid unnecessary match_pathspec calls 2013-03-27 08:53:15 -07:00
revision.c Merge branch 'tr/copy-revisions-from-stdin' into maint 2013-05-09 12:42:17 -07:00
revision.h Merge branch 'bc/append-signed-off-by' 2013-04-01 08:59:24 -07:00
run-command.c Merge branch 'jk/a-thread-only-dies-once' into maint 2013-04-26 11:25:59 -07:00
run-command.h hooks: Add function to check if a hook exists 2013-01-14 09:25:40 -08:00
send-pack.c pkt-line: provide a LARGE_PACKET_MAX static buffer 2013-02-20 13:42:22 -08:00
send-pack.h
sequencer.c Merge branch 'mv/sequencer-pick-error-diag' 2013-05-09 13:30:19 -07:00
sequencer.h sequencer.c: teach append_signoff how to detect duplicate s-o-b 2013-02-12 11:17:10 -08:00
server-info.c
setup.c Merge branch 'jk/alias-in-bare' into maint 2013-04-03 09:25:41 -07:00
sh-i18n--envsubst.c Merge branch 'js/i18n-windows' 2011-06-29 17:03:13 -07:00
sha1_file.c teach sha1_object_info_extended a "disk_size" query 2013-07-07 10:53:22 -07:00
sha1_name.c Merge branch 'jc/sha1-name-object-peeler' 2013-04-03 09:34:54 -07:00
sha1-array.c sha1-array.c: mark a private file-scope symbol as static 2012-09-15 22:58:21 -07:00
sha1-array.h sha1-array.c: mark a private file-scope symbol as static 2012-09-15 22:58:21 -07:00
sha1-lookup.c
sha1-lookup.h
shallow.c upload-pack: fix off-by-one depth calculation in shallow clone 2013-01-11 09:10:57 -08:00
shell.c shell: new no-interactive-login command to print a custom message 2013-03-09 23:21:35 -08:00
shortlog.h
show-index.c i18n: add infrastructure for translating Git with gettext 2011-12-05 20:46:55 -08:00
sideband.c pkt-line: share buffer/descriptor reading implementation 2013-02-24 00:14:15 -08:00
sideband.h pkt-line: move LARGE_PACKET_MAX definition from sideband 2013-02-20 13:42:22 -08:00
sigchain.c
sigchain.h
strbuf.c strbuf: create strbuf_humanise_bytes() to show byte sizes 2013-04-10 12:58:33 -07:00
strbuf.h strbuf: create strbuf_humanise_bytes() to show byte sizes 2013-04-10 12:58:33 -07:00
streaming.c zero-initialize object_info structs 2013-07-07 10:50:13 -07:00
streaming.h streaming: void pointer instead of char pointer 2012-05-03 10:22:56 -07:00
string-list.c Merge branch 'mh/ceiling' into maint 2013-01-28 11:07:18 -08:00
string-list.h Merge branch 'mh/ceiling' into maint 2013-01-28 11:07:18 -08:00
submodule.c submodule: print graph output next to submodule log 2013-04-05 11:28:10 -07:00
submodule.h submodule: print graph output next to submodule log 2013-04-05 11:28:10 -07:00
symlinks.c symlinks.c: mark private file-scope symbols as static 2012-09-15 22:58:21 -07:00
tag.c upload-pack: avoid parsing tag destinations 2012-01-06 13:28:57 -08:00
tag.h upload-pack: avoid parsing tag destinations 2012-01-06 13:28:57 -08:00
tar.h
test-chmtime.c tests: use a lowercase "usage:" string 2013-02-24 21:30:10 -08:00
test-ctype.c test-ctype: add test for is_pathspec_magic 2011-10-03 11:44:03 -07:00
test-date.c i18n: mark relative dates for translation 2012-04-24 14:55:48 -07:00
test-delta.c tests: use a lowercase "usage:" string 2013-02-24 21:30:10 -08:00
test-dump-cache-tree.c cache-tree: update API to take abitrary flags 2012-02-07 16:35:43 -08:00
test-genrandom.c tests: use a lowercase "usage:" string 2013-02-24 21:30:10 -08:00
test-index-version.c
test-line-buffer.c vcs-svn: drop no-op reset methods 2012-07-05 23:26:51 -05:00
test-match-trees.c
test-mergesort.c mergesort: rename it to llist_mergesort() 2012-04-17 11:07:01 -07:00
test-mktemp.c Improve error messages when temporary file creation fails 2010-12-21 19:51:17 -08:00
test-parse-options.c test-parse-options: convert to OPT_BOOL() 2012-02-26 15:18:41 -08:00
test-path-utils.c longest_ancestor_length(): require prefix list entries to be normalized 2012-10-29 02:34:58 -04:00
test-regex.c test-regex: Add a test to check for a bug in the regex routines 2012-09-02 18:57:21 -07:00
test-revision-walking.c Teach revision walking machinery to walk multiple times sequencially 2012-03-30 08:57:49 -07:00
test-run-command.c tests: check error message from run_command 2011-04-20 10:08:54 -07:00
test-scrap-cache-tree.c Add test-scrap-cache-tree 2011-12-06 14:52:18 -08:00
test-sha1.c
test-sha1.sh
test-sigchain.c
test-string-list.c string_list_longest_prefix(): remove function 2012-10-29 02:34:58 -04:00
test-subprocess.c test-subprocess: fix segfault without arguments 2012-04-10 12:28:20 -07:00
test-svn-fe.c msvc: test-svn-fe: Fix linker "unresolved external" error 2013-02-25 12:40:34 -08:00
test-wildmatch.c Makefile: add USE_WILDMATCH to use wildmatch as fnmatch 2013-01-01 15:32:37 -08:00
thread-utils.c Fix sparse warnings 2011-03-22 10:16:54 -07:00
thread-utils.h
trace.c trace.c: mark a private file-scope symbol as static 2012-09-15 22:58:21 -07:00
transport-helper.c Sync with v1.8.2.3 2013-05-09 13:32:54 -07:00
transport.c Merge branch 'jk/pkt-line-cleanup' 2013-04-01 08:59:37 -07:00
transport.h Sync with 'maint' 2013-04-12 13:54:01 -07:00
tree-diff.c Merge branch 'tr/void-diff-setup-done' into maint-1.7.11 2012-09-11 10:53:40 -07:00
tree-walk.c tree_entry_interesting: do basedir compare on wildcard patterns when possible 2012-11-26 11:16:34 -08:00
tree-walk.h tree_entry_interesting(): give meaningful names to return values 2011-10-27 11:38:24 -07:00
tree.c Strip namelen out of ce_flags into a ce_namelen field 2012-07-11 09:42:45 -07:00
tree.h Convert read_tree{,_recursive} to support struct pathspec 2011-03-25 09:20:33 -07:00
unimplemented.sh
unix-socket.c unix-socket: do not let close() or chdir() clobber errno during cleanup 2012-01-11 17:37:10 -08:00
unix-socket.h credentials: add "cache" helper 2011-12-11 23:16:25 -08:00
unpack-trees.c dir.c: replace is_path_excluded with now equivalent is_excluded API 2013-04-15 12:34:01 -07:00
unpack-trees.h dir.c: replace is_path_excluded with now equivalent is_excluded API 2013-04-15 12:34:01 -07:00
upload-pack.c Merge branch 'jk/peel-ref' into maint 2013-04-04 12:59:55 -07:00
url.c Merge branch 'jk/http-auth' 2011-10-17 21:37:15 -07:00
url.h url: decode buffers that are not NUL-terminated 2011-07-20 11:38:34 -07:00
usage.c Merge branch 'jk/a-thread-only-dies-once' into maint 2013-04-26 11:25:59 -07:00
userdiff.c userdiff: drop parse_driver function 2013-01-23 08:41:51 -08:00
userdiff.h refactor get_textconv to not require diff_filespec 2011-05-23 15:46:02 -07:00
utf8.c pretty: Fix bug in truncation support for %>, %< and %>< 2013-04-28 12:09:37 -07:00
utf8.h pretty: support %>> that steal trailing spaces 2013-04-18 16:28:29 -07:00
varint.c varint: make it available outside the context of pack 2012-04-03 16:24:44 -07:00
varint.h varint: make it available outside the context of pack 2012-04-03 16:24:44 -07:00
version.c include agent identifier in capability string 2012-08-03 13:03:34 -07:00
version.h include agent identifier in capability string 2012-08-03 13:03:34 -07:00
walker.c Change check_ref_format() to take a flags argument 2011-10-05 13:45:29 -07:00
walker.h
wildmatch.c wildmatch: advance faster in <asterisk> + <literal> patterns 2013-01-01 15:32:37 -08:00
wildmatch.h wildmatch: support "no FNM_PATHNAME" mode 2013-01-01 15:32:37 -08:00
wrap-for-bin.sh i18n: add infrastructure for translating Git with gettext 2011-12-05 20:46:55 -08:00
wrapper.c Merge branch 'jn/warn-on-inaccessible-loosen' into maint 2013-01-11 16:47:07 -08:00
write_or_die.c write_or_die: raise SIGPIPE when we get EPIPE 2013-02-20 13:42:21 -08:00
ws.c Rename git_checkattr() to git_check_attr() 2011-08-04 15:53:21 -07:00
wt-status.c dir.c: git-status --ignored: don't scan the work tree twice 2013-04-15 12:36:42 -07:00
wt-status.h status: show commit sha1 in "You are currently reverting" message 2013-04-02 14:22:56 -07:00
xdiff-interface.c xdiff: remove emit_func() and xdi_diff_hunks() 2012-05-09 14:08:42 -07:00
xdiff-interface.h xdiff: remove emit_func() and xdi_diff_hunks() 2012-05-09 14:08:42 -07:00
zlib.c zlib: fix compilation failures with Sun C Compilaer 2013-04-22 09:49:04 -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 version 2 (some parts of it are under different licenses,
compatible with the GPLv2). It was originally written by Linus
Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

See Documentation/gittutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands, and
Documentation/git-commandname.txt for documentation of each command.
If git has been correctly installed, then the tutorial can also be
read with "man gittutorial" or "git help tutorial", and the
documentation of each command with "man git-commandname" or "git help
commandname".

CVS users may also want to read Documentation/gitcvs-migration.txt
("man gitcvs-migration" or "git help cvs-migration" if git is
installed).

Many Git online resources are accessible from http://git-scm.com/
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 (read
Documentation/SubmittingPatches for instructions on patch submission).
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://news.gmane.org/gmane.comp.version-control.git/,
http://marc.info/?l=git and other archival sites.

The maintainer frequently sends the "What's cooking" reports that
list the current status of various development topics to the mailing
list.  The discussion following them give a good reference for
project status, development direction and remaining tasks.