Git with broken hash generation to generate collisions between object IDs. Don't use this! https://undefinedbehavior.de/posts/commit-vandalism/
Go to file
Brandon Casey 88d0db5557 sha1_file: introduce close_one_pack() to close packs on fd pressure
When the number of open packs exceeds pack_max_fds, unuse_one_window()
is called repeatedly to attempt to release the least-recently-used
pack windows, which, as a side-effect, will also close a pack file
after closing its last open window.  If a pack file has been opened,
but no windows have been allocated into it, it will never be selected
by unuse_one_window() and hence its file descriptor will not be
closed.  When this happens, git may exceed the number of file
descriptors permitted by the system.

This latter situation can occur in show-ref or receive-pack during ref
advertisement.  During ref advertisement, receive-pack will iterate
over every ref in the repository and advertise it to the client after
ensuring that the ref exists in the local repository.  If the ref is
located inside a pack, then the pack is opened to ensure that it
exists, but since the object is not actually read from the pack, no
mmap windows are allocated.  When the number of open packs exceeds
pack_max_fds, unuse_one_window() will not be able to find any windows to
free and will not be able to close any packs.  Once the per-process
file descriptor limit is exceeded, receive-pack will produce a warning,
not an error, for each pack it cannot open, and will then most likely
fail with an error to spawn rev-list or index-pack like:

   error: cannot create standard input pipe for rev-list: Too many open files
   error: Could not run 'git rev-list'

This may also occur during upload-pack when refs are packed (in the
packed-refs file) and the number of packs that must be opened to
verify that these packed refs exist exceeds the file descriptor
limit.  If the refs are loose, then upload-pack will read each ref
from the object database (if the object is in a pack, allocating one
or more mmap windows for it) in order to peel tags and advertise the
underlying object.  But when the refs are packed and peeled,
upload-pack will use the peeled sha1 in the packed-refs file and
will not need to read from the pack files, so no mmap windows will
be allocated and just like with receive-pack, unuse_one_window()
will never select these opened packs to close.

When we have file descriptor pressure, we just need to find an open
pack to close.  We can leave the existing mmap windows open.  If
additional windows need to be mapped into the pack file, it will be
reopened when necessary.  If the pack file has been rewritten in the
mean time, open_packed_git_1() should notice when it compares the file
size or the pack's sha1 checksum to what was previously read from the
pack index, and reject it.

