Git with broken hash generation to generate collisions between object IDs. Don't use this! https://undefinedbehavior.de/posts/commit-vandalism/
Go to file
Jeff King 099327b552 fetch-pack: avoid quadratic behavior in rev_list_push
When we call find_common to start finding common ancestors
with the remote side of a fetch, the first thing we do is
insert the tip of each ref into our rev_list linked list. We
keep the list sorted the whole time with
commit_list_insert_by_date, which means our insertion ends
up doing O(n^2) timestamp comparisons.

We could teach rev_list_push to use an unsorted list, and
then sort it once after we have added each ref. However, in
get_rev, we process the list by popping commits off the
front and adding parents back in timestamp-sorted order. So
that procedure would still operate on the large list.

Instead, we can replace the linked list with a heap-based
priority queue, which can do O(log n) insertion, making the
whole insertion procedure O(n log n).

As a result of switching to the prio_queue struct, we fix
two minor bugs:

  1. When we "pop" a commit in get_rev, and when we clear
     the rev_list in find_common, we do not take care to
     free the "struct commit_list", and just leak its
     memory. With the prio_queue implementation, the memory
     management is handled for us.

  2. In get_rev, we look at the head commit of the list,
     possibly push its parents onto the list, and then "pop"
     the front of the list off, assuming it is the same
     element that we just peeked at. This is typically going
     to be the case, but would not be in the face of clock
     skew: the parents are inserted by date, and could
     potentially be inserted at the head of the list if they
     have a timestamp newer than their descendent. In this
     case, we would accidentally pop the parent, and never
     process it at all.

     The new implementation pulls the commit off of the
     queue as we examine it, and so does not suffer from
     this problem.

With this patch, a fetch of a single commit into a
repository with 50,000 refs went from:

  real    0m7.984s
  user    0m7.852s
  sys     0m0.120s

to:

  real    0m2.017s
  user    0m1.884s
  sys     0m0.124s

