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 2a4552021a remote-curl: always parse incoming refs
When remote-curl receives a list of refs from a server, it
keeps the whole buffer intact. When we get a "list" command,
we feed the result to get_remote_heads, and when we get a
"fetch" or "push" command, we feed it to fetch-pack or
send-pack, respectively.

If the HTTP response from the server is truncated for any
reason, we will get an incomplete ref advertisement. If we
then feed this incomplete list to fetch-pack, one of a few
things may happen:

  1. If the truncation is in a packet header, fetch-pack
     will notice the bogus line and complain.

  2. If the truncation is inside a packet, fetch-pack will
     keep waiting for us to send the rest of the packet,
     which we never will.

  3. If the truncation is at a packet boundary, fetch-pack
     will keep waiting for us to send the next packet, which
     we never will.

As a result, fetch-pack hangs, waiting for input.  However,
remote-curl believes it has sent all of the advertisement,
and therefore waits for fetch-pack to speak. The two
processes end up in a deadlock.

We do notice the broken ref list if we feed it to
get_remote_heads. So if git asks the helper to do a "list"
followed by a "fetch", we are safe; we'll abort during the
list operation, which parses the refs.

This patch teaches remote-curl to always parse and save the
incoming ref list when we read the ref advertisement from a
server. That means that we will always verify and abort
before even running fetch-pack (or send-pack) when reading a
corrupted list, even if we do not run the "list" command
explicitly.

Since we save the result, in the common case of running
"list" then "fetch", we do not do any extra parsing at all.
In the case of just a "fetch", we do an extra round of
parsing, but only once.