Let's introduce a new function close_one_pack() designed specifically
for this purpose to search for and close the least-recently-used pack,
where LRU is defined as (in order of preference):

   * pack with oldest mtime and no allocated mmap windows
   * pack with the least-recently-used windows, i.e. the pack
     with the oldest most-recently-used window, where none of
     the windows are in use
   * pack with the least-recently-used windows

Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-08-02 08:53:54 -07:00
block-sha1 Merge branch 'jn/block-sha1' into maint 2012-08-06 15:40:00 -07:00
builtin Merge branch 'tr/remote-tighten-commandline-parsing' into maint 2013-05-03 15:12:38 -07:00
compat precompose-utf8: fix spelling of "want" in error message 2013-04-12 12:24:04 -07:00
contrib completion: zsh: don't override suffix on _detault 2013-05-03 15:10:05 -07:00
Documentation Merge branch 'maint-1.8.1' into maint-1.8.2 2013-07-03 15:26:53 -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-01-30 13:52:44 -08:00
gitweb gitweb/INSTALL: Simplify description of GITWEB_CONFIG_SYSTEM 2013-04-15 07:25:46 -07:00
mergetools mergetools/kdiff3: do not use --auto when diffing 2013-05-09 11:59:39 -07:00
perl Merge branch 'tr/perl-keep-stderr-open' into maint 2013-04-22 11:26:55 -07:00
po doc: various spelling fixes 2013-04-12 12:00:52 -07:00
ppc
t t0070 "mktemp to unwritable directory" needs SANITY 2013-06-11 14:23:31 -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 Correct common spelling mistakes in comments and tests 2013-04-12 13:38:40 -07:00
.gitattributes
.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
advice.c Merge branch 'tb/document-status-u-tradeoff' into maint 2013-04-01 09:19:30 -07:00
advice.h Merge branch 'tb/document-status-u-tradeoff' into maint 2013-04-01 09:19:30 -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 archive-zip: fix compressed size for stored export-subst files 2013-02-27 07:38:32 -08: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 Sync with 1.8.1.6 2013-04-07 13:17:50 -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 Remove i18n legos in notifying new branch tracking setup 2012-06-07 11:46:02 -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.h
bundle.c bundle: Accept prerequisites without commit messages 2013-04-07 14:45:56 -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 'jk/alias-in-bare' into maint 2013-04-03 09:25:41 -07:00
check_bindir
check-builtins.sh
check-racy.c
color.c
color.h
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 Allow combined diff to ignore white-spaces 2013-03-14 14:43:34 -07:00
command-list.txt Merge branch 'as/check-ignore' 2013-01-23 21:19:10 -08:00
commit.c Correct common spelling mistakes in comments and tests 2013-04-12 13:38:40 -07:00
commit.h Correct common spelling mistakes in comments and tests 2013-04-12 13:38:40 -07:00
config.c Merge branch 'jk/config-parsing-cleanup' 2013-02-04 10:24:50 -08:00
config.mak.in Merge branch 'ct/autoconf-htmldir' 2013-02-25 08:27:04 -08:00
config.mak.uname Revert "compat: add strtok_r()" 2013-02-26 09:16:58 -08:00
configure.ac Revert "compat: add strtok_r()" 2013-02-26 09:16:58 -08:00
connect.c Merge branch 'jc/capabilities' into maint 2012-09-11 11:06:45 -07:00
connected.c fetch/receive: remove over-pessimistic connectivity check 2012-03-15 15:23:17 -07:00
connected.h
convert.c convert some config callbacks to parse_config_key 2013-01-23 08:41:50 -08: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
credential-cache.c credential-cache: ignore "connection refused" errors 2012-01-16 22:15:19 -08:00
credential-store.c
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.h
ctype.c ctype: support iscntrl, ispunct, isxdigit and isprint 2012-10-15 14:58:16 -07:00
daemon.c Merge branch 'dm/ni-maxhost-may-be-missing' into maint-1.8.1 2013-03-25 13:45:42 -07:00
date.c Merge branch 'jc/maint-filter-branch-epoch-date' into maint 2012-07-30 13:04:18 -07:00
decorate.c Unify signedness in hashing calls 2009-05-20 00:02:24 -07:00
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 Merge branch 'jk/maint-null-in-trees' into maint-1.7.11 2012-09-10 15:24:54 -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 Sync with 1.8.1.6 2013-04-07 13:17:50 -07:00
dir.h Merge branch 'as/check-ignore' 2013-01-23 21:19:10 -08: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/checkout-attribute-lookup' into maint-1.8.1 2013-04-03 08:43:40 -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/gc-auto-after-fetch' 2013-02-01 12:40:16 -08:00
fetch-pack.h filter_refs(): delete matched refs from sought list 2012-09-12 11:46:31 -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 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 Merge branch 'jc/fake-ancestor-with-non-blobs' into maint 2013-02-07 15:14:22 -08:00
git-archimport.perl git-archimport: use a lowercase "usage:" string 2013-02-24 13:31:06 -08:00
git-bisect.sh
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 git-difftool: use git-mergetool--lib for "--tool-help" 2013-01-25 11:08:55 -08: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 git-merge-one-file: use a lowercase "usage:" string 2013-02-24 13:31:06 -08: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 Merge branch 'pw/git-p4-on-cygwin' 2013-02-04 10:25:30 -08: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 pull: Apply -q and -v options to rebase mode as well 2013-03-16 23:30:08 -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: Handle cases where format-patch fails 2012-10-11 11:54:49 -07:00
git-rebase--interactive.sh Merge branch 'jk/rebase-i-comment-char' 2013-02-17 15:25:20 -08:00
git-rebase--merge.sh rebase: don't source git-sh-setup twice 2012-06-26 13:17:50 -07:00
git-rebase.sh rebase -i: Teach "--edit-todo" action 2012-09-17 20:59:14 -07:00
git-relink.perl git-relink: use a lowercase "usage:" string 2013-02-24 13:31:06 -08:00
git-remote-testgit remote-testgit: implement the "done" feature manually 2012-11-29 12:18:45 -08: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: use the three-arg form of open in recipients_cmd 2013-03-31 21:30:27 -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 git-sh-setup: use a lowercase "usage:" string 2013-02-24 13:31:05 -08: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 submodule summary: support --summary-limit=<n> 2013-04-01 07:37:34 -07:00
git-svn.perl git-svn: use a lowercase "usage:" string 2013-02-24 21:30:03 -08:00
GIT-VERSION-GEN Git 1.8.2.3 2013-05-09 13:31:17 -07:00
git-web--browse.sh
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 gpg_interface: allow to request status return 2013-02-14 09:30:04 -08: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
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
http-backend.c http-backend: respect existing GIT_COMMITTER_* variables 2012-03-30 09:13:02 -07:00
http-fetch.c
http-push.c Allow building with xmlparse.h 2013-02-11 14:33:04 -08:00
http-walker.c Rename static function fetch_pack() to http_fetch_pack() 2012-09-12 11:46:31 -07:00
http.c http_request: reset "type" strbuf before adding 2013-02-06 07:50:56 -08:00
http.h Verify Content-Type from smart HTTP servers 2013-02-04 10:22:36 -08: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 2013-03-26 12:41:59 -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 Typofixes outside documentation area 2010-02-03 21:28:17 -08:00
LGPL-2.1
list-objects.c tree_entry_interesting(): give meaningful names to return values 2011-10-27 11:38:24 -07:00
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 'mg/gpg-interface-using-status' into maint 2013-04-03 09:26:27 -07:00
log-tree.h get_patch_filename(): split into two functions 2012-12-21 23:55:40 -08: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 'maint' 2013-03-17 00:11:11 -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
notes-cache.h
notes-merge.c Sync with 1.7.11.6 2012-09-11 11:23:54 -07:00
notes-merge.h
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
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.h
pack-write.c
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
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
patch-ids.c diff_setup_done(): return void 2012-08-03 12:11:07 -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.c longest_ancestor_length(): require prefix list entries to be normalized 2012-10-29 02:34:58 -04: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 remove the impression of unexpectedness when access is denied 2012-06-19 13:37:02 -07:00
pkt-line.h remove the impression of unexpectedness when access is denied 2012-06-19 13:37:02 -07:00
preload-index.c
pretty.c pretty: handle broken commit headers gracefully 2013-04-17 14:50:36 -07:00
progress.c
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
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 Sync with 1.8.1 maintenance track 2013-04-03 09:18:01 -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 upload/receive-pack: allow hiding ref hierarchies 2013-02-07 13:48:47 -08:00
RelNotes Git 1.8.2.3 2013-05-09 13:31:17 -07:00
remote-curl.c Verify Content-Type from smart HTTP servers 2013-02-04 10:22:36 -08:00
remote-testsvn.c remote-testsvn: fix unitialized variable 2012-12-15 10:43:11 -08:00
remote.c Merge branch 'jc/push-reject-reasons' 2013-02-04 10:25:04 -08:00
remote.h add sorting infrastructure for list refs 2012-05-22 13:31:03 -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
resolve-undo.h
revision.c Merge branch 'tr/copy-revisions-from-stdin' into maint 2013-05-09 12:42:17 -07:00
revision.h Merge branch 'ap/log-mailmap' 2013-01-20 17:06:53 -08: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 push: introduce REJECT_FETCH_FIRST and REJECT_NEEDS_FORCE 2013-01-24 14:37:23 -08:00
send-pack.h
sequencer.c Correct common spelling mistakes in comments and tests 2013-04-12 13:38:40 -07:00
sequencer.h Merge branch 'jc/make-static' 2012-09-18 14:37:46 -07:00
server-info.c update-server-info: Shorten read_pack_info_file() 2010-07-19 11:13:52 -07:00
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 sha1_file: introduce close_one_pack() to close packs on fd pressure 2013-08-02 08:53:54 -07:00
sha1_name.c sha1_name: pass object name length to diagnose_invalid_sha1_path() 2013-03-17 00:10:51 -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
shortlog.h
show-index.c
sideband.c
sideband.h
sigchain.c
sigchain.h
strbuf.c Allow custom "comment char" 2013-01-16 12:48:22 -08:00
strbuf.h Allow custom "comment char" 2013-01-16 12:48:22 -08:00
streaming.c pack-objects, streaming: turn "xx >= big_file_threshold" to ".. > .." 2012-05-18 14:21:19 -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: clarify logic in show_submodule_summary 2013-03-22 14:09:55 -07:00
submodule.h submodule: display summary header in bold 2012-11-18 19:18:13 -08: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 tests: use a lowercase "usage:" string 2013-02-24 21:30:10 -08:00
test-ctype.c
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
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
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 test-subprocess: fix segfault without arguments 2012-04-10 12:28:20 -07:00
test-svn-fe.c remote-svn: add incremental import 2012-10-07 14:10:17 -07:00
test-wildmatch.c Makefile: add USE_WILDMATCH to use wildmatch as fnmatch 2013-01-01 15:32:37 -08:00
thread-utils.c
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: trivial style cleanup 2013-05-09 11:33:01 -07:00
transport.c transport.c: help gcc 4.6.3 users by squelching compiler warning 2013-03-25 12:51:50 -07:00
transport.h Correct common spelling mistakes in comments and tests 2013-04-12 13:38:40 -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.c Strip namelen out of ce_flags into a ce_namelen field 2012-07-11 09:42:45 -07:00
tree.h
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c Merge branch 'as/check-ignore' 2013-01-23 21:19:10 -08:00
unpack-trees.h unpack-trees.c: use path_excluded() in check_ok_to_remove() 2012-06-05 22:21:42 -07:00
upload-pack.c Merge branch 'jk/peel-ref' into maint 2013-04-04 12:59:55 -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 Merge branch 'ks/rfc2047-one-char-at-a-time' into maint 2013-04-03 09:25:29 -07:00
utf8.h Merge branch 'ks/rfc2047-one-char-at-a-time' into maint 2013-04-03 09:25: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
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 maybe_flush_or_die: move a too-loose Windows specific error 2012-10-17 00:33:42 -07:00
ws.c
wt-status.c Merge branch 'tb/document-status-u-tradeoff' into maint 2013-04-12 08:12:47 -07:00
wt-status.h Merge branch 'tb/document-status-u-tradeoff' into maint 2013-04-01 09:19:30 -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

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

	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.