Before this patch, a larger case with 370K refs still had
not completed after tens of minutes; with this patch, it
completes in about 12 seconds.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-07-02 12:05:46 -07:00
block-sha1
builtin Merge branch 'jc/topo-author-date-sort' 2013-07-01 12:41:23 -07:00
compat Merge branch 'fc/macos-x-clipped-write' into maint 2013-06-30 15:33:40 -07:00
contrib Merge branch 'fc/show-branch-in-rebase-am' into maint 2013-06-27 14:38:16 -07:00
Documentation Merge branch 'jc/topo-author-date-sort' 2013-07-01 12:41:23 -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.18.0 2013-06-16 20:06:55 -07:00
gitk-git Merge git://ozlabs.org/~paulus/gitk 2013-05-17 11:55:02 -07:00
gitweb gitweb: fix problem causing erroneous project list 2013-06-07 09:37:16 -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 Merge branch 'jc/topo-author-date-sort' 2013-07-01 12:41:23 -07:00
templates pre-push.sample: Make the script executable 2013-06-11 11:22:00 -07:00
vcs-svn remote-svn: add incremental import 2012-10-07 14:10:17 -07:00
xdiff diff: add --ignore-blank-lines option 2013-06-19 15:17:45 -07:00
.gitattributes .gitattributes: detect 8-space indent in shell scripts 2010-01-06 12:22:25 -08:00
.gitignore Merge branch 'jc/topo-author-date-sort' 2013-07-01 12:41:23 -07:00
.mailmap mailmap: update Pasky's address 2013-04-04 13:03:34 -07:00
abspath.c mingw: rename WIN32 cpp macro to GIT_WINDOWS_NATIVE 2013-05-08 12:14:35 -07:00
aclocal.m4
advice.c Merge branch 'mm/rm-coalesce-errors' 2013-06-24 13:48:35 -07:00
advice.h Merge branch 'mm/rm-coalesce-errors' 2013-06-24 13:48:35 -07:00
alias.c
alloc.c
archive-tar.c archive-tar: use parse_config_key when parsing config 2013-01-23 08:41:50 -08:00
archive-zip.c Merge branch 'sb/archive-zip-double-assignment-fix' 2013-06-06 12:19:04 -07:00
archive.c archive: handle commits with an empty tree 2013-03-10 22:25:22 -07:00
archive.h
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
base85.c
bisect.c register_ref(): make a copy of the bad reference SHA-1 2013-06-02 15:28:47 -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 Merge branch 'jh/checkout-auto-tracking' into maint 2013-06-27 14:37:21 -07:00
branch.h
builtin.h Merge branch 'jh/libify-note-handling' 2013-06-24 13:48:30 -07:00
bulk-checkin.c
bulk-checkin.h
bundle.c object_array_entry: fix memory handling of the name field 2013-06-02 15:28:46 -07:00
bundle.h
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 Merge branch 'mh/ref-races' 2013-06-30 15:40:05 -07:00
check_bindir
check-builtins.sh
check-racy.c
color.c make color.ui default to 'auto' 2013-06-10 10:55:42 -07:00
color.h
column.c
column.h
combine-diff.c Merge branch 'mk/combine-diff-context-horizon-fix' into maint 2013-06-27 14:37:56 -07:00
command-list.txt Merge branch 'as/check-ignore' 2013-01-23 21:19:10 -08:00
commit-slab.h commit-slab: introduce a macro to define a slab for new type 2013-06-07 10:02:12 -07:00
commit.c commit.c: make compare_commits_by_commit_date global 2013-07-02 12:03:50 -07:00
commit.h commit.c: make compare_commits_by_commit_date global 2013-07-02 12:03:50 -07:00
config.c Merge branch 'nd/traces' 2013-06-20 16:02:28 -07:00
config.mak.in Merge branch 'jc/remove-export-from-config-mak-in' 2013-04-01 09:00:02 -07:00
config.mak.uname Merge branch 'fc/macos-x-clipped-write' into maint 2013-06-30 15:33:40 -07:00
configure.ac configure: fix option help message for --disable-pthreads 2013-06-28 10:49:26 -07:00
connect.c Merge branch 'nd/clone-local-with-colon' 2013-06-02 15:52:22 -07:00
connected.c clone: open a shortcut for connectivity check 2013-05-28 08:07:20 -07:00
connected.h clone: open a shortcut for connectivity check 2013-05-28 08:07:20 -07:00
convert.c Merge branch 'lf/read-blob-data-from-index' 2013-04-21 18:39:45 -07:00
convert.h
copy.c
COPYING
credential-cache--daemon.c
credential-cache.c
credential-store.c sparse: Fix mingw_main() argument number/type errors 2013-04-28 12:32:08 -07:00
credential.c
credential.h
csum-file.c
csum-file.h
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 Merge branch 'jc/prune-all' 2013-05-29 14:23:04 -07:00
decorate.c decorate.c: compact table when growing 2013-05-16 11:51:08 -07:00
decorate.h
delta.h
diff-delta.c
diff-lib.c diff-lib, read-tree, unpack-trees: mark cache_entry array paramters const 2013-06-02 15:31:14 -07:00
diff-no-index.c mingw: rename WIN32 cpp macro to GIT_WINDOWS_NATIVE 2013-05-08 12:14:35 -07:00
diff.c diff: add --ignore-blank-lines option 2013-06-19 15:17:45 -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: make error messages more consistent 2013-06-03 10:50:22 -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
dir.c Merge branch 'jn/config-ignore-inaccessible' into maint 2013-06-09 17:06:56 -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 core: use env variable instead of config var to turn on logging pack access 2013-06-09 16:07:50 -07:00
exec_cmd.c
exec_cmd.h
fast-import.c Merge branch 'fc/fast-export-persistent-marks' 2013-06-02 15:48:28 -07:00
fetch-pack.c fetch-pack: avoid quadratic behavior in rev_list_push 2013-07-02 12:05:46 -07:00
fetch-pack.h clone: open a shortcut for connectivity check 2013-05-28 08:07:20 -07:00
fixup-builtins
fmt-merge-msg.h
fsck.c fsck: warn about ".git" in trees 2012-11-28 13:52:54 -08:00
fsck.h
generate-cmdlist.sh
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 add -i: add extra options at the right place in "diff" command line 2013-06-23 13:39:39 -07:00
git-am.sh am: handle stray $dotest directory 2013-06-17 08:59:48 -07:00
git-archimport.perl git-archimport: use a lowercase "usage:" string 2013-02-24 13:31:06 -08:00
git-bisect.sh bisect: Fix log output for multi-parent skip ranges 2013-05-22 15:40:43 -07:00
git-compat-util.h Merge branch 'fc/macos-x-clipped-write' into maint 2013-06-30 15:33:40 -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 --dir-diff: allow changing any clean working tree file 2013-05-29 12:50:08 -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-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 mergetool--lib: refactor {diff,merge}_cmd logic 2013-06-17 13:12:55 -07:00
git-mergetool.sh Merge branch 'al/mergetool-printf-fix' 2013-02-14 10:29:37 -08:00
git-p4.py Merge branch 'vl/typofix' 2013-06-26 15:07:52 -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 branch 'jk/pull-into-dirty-unborn' 2013-06-27 14:29:52 -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 am: return control to caller, for housekeeping 2013-05-12 23:20:07 -07:00
git-rebase--interactive.sh rebase -i: return control to caller, for housekeeping 2013-05-12 23:20:07 -07:00
git-rebase--merge.sh rebase --merge: return control to caller, for housekeeping 2013-05-12 23:20:08 -07:00
git-rebase.sh Merge branch 'rr/rebase-stash-store' 2013-06-27 14:29:41 -07:00
git-relink.perl git-relink: use a lowercase "usage:" string 2013-02-24 13:31:06 -08:00
git-remote-testgit.sh Merge branch 'js/transport-helper-error-reporting-fix' into fc/makefile 2013-06-07 16:15:32 -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
git-request-pull.sh
git-send-email.perl Merge branch 'mt/send-email-cc-match-fix' 2013-06-27 14:29:57 -07:00
git-sh-i18n.sh
git-sh-setup.sh sh-setup: add new peel_committish() helper 2013-06-14 09:41:03 -07:00
git-stash.sh stash: introduce 'git stash store' 2013-06-17 11:43:13 -07:00
git-submodule.sh Merge branch 'jk/submodule-subdirectory-ok' 2013-06-30 15:39:35 -07:00
git-svn.perl Merge branch 'vl/typofix' 2013-06-26 15:07:52 -07:00
GIT-VERSION-GEN Git 1.8.3.2 2013-06-28 14:56:30 -07:00
git-web--browse.sh web--browse: support /usr/bin/cygstart on Cygwin 2013-06-21 09:05:15 -07:00
git.c Merge branch 'nd/clone-connectivity-shortcut' 2013-06-06 12:17:55 -07:00
git.rc Provide a Windows version resource for the git executables. 2013-06-04 10:11:08 +01:00
git.spec.in
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
hash.h Preallocate hash tables when the number of inserts are known in advance 2013-03-16 22:57:29 -07:00
help.c Merge branch 'rj/mingw-cygwin' 2013-06-11 13:30:20 -07:00
help.h help: add help_unknown_ref() 2013-05-08 15:31:54 -07:00
hex.c
http-backend.c show_head_ref(): rename first parameter to "refname" 2013-06-02 15:28:47 -07:00
http-fetch.c
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 'bc/http-keep-memory-given-to-curl' 2013-06-27 14:29:49 -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 imap-send: eliminate HMAC deprecation warnings on Mac OS X 2013-05-21 13:26:37 -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
levenshtein.c
levenshtein.h
LGPL-2.1
line-log.c log -L: improve comments in process_all_files() 2013-04-12 11:37:09 -07:00
line-log.h log -L: store the path instead of a diff_filespec 2013-04-12 11:37:03 -07:00
line-range.c log -L: :pattern:file syntax to find by funcname 2013-03-28 10:30:04 -07:00
line-range.h log -L: :pattern:file syntax to find by funcname 2013-03-28 10:30:04 -07:00
list-objects.c
list-objects.h
ll-merge.c convert some config callbacks to parse_config_key 2013-01-23 08:41:50 -08:00
ll-merge.h
lockfile.c
log-tree.c Merge branch 'tr/line-log' 2013-06-02 16:00:44 -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 'jc/topo-author-date-sort' 2013-07-01 12:41:23 -07:00
match-trees.c match-trees: factor out fill_tree_desc_strict 2013-06-13 14:45:38 -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.h
name-hash.c Sync with 1.8.1 maintenance track 2013-04-03 09:18:01 -07:00
notes-cache.c
notes-cache.h
notes-merge.c Move create_notes_commit() from notes-merge.c into notes-utils.c 2013-06-12 10:38:13 -07:00
notes-merge.h Move create_notes_commit() from notes-merge.c into notes-utils.c 2013-06-12 10:38:13 -07:00
notes-utils.c Move create_notes_commit() from notes-merge.c into notes-utils.c 2013-06-12 10:38:13 -07:00
notes-utils.h Move create_notes_commit() from notes-merge.c into notes-utils.c 2013-06-12 10:38:13 -07:00
notes.c string_list_add_refs_by_glob(): add a comment about memory management 2013-06-02 15:28:47 -07:00
notes.h format_note(): simplify API 2012-10-17 22:42:40 -07:00
object.c Merge branch 'mh/reflife' 2013-06-14 08:46:14 -07:00
object.h object_array_entry: fix memory handling of the name field 2013-06-02 15:28:46 -07:00
pack-check.c
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c Move setup_diff_pager to libgit.a 2012-10-29 03:08:30 -04:00
parse-options-cb.c prune: introduce OPT_EXPIRY_DATE() and use it 2013-04-25 11:42:10 -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 Merge branch 'jc/prune-all' 2013-05-29 14:23:04 -07:00
patch-delta.c
patch-ids.c
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
pretty.c Merge branch 'rs/pp-user-info-without-extra-allocation' 2013-05-01 15:24:08 -07:00
prio-queue.c sort-in-topological-order: use prio-queue 2013-06-11 15:15:21 -07:00
prio-queue.h sort-in-topological-order: use prio-queue 2013-06-11 15:15:21 -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.h
quote.c
quote.h
reachable.c use parse_object_or_die instead of die("bad object") 2013-03-17 12:52:14 -07:00
reachable.h
read-cache.c Merge branch 'mh/ref-races' 2013-06-30 15:40:05 -07:00
README Merge branch 'ta/doc-no-small-caps' 2013-02-05 16:13:32 -08:00
reflog-walk.c
reflog-walk.h
refs.c Merge branch 'mh/ref-races' 2013-06-30 15:40:05 -07:00
refs.h refs: implement simple transactions for the packed-refs file 2013-06-20 15:50:17 -07:00
RelNotes Start preparing for 1.8.3.3 2013-06-30 15:36:03 -07:00
remote-curl.c remote-curl: die directly with http error messages 2013-04-06 18:56:45 -07:00
remote-testsvn.c sparse: Fix mingw_main() argument number/type errors 2013-04-28 12:32:08 -07:00
remote.c remote: trivial style cleanup 2013-05-28 09:03:00 -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
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 'jc/topo-author-date-sort' 2013-07-01 12:41:23 -07:00
revision.h Merge branch 'jc/topo-author-date-sort' 2013-07-01 12:41:23 -07:00
run-command.c mingw: rename WIN32 cpp macro to GIT_WINDOWS_NATIVE 2013-05-08 12:14:35 -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 'rr/cherry-pick-fast-forward-reflog-message' 2013-06-27 14:30:00 -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
sha1_file.c Merge branch 'jk/unpack-entry-fallback-to-another' 2013-06-23 14:53:20 -07:00
sha1_name.c Merge branch 'fc/at-head' 2013-06-11 13:31:23 -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 sha1-lookup: add new "sha1_pos" function to efficiently lookup sha1 2009-04-04 22:57:39 -07:00
shallow.c fetch-pack: prepare updated shallow file before fetching the pack 2013-05-28 08:06:08 -07: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
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 avoid infinite loop in read_istream_loose 2013-03-27 13:47:02 -07:00
streaming.h
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 Merge branch 'mh/reflife' 2013-06-14 08:46:14 -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
tag.h
tar.h
test-chmtime.c Merge branch 'js/test-ln-s-add' 2013-06-20 16:02:18 -07:00
test-ctype.c
test-date.c
test-delta.c tests: use a lowercase "usage:" string 2013-02-24 21:30:10 -08:00
test-dump-cache-tree.c
test-genrandom.c tests: use a lowercase "usage:" string 2013-02-24 21:30:10 -08:00
test-index-version.c sparse: Fix mingw_main() argument number/type errors 2013-04-28 12:32:08 -07:00
test-line-buffer.c
test-match-trees.c
test-mergesort.c sparse: Fix mingw_main() argument number/type errors 2013-04-28 12:32:08 -07:00
test-mktemp.c
test-parse-options.c sparse: Fix mingw_main() argument number/type errors 2013-04-28 12:32:08 -07:00
test-path-utils.c longest_ancestor_length(): require prefix list entries to be normalized 2012-10-29 02:34:58 -04:00
test-prio-queue.c prio-queue: priority queue of pointers to structs 2013-06-11 15:15:21 -07:00
test-read-cache.c read-cache: add simple performance test 2013-06-09 17:03:00 -07:00
test-regex.c
test-revision-walking.c
test-run-command.c
test-scrap-cache-tree.c
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 sparse: Fix mingw_main() argument number/type errors 2013-04-28 12:32:08 -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 mingw: rename WIN32 cpp macro to GIT_WINDOWS_NATIVE 2013-05-08 12:14:35 -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 transport-helper: be quiet on read errors from helpers 2013-06-21 09:03:53 -07:00
transport.c Merge branch 'ph/builtin-srcs-are-in-subdir-these-days' 2013-06-26 15:07:48 -07:00
transport.h Merge branch 'ph/builtin-srcs-are-in-subdir-these-days' 2013-06-26 15:07:48 -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 unpack-trees: don't shift conflicts left and right 2013-06-17 09:24:47 -07:00
tree.c
tree.h
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c Merge branch 'rs/unpack-trees-tree-walk-conflict-field' 2013-06-24 13:48:44 -07:00
unpack-trees.h diff-lib, read-tree, unpack-trees: mark cache_entry array paramters const 2013-06-02 15:31:14 -07:00
upload-pack.c upload-pack: ignore 'shallow' lines with unknown obj-ids 2013-04-28 22:33:53 -07:00
url.c
url.h
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
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.h
version.c
version.h
walker.c
walker.h
wildmatch.c wildmatch: properly fold case everywhere 2013-06-02 14:13:05 -07:00
wildmatch.h wildmatch: support "no FNM_PATHNAME" mode 2013-01-01 15:32:37 -08:00
wrap-for-bin.sh
wrapper.c config: allow inaccessible configuration under $HOME 2013-04-15 07:26:50 -07:00
write_or_die.c write_or_die: raise SIGPIPE when we get EPIPE 2013-02-20 13:42:21 -08:00
ws.c
wt-status.c wt-status: give better advice when cherry-pick is in progress 2013-06-17 13:16:26 -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-interface.h
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.