Note also that the "fetch" case will now also initialize
server_capabilities from the remote (in remote-curl; we
already would do so inside fetch-pack).  Doing "list+fetch"
already does this. It doesn't actually matter now, but the
new behavior is arguably more correct, should remote-curl
ever start caring about the server's capability list.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-02-24 00:17:38 -08:00
block-sha1 Merge branch 'jn/block-sha1' into maint 2012-08-06 15:40:00 -07:00
builtin teach get_remote_heads to read from a memory buffer 2013-02-24 00:17:38 -08:00
compat Merge branch 'nd/wildmatch' 2013-01-10 13:47:20 -08:00
contrib Merge branch 'mp/diff-algo-config' 2013-02-17 15:25:52 -08:00
Documentation Git 1.8.2-rc0 2013-02-17 15:35:33 -08: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: refer to picon/gravatar images over the same scheme 2013-01-28 18:58:50 -08:00
mergetools Merge branch 'da/p4merge-mktemp-fix' 2013-02-14 16:05:56 -08:00
perl Merge branch 'bw/get-tz-offset-perl' 2013-02-14 10:29:44 -08:00
po l10n: de.po: translate "reset" as "neu setzen" 2013-02-08 20:43:30 +01:00
ppc
t upload-pack: remove packet debugging harness 2013-02-20 13:42:21 -08:00
templates Add sample pre-push hook script 2013-01-18 11:13:22 -08:00
vcs-svn remote-svn: add incremental import 2012-10-07 14:10:17 -07:00
xdiff Merge branch 'rs/xdiff-fast-hash-fix' 2012-05-25 12:05:02 -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: normalize emails for Linus Torvalds 2012-12-12 11:09:11 -08:00
abspath.c Introduce new function real_path_if_valid() 2012-10-29 02:34:58 -04:00
aclocal.m4
advice.c push: introduce REJECT_FETCH_FIRST and REJECT_NEEDS_FORCE 2013-01-24 14:37:23 -08:00
advice.h push: introduce REJECT_FETCH_FIRST and REJECT_NEEDS_FORCE 2013-01-24 14:37:23 -08: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 'rs/zip-with-uncompressed-size-in-the-header' into maint 2013-01-20 17:22:27 -08:00
archive.c Add directory pattern matching to attributes 2012-12-17 22:07:23 -08: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 'nd/fix-directory-attrs-off-by-one' into maint 2013-01-29 11:20:10 -08: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 Move estimate_bisect_steps to libgit.a 2012-10-29 03:08:30 -04: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: 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 tweak "bundle verify" of a complete history 2012-06-04 16:24:49 -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 get_remote_heads to read from a memory buffer 2013-02-24 00:17:38 -08: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 Merge branch 'jk/diff-graph-cleanup' 2013-02-14 10:29:59 -08:00
command-list.txt Merge branch 'as/check-ignore' 2013-01-23 21:19:10 -08:00
commit.c Move print_commit_list to libgit.a 2012-10-29 03:08:30 -04:00
commit.h Merge branch 'jk/read-commit-buffer-data-after-free' 2013-02-04 10:25:18 -08: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-08 15:28:38 -08:00
config.mak.uname Allow building with xmlparse.h 2013-02-11 14:33:04 -08:00
configure.ac Merge branch 'mh/pthreads-autoconf' into maint 2013-01-10 14:04:26 -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 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 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 pkt-line: share buffer/descriptor reading implementation 2013-02-24 00:14:15 -08:00
date.c Merge branch 'jc/maint-filter-branch-epoch-date' into maint 2012-07-30 13:04:18 -07: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 'mp/diff-algo-config' 2013-02-17 15:25:52 -08:00
diff.h Merge branch 'mp/diff-algo-config' 2013-02-17 15:25:52 -08:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c pickaxe: use textconv for -S counting 2012-10-28 08:48:17 -04: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 Merge branch 'ap/status-ignored-in-ignored-directory' into maint 2013-01-28 11:10:25 -08: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 streaming: make streaming-write-entry to be more reusable 2012-03-07 09:07:37 -08:00
environment.c Merge branch 'jc/custom-comment-char' 2013-02-04 10:23:49 -08: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 Merge branch 'jc/merge-bases' 2012-09-11 11:36:05 -07:00
fetch-pack.c pkt-line: provide a LARGE_PACKET_MAX static buffer 2013-02-20 13:42:22 -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 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 git-add--interactive.perl: Remove two unused variables 2012-06-25 10:06:09 -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-bisect.sh Merge branch 'js/bisect-no-checkout' into maint 2011-11-01 16:03:35 -07:00
git-compat-util.h Merge branch 'jk/error-const-return' 2013-02-14 10:29:23 -08:00
git-cvsexportcommit.perl git-cvsexportcommit: Fix calling Perl's rel2abs() on MSYS 2012-01-11 18:04:08 -08:00
git-cvsimport.perl cvsimport: format commit timestamp ourselves without using strftime 2013-02-09 14:41:49 -08:00
git-cvsserver.perl cvsserver: support -r and sticky tags for most operations 2012-10-16 16:17:54 -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 filter-branch: use git-sh-setup's ident parsing functions 2012-10-18 15:43:49 -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 'js/maint-merge-one-file-osx-expr' into maint 2011-10-21 10:49:25 -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 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 git-pull: Avoid merge-base on detached head 2012-10-25 05:32:11 -04:00
git-quiltimport.sh
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 Consistently use perl from /usr/bin/ for scripts 2012-05-01 13:32:17 -07: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 Merge branch 'nz/send-email-headers-are-case-insensitive' into maint 2013-01-20 17:22:49 -08: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 'jc/maint-fbsd-sh-ifs-workaround' into maint 2013-01-08 11:17:01 -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 Allow custom "comment char" 2013-01-16 12:48:22 -08:00
git-svn.perl git-svn: Simplify calculation of GIT_DIR 2013-01-24 10:21:23 +00:00
GIT-VERSION-GEN Git 1.8.2-rc0 2013-02-17 15:35:33 -08:00
git-web--browse.sh git-web--browse: avoid the use of eval 2011-10-03 10:47:07 -07:00
git.c Merge branch 'as/check-ignore' 2013-01-23 21:19:10 -08:00
git.spec.in spec: add missing build dependency 2012-04-06 10:15:11 -07:00
gpg-interface.c Merge branch 'sb/gpg-plug-fd-leak' into maint 2013-02-07 15:14:54 -08:00
gpg-interface.h Split GPG interface into its own helper library 2011-11-04 21:40:25 -07:00
graph.c graph: output padding for merge subsequent parents 2013-02-07 12:54:26 -08:00
graph.h graph.c: mark private file-scope symbols as static 2012-09-15 22:58:20 -07:00
grep.c Merge branch 'nd/grep-true-path' into maint 2012-11-18 19:32:30 -08:00
grep.h Merge branch 'nd/grep-true-path' into maint 2012-11-18 19:32:30 -08:00
hash.c
hash.h
help.c help: include <common-cmds.h> only in one file 2013-01-18 22:35:04 -08: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 pkt-line: drop safe_write function 2013-02-20 13:42:21 -08:00
http-fetch.c Merge branch 'ab/enable-i18n' 2011-12-19 16:06:41 -08:00
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 pkt-line: move LARGE_PACKET_MAX definition from sideband 2013-02-20 13:42:22 -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 imap-send.c: simplify logic in lf_to_crlf() 2013-01-15 14:50:23 -08:00
INSTALL INSTALL: git-p4 does not support Python 3 2013-01-30 11:17:59 -08:00
kwset.c sparse: Fix an "Using plain integer as NULL pointer" warning 2011-09-11 14:43:14 -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
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
log-tree.c Merge branch 'ap/log-mailmap' 2013-01-20 17:06:53 -08: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 'mk/make-rm-depdirs-could-be-empty' 2013-02-14 16:06:24 -08:00
match-trees.c
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 name-hash.c: always initialize dir_next pointer 2011-11-01 15:29:18 -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 remove superfluous newlines in error messages 2012-04-30 15:45:51 -07:00
object.h Teach revision walking machinery to walk multiple times sequencially 2012-03-30 08:57:49 -07:00
pack-check.c fsck: print progress 2011-11-06 20:31:28 -08:00
pack-refs.c pack_refs(): remove redundant check 2012-01-17 11:41:41 -08:00
pack-refs.h
pack-revindex.c
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' 2013-02-14 16:06:14 -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
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 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 logmsg_reencode: lazily load missing commit buffers 2013-01-26 13:28:22 -08: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 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 reachable: per-object progress 2011-11-07 22:12:19 -08:00
reachable.h prune: show progress while marking reachable objects 2011-11-07 22:12:19 -08:00
read-cache.c Enable minimal stat checking 2013-01-22 09:33:16 -08: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 Merge branch 'jc/hidden-refs' 2013-02-17 15:25:57 -08:00
refs.h upload/receive-pack: allow hiding ref hierarchies 2013-02-07 13:48:47 -08:00
RelNotes Start preparing for 1.8.1.3 2013-02-04 10:21:10 -08:00
remote-curl.c remote-curl: always parse incoming refs 2013-02-24 00:17:38 -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.c: mark private file-scope symbols as static 2012-09-15 22:58:20 -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 log: re-encode commit messages before grepping 2013-02-11 13:11:45 -08:00
revision.h Merge branch 'ap/log-mailmap' 2013-01-20 17:06:53 -08:00
run-command.c Merge branch 'sb/run-command-fd-error-reporting' 2013-02-07 14:41:42 -08: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 learn to pick/revert into unborn branch 2012-12-23 10:40:37 -08:00
sequencer.h Merge branch 'jc/make-static' 2012-09-18 14:37:46 -07:00
server-info.c
setup.c Merge branch 'nd/magic-pathspec-from-root' 2013-01-30 08:52:53 -08:00
sh-i18n--envsubst.c Merge branch 'js/i18n-windows' 2011-06-29 17:03:13 -07:00
sha1_file.c link_alt_odb_entries(): take (char *, len) rather than two pointers 2012-11-08 12:06:53 -05:00
sha1_name.c Merge branch 'jc/sha1-name-more' 2012-07-22 12:55:07 -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 i18n: add infrastructure for translating Git with gettext 2011-12-05 20:46:55 -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 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: simplify memory handling in config parsing 2013-01-23 12:58:27 -08: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 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
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 Nicolas Pitre has a new email address 2009-09-14 02:23:36 -07: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
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 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 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 push: introduce REJECT_FETCH_FIRST and REJECT_NEEDS_FORCE 2013-01-24 14:37:23 -08:00
transport.c teach get_remote_heads to read from a memory buffer 2013-02-24 00:17:38 -08:00
transport.h Merge branch 'jc/push-reject-reasons' 2013-02-04 10:25:04 -08: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
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 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 pkt-line: provide a LARGE_PACKET_MAX static buffer 2013-02-20 13:42:22 -08: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 make error()'s constant return value more visible 2012-12-15 10:45:58 -08:00
userdiff.c userdiff: drop parse_driver function 2013-01-23 08:41:51 -08:00
userdiff.h
utf8.c Merge branch 'jx/utf8-printf-width' 2013-02-14 10:29:08 -08:00
utf8.h Merge branch 'jx/utf8-printf-width' 2013-02-14 10:29:08 -08: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 Merge branch 'nd/status-show-in-progress' 2013-02-14 10:29:54 -08:00
wt-status.h status: show the branch name if possible in in-progress info 2013-02-05 08:21:02 -08: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 bulk-checkin: replace fast-import based implementation 2011-12-01 11:46:09 -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 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.