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 7f0e4f6ac2 ls-refs: ignore very long ref-prefix counts
Because each "ref-prefix" capability from the client comes in its own
pkt-line, there's no limit to the number of them that a misbehaving
client may send. We read them all into a strvec, which means the client
can waste arbitrary amounts of our memory by just sending us "ref-prefix
foo" over and over.

One possible solution is to just drop the connection when the limit is
reached. If we set it high enough, then only misbehaving or malicious
clients would hit it. But "high enough" is vague, and it's unfriendly if
we guess wrong and a legitimate client hits this.

But we can do better. Since supporting the ref-prefix capability is
optional anyway, the client has to further cull the response based on
their own patterns. So we can simply ignore the patterns once we cross a
certain threshold. Note that we have to ignore _all_ patterns, not just
the ones past our limit (since otherwise we'd send too little data).

The limit here is fairly arbitrary, and probably much higher than anyone
would need in practice. It might be worth limiting it further, if only
because we check it linearly (so with "m" local refs and "n" patterns,
we do "m * n" string comparisons). But if we care about optimizing this,
an even better solution may be a more advanced data structure anyway.

I didn't bother making the limit configurable, since it's so high and
since Git should behave correctly in either case. It wouldn't be too
hard to do, but it makes both the code and documentation more complex.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-09-15 12:25:19 -07:00
.github Merge branch 'cb/ci-build-pedantic' 2021-09-10 11:46:32 -07:00
block-sha1
builtin Merge branch 'ab/serve-cleanup' into jk/reduce-malloc-in-v2-servers 2021-09-14 10:56:05 -07:00
ci Merge branch 'cb/ci-build-pedantic' 2021-09-10 11:46:32 -07:00
compat Merge branch 'rs/git-mmap-uses-malloc' 2021-09-08 13:30:27 -07:00
contrib Merge branch 'rs/xopen-reports-open-failures' 2021-09-08 13:30:32 -07:00
Documentation Merge branch 'ab/serve-cleanup' into jk/reduce-malloc-in-v2-servers 2021-09-14 10:56:05 -07:00
ewah
git-gui
gitk-git
gitweb Merge branch 'gh/gitweb-branch-sort' 2021-09-10 11:46:32 -07:00
mergetools mergetools/kdiff3: make kdiff3 work on Windows too 2021-06-08 10:26:16 +09:00
negotiator
perl Merge branch 'ab/send-email-optim' 2021-07-22 13:05:54 -07:00
po l10n: sv.po: Update Swedish translation (5230t0f0u) 2021-08-16 06:54:20 +08:00
ppc
refs Merge branch 'hn/refs-debug-empty-prefix' 2021-07-28 13:18:04 -07:00
sha1collisiondetection@855827c583
sha1dc
sha256
t ls-refs: ignore very long ref-prefix counts 2021-09-15 12:25:19 -07:00
templates
trace2 Merge branch 'es/trace2-log-parent-process-name' 2021-08-24 15:32:40 -07:00
xdiff Merge branch 'ab/pickaxe-pcre2' 2021-07-13 16:52:50 -07:00
.cirrus.yml ci: update freebsd 12 cirrus job 2021-08-12 14:00:52 -07:00
.clang-format
.editorconfig
.gitattributes
.gitignore Merge branch 'ls/subtree' 2021-05-10 16:59:47 +09:00
.gitmodules
.mailmap
.travis.yml
.tsan-suppressions
abspath.c
aclocal.m4
add-interactive.c
add-interactive.h
add-patch.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07:00
advice.c Merge branch 'ab/retire-advice-config' 2021-09-10 11:46:29 -07:00
advice.h Merge branch 'ab/retire-advice-config' 2021-09-10 11:46:29 -07:00
alias.c
alias.h
alloc.c
alloc.h
apply.c Merge branch 'jk/apply-binary-hunk-parsing-fix' 2021-08-30 16:06:04 -07:00
apply.h
archive-tar.c
archive-zip.c
archive.c archive: convert queue_directory to struct object_id 2021-08-27 14:19:00 -07:00
archive.h
attr.c *: fix typos which duplicate a word 2021-06-14 10:16:06 +09:00
attr.h *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
banned.h
base85.c
bisect.c bisect: simplify return code from bisect_checkout() 2021-07-28 10:57:37 -07:00
bisect.h
blame.c hash: provide per-algorithm null OIDs 2021-04-27 16:31:39 +09:00
blame.h
blob.c
blob.h
bloom.c Merge branch 'ah/plugleaks' 2021-05-07 12:47:41 +09:00
bloom.h
branch.c advice: remove read uses of most global advice_ variables 2021-08-25 12:07:52 -07:00
branch.h
builtin.h parallel-checkout: make it truly parallel 2021-04-19 11:57:05 -07:00
bulk-checkin.c bulk-checkin: make buffer reuse more obvious and safer 2021-06-11 13:01:22 +09:00
bulk-checkin.h
bundle.c bundle: remove "ref_list" in favor of string-list.c API 2021-07-06 12:10:17 -07:00
bundle.h bundle: remove "ref_list" in favor of string-list.c API 2021-07-06 12:10:17 -07:00
cache-tree.c Merge branch 'ds/commit-and-checkout-with-sparse-index' 2021-08-04 13:28:53 -07:00
cache-tree.h
cache.h Merge branch 'js/expand-runtime-prefix' 2021-08-24 15:32:38 -07:00
cbtree.c oidtree: a crit-bit tree for odb_loose_cache 2021-07-07 21:28:04 -07:00
cbtree.h oidtree: avoid unaligned access to crit-bit tree 2021-08-15 13:13:50 -07:00
chdir-notify.c
chdir-notify.h
check_bindir
check-builtins.sh
checkout.c
checkout.h
chunk-format.c csum-file.h: increase hashfile buffer size 2021-05-19 16:41:21 +09:00
chunk-format.h
CODE_OF_CONDUCT.md
color.c
color.h
column.c
column.h
combine-diff.c Merge branch 'ab/pickaxe-pcre2' 2021-07-13 16:52:50 -07:00
command-list.txt
commit-graph.c revision: avoid hitting packfiles when commits are in commit-graph 2021-08-09 09:51:12 -07:00
commit-graph.h revision: avoid hitting packfiles when commits are in commit-graph 2021-08-09 09:51:12 -07:00
commit-reach.c
commit-reach.h
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c advice: move advice.graftFileDeprecated squashing to commit.[ch] 2021-08-25 12:07:52 -07:00
commit.h advice: move advice.graftFileDeprecated squashing to commit.[ch] 2021-08-25 12:07:52 -07:00
common-main.c
config.c Merge branch 'js/expand-runtime-prefix' 2021-08-24 15:32:38 -07:00
config.h Merge branch 'ds/gender-neutral-doc' 2021-07-16 17:42:53 -07:00
config.mak.dev
config.mak.in
config.mak.uname Merge branch 'es/trace2-log-parent-process-name' 2021-08-24 15:32:40 -07:00
configure.ac
connect.c connect, protocol: log negotiated protocol version 2021-08-10 11:46:33 -07:00
connect.h
connected.c connected: do not sort input revisions 2021-08-09 09:51:12 -07:00
connected.h
convert.c convert: release strbuf to avoid leak 2021-07-26 12:19:20 -07:00
convert.h Merge branch 'ds/sparse-index-protections' 2021-04-30 13:50:26 +09:00
copy.c
COPYING
credential.c credential: fix leak in credential_apply_config() 2021-08-25 11:41:30 -07:00
credential.h *.h: move some *_INIT to designated initializers 2021-07-01 12:31:45 -07:00
csum-file.c use xopen() to handle fatal open(2) failures 2021-08-25 14:39:08 -07:00
csum-file.h Merge branch 'tb/midx-use-checksum' 2021-07-16 17:42:46 -07:00
ctype.c
daemon.c Merge branch 'rs/daemon-sanitize-dir-sep' 2021-04-08 13:23:26 -07:00
date.c comments: avoid using the gender of our users 2021-06-16 11:25:11 +09:00
decorate.c
decorate.h
delta-islands.c
delta-islands.h
delta.h
detect-compiler build: catch clang that identifies itself as "$VENDOR clang" 2021-08-06 13:35:37 -07:00
diff-delta.c
diff-lib.c Merge branch 'dd/diff-files-unmerged-fix' 2021-09-08 13:30:31 -07:00
diff-merges.c Revert 'diff-merges: let "-m" imply "-p"' 2021-08-09 13:52:01 -07:00
diff-merges.h diff-merges: move specific diff-index "-m" handling to diff-index 2021-05-21 09:24:14 +09:00
diff-no-index.c dir: introduce readdir_skip_dot_and_dotdot() helper 2021-05-27 14:02:37 +09:00
diff.c Merge branch 'ab/pickaxe-pcre2' 2021-08-06 12:52:15 -07:00
diff.h diff.h: move pickaxe fields together again 2021-05-11 12:47:31 +09:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c xdiff-interface: replace discard_hunk_line() with a flag 2021-05-11 12:47:31 +09:00
diffcore-rename.c Merge branch 'en/ort-perf-batch-15' 2021-08-24 15:32:39 -07:00
diffcore-rotate.c
diffcore.h merge-ort: store filepairs and filespecs in our mem_pool 2021-07-30 09:01:19 -07:00
dir-iterator.c
dir-iterator.h
dir.c use fspathhash() everywhere 2021-07-30 12:14:27 -07:00
dir.h Merge branch 'ew/many-alternate-optim' 2021-07-28 13:17:57 -07:00
editor.c advice: remove read uses of most global advice_ variables 2021-08-25 12:07:52 -07:00
entry.c checkout: make delayed checkout respect --quiet and --no-progress 2021-08-26 23:15:33 -07:00
entry.h checkout: make delayed checkout respect --quiet and --no-progress 2021-08-26 23:15:33 -07:00
environment.c environment: move strbuf into block to plug leak 2021-07-26 12:19:20 -07:00
environment.h environment: make getenv_safe() a public function 2021-01-15 13:03:45 -08:00
exec-cmd.c
exec-cmd.h
fetch-negotiator.c
fetch-negotiator.h
fetch-pack.c Merge branch 'ps/fetch-pack-load-refs-optim' 2021-08-24 15:32:41 -07:00
fetch-pack.h fetch: teach independent negotiation (no packfile) 2021-05-05 10:41:29 +09:00
fmt-merge-msg.c fmt-merge-msg: free newly allocated temporary strings when done 2021-07-26 12:19:19 -07:00
fmt-merge-msg.h
fsck.c fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW 2021-05-04 11:52:02 +09:00
fsck.h fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW 2021-05-04 11:52:02 +09:00
fsmonitor.c
fsmonitor.h
fuzz-commit-graph.c
fuzz-pack-headers.c
fuzz-pack-idx.c
generate-cmdlist.sh
generate-configlist.sh
gettext.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07:00
gettext.h
git-add--interactive.perl
git-archimport.perl
git-bisect.sh
git-compat-util.h Merge branch 'ew/mmap-failures' 2021-07-16 17:42:47 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl *: fix typos which duplicate a word 2021-06-14 10:16:06 +09:00
git-difftool--helper.sh
git-filter-branch.sh
git-instaweb.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-p4.py git-p4: fix failed submit by skip non-text data files 2021-06-28 09:49:30 -07:00
git-quiltimport.sh
git-rebase--preserve-merges.sh
git-request-pull.sh
git-send-email.perl Merge branch 'mh/send-email-reset-in-reply-to' 2021-09-10 11:46:25 -07:00
git-sh-i18n.sh
git-sh-setup.sh
git-submodule.sh Merge branch 'ar/submodule-add' 2021-08-04 13:28:52 -07:00
git-svn.perl
GIT-VERSION-GEN The first batch post 2.33 2021-08-24 15:33:23 -07:00
git-web--browse.sh
git.c Merge branch 'ps/config-env-option-with-separate-value' 2021-05-07 12:47:37 +09:00
git.rc
gpg-interface.c
gpg-interface.h
graph.c graph: improve grammar of "invalid color" error message 2021-06-15 12:54:26 +09:00
graph.h
grep.c Merge branch 'rs/grep-parser-fix' 2021-07-13 16:52:53 -07:00
grep.h
hash-lookup.c
hash-lookup.h
hash.h oidtree: avoid unaligned access to crit-bit tree 2021-08-15 13:13:50 -07:00
hashmap.c
hashmap.h
help.c help.c: help.autocorrect=prompt waits for user action 2021-08-14 11:20:49 -07:00
help.h
hex.c hex: print objects using the hash algorithm member 2021-04-27 16:31:39 +09:00
http-backend.c upload-pack: document and rename --advertise-refs 2021-08-05 08:59:37 -07:00
http-fetch.c
http-push.c http: rename CURLOPT_FILE to CURLOPT_WRITEDATA 2021-07-30 16:01:54 -07:00
http-walker.c http: rename CURLOPT_FILE to CURLOPT_WRITEDATA 2021-07-30 16:01:54 -07:00
http.c http: rename CURLOPT_FILE to CURLOPT_WRITEDATA 2021-07-30 16:01:54 -07:00
http.h http: drop support for curl < 7.19.3 and < 7.17.0 (again) 2021-07-30 16:00:10 -07:00
ident.c
imap-send.c Merge branch 'ab/http-drop-old-curl' 2021-08-24 15:32:36 -07:00
INSTALL
iterator.h
json-writer.c *.c *_init(): define in terms of corresponding *_INIT macro 2021-07-01 12:32:22 -07:00
json-writer.h *.h: move some *_INIT to designated initializers 2021-07-01 12:31:45 -07:00
khash.h khash: clarify that allocations never fail 2021-07-06 13:07:50 -07:00
kwset.c
kwset.h
levenshtein.c
levenshtein.h
LGPL-2.1
line-log.c
line-log.h
line-range.c
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c help: fix small typo in error message 2021-05-21 07:52:10 +09:00
list-objects-filter-options.h list-objects: implement object type filter 2021-04-19 14:09:11 -07:00
list-objects-filter.c list-objects: implement object type filter 2021-04-19 14:09:11 -07:00
list-objects-filter.h list-objects: support filtering by tag and commit 2021-04-12 09:35:50 -07:00
list-objects.c list-objects.c: rename "traverse_trees_and_blobs" to "traverse_non_commits" 2021-08-12 13:08:30 -07:00
list-objects.h
list.h
ll-merge.c ll_union_merge(): rename path_unused parameter 2021-06-11 12:37:33 +09:00
ll-merge.h
lockfile.c
lockfile.h
log-tree.c load_ref_decorations(): fix decoration with tags 2021-07-14 10:11:02 -07:00
log-tree.h
ls-refs.c ls-refs: ignore very long ref-prefix counts 2021-09-15 12:25:19 -07:00
ls-refs.h serve.[ch]: don't pass "struct strvec *keys" to commands 2021-08-05 08:59:37 -07:00
mailinfo.c Merge branch 'ar/mailinfo-memcmp-to-skip-prefix' 2021-07-08 13:15:03 -07:00
mailinfo.h am: learn to process quoted lines that ends with CRLF 2021-05-10 15:06:22 +09:00
mailmap.c Merge branch 'ab/mailmap-leakfix' 2021-09-10 11:46:28 -07:00
mailmap.h
Makefile Merge branch 'sg/make-fix-ar-invocation' 2021-09-03 13:49:30 -07:00
match-trees.c Always use oidread to read into struct object_id 2021-04-27 16:31:38 +09:00
mem-pool.c
mem-pool.h
merge-blobs.c
merge-blobs.h
merge-ort-wrappers.c merge(s): apply consistent punctuation to "up to date" messages 2021-05-03 14:14:56 +09:00
merge-ort-wrappers.h
merge-ort.c Merge branch 'en/ort-perf-batch-15' 2021-08-24 15:32:39 -07:00
merge-ort.h merge-ort: avoid accidental API mis-use 2021-05-20 15:40:39 +09:00
merge-recursive.c merge-recursive: use fspathcmp() in path_hashmap_cmp() 2021-08-30 09:44:12 -07:00
merge-recursive.h
merge.c dir.[ch]: replace dir_init() with DIR_INIT 2021-07-01 12:32:22 -07:00
mergesort.c
mergesort.h
midx.c Merge branch 'ab/attribute-format' 2021-07-28 13:17:59 -07:00
midx.h pack-revindex: write multi-pack reverse indexes 2021-04-01 13:07:37 -07:00
name-hash.c Merge branch 'ds/sparse-index-protections' 2021-04-30 13:50:26 +09:00
notes-cache.c
notes-cache.h
notes-merge.c advice: remove read uses of most global advice_ variables 2021-08-25 12:07:52 -07:00
notes-merge.h
notes-utils.c
notes-utils.h
notes.c hash: provide per-algorithm null OIDs 2021-04-27 16:31:39 +09:00
notes.h
object-file.c Merge branch 'cb/many-alternate-optim-fixup' 2021-08-11 12:36:17 -07:00
object-name.c advice: remove read uses of most global advice_ variables 2021-08-25 12:07:52 -07:00
object-store.h object-store.h: teach for_each_packed_object to ignore kept packs 2021-08-29 23:23:39 -07:00
object.c Merge branch 'jk/log-decorate-optim' 2021-07-28 13:17:58 -07:00
object.h builtin/pack-objects.c: remove duplicate hash lookup 2021-08-29 23:25:43 -07:00
oid-array.c
oid-array.h
oidmap.c
oidmap.h
oidset.c
oidset.h
oidtree.c oidtree: avoid unaligned access to crit-bit tree 2021-08-15 13:13:50 -07:00
oidtree.h oidtree: a crit-bit tree for odb_loose_cache 2021-07-07 21:28:04 -07:00
pack-bitmap-write.c
pack-bitmap.c Merge branch 'jk/check-pack-valid-before-opening-bitmap' 2021-08-02 14:06:43 -07:00
pack-bitmap.h Merge branch 'ps/rev-list-object-type-filter' 2021-05-07 12:47:41 +09:00
pack-check.c csum-file: introduce checksum_valid() 2021-06-28 20:36:17 -07:00
pack-objects.c
pack-objects.h pack-objects: move static inline from a header to the sole consumer 2021-05-27 12:14:41 +09:00
pack-revindex.c Merge branch 'tb/reverse-midx' 2021-04-08 13:23:25 -07:00
pack-revindex.h pack-revindex: read multi-pack reverse indexes 2021-04-01 13:07:37 -07:00
pack-write.c use xopen() to handle fatal open(2) failures 2021-08-25 14:39:08 -07:00
pack.h Merge branch 'tb/reverse-midx' 2021-04-08 13:23:25 -07:00
packfile.c object-store.h: teach for_each_packed_object to ignore kept packs 2021-08-29 23:23:39 -07:00
packfile.h
pager.c pager: avoid setting COLUMNS when we're guessing its value 2021-06-28 10:42:10 -07:00
parallel-checkout.c parallel-checkout: send the new object_id algo field to the workers 2021-05-18 05:38:54 +09:00
parallel-checkout.h parallel-checkout: support progress displaying 2021-04-19 11:57:05 -07:00
parse-options-cb.c hash: provide per-algorithm null OIDs 2021-04-27 16:31:39 +09:00
parse-options.c parse-options: don't complete option aliases by default 2021-07-16 11:31:44 -07:00
parse-options.h
patch-delta.c
patch-ids.c
patch-ids.h
path.c interpolate_path(): allow specifying paths relative to the runtime prefix 2021-07-26 12:17:16 -07:00
path.h
pathspec.c pathspec: stop calling ensure_full_index 2021-07-29 12:36:34 -07:00
pathspec.h Merge branch 'ds/gender-neutral-doc' 2021-07-16 17:42:53 -07:00
pkt-line.c Merge branch 'dl/packet-read-response-end-fix' 2021-07-28 13:17:56 -07:00
pkt-line.h
preload-index.c
pretty.c logmsg_reencode(): warn when iconv() fails 2021-08-27 12:43:22 -07:00
pretty.h log: avoid loading decorations for userformats that don't need it 2021-06-28 20:30:17 -07:00
prio-queue.c
prio-queue.h
progress.c
progress.h
promisor-remote.c Merge branch 'jt/partial-clone-submodule-1' 2021-07-16 17:42:53 -07:00
promisor-remote.h promisor-remote: support per-repository config 2021-06-28 09:57:42 -07:00
prompt.c
prompt.h
protocol-caps.c Merge branch 'ab/serve-cleanup' into jk/reduce-malloc-in-v2-servers 2021-09-14 10:56:05 -07:00
protocol-caps.h serve.[ch]: don't pass "struct strvec *keys" to commands 2021-08-05 08:59:37 -07:00
protocol.c connect, protocol: log negotiated protocol version 2021-08-10 11:46:33 -07:00
protocol.h
prune-packed.c
prune-packed.h
quote.c ref-filter: --format=%(raw) support --perl 2021-07-26 12:01:25 -07:00
quote.h Merge branch 'zh/ref-filter-raw-data' 2021-08-24 15:32:37 -07:00
range-diff.c Merge branch 'jk/range-diff-fixes' 2021-08-30 16:06:05 -07:00
range-diff.h
reachable.c object.h: add lookup_object_by_type() function 2021-06-28 20:30:18 -07:00
reachable.h
read-cache.c Merge branch 'ah/plugleaks' 2021-08-04 13:28:52 -07:00
README.md
rebase-interactive.c
rebase-interactive.h
rebase.c
rebase.h
ref-filter.c Merge branch 'zh/ref-filter-raw-data' 2021-08-24 15:32:37 -07:00
ref-filter.h ref-filter: add %(rest) atom 2021-07-26 12:01:26 -07:00
reflog-walk.c
reflog-walk.h
refs.c Merge branch 'hn/refs-iterator-peel-returns-boolean' 2021-07-16 17:42:49 -07:00
refs.h
refspec.c
refspec.h
RelNotes The first batch post 2.33 2021-08-24 15:33:23 -07:00
remote-curl.c Merge branch 'ab/http-drop-old-curl' 2021-08-24 15:32:36 -07:00
remote.c Merge branch 'cb/remote-ndebug-fix' 2021-09-10 11:46:30 -07:00
remote.h
replace-object.c
replace-object.h
repo-settings.c sparse-index: add index.sparse config option 2021-03-30 12:57:47 -07:00
repository.c promisor-remote: support per-repository config 2021-06-28 09:57:42 -07:00
repository.h promisor-remote: support per-repository config 2021-06-28 09:57:42 -07:00
rerere.c dir: introduce readdir_skip_dot_and_dotdot() helper 2021-05-27 14:02:37 +09:00
rerere.h
reset.c reset: clear_unpack_trees_porcelain to plug leak 2021-07-26 12:19:21 -07:00
reset.h
resolve-undo.c Merge branch 'ds/sparse-index-protections' 2021-04-30 13:50:26 +09:00
resolve-undo.h
revision.c revision: avoid hitting packfiles when commits are in commit-graph 2021-08-09 09:51:12 -07:00
revision.h revision: separate walk and unsorted flags 2021-08-05 09:37:28 -07:00
run-command.c Merge branch 'ab/retire-advice-config' 2021-09-10 11:46:29 -07:00
run-command.h Merge branch 'jt/partial-clone-submodule-1' 2021-07-16 17:42:53 -07:00
SECURITY.md
send-pack.c Merge branch 'jt/push-negotiation-fixes' 2021-08-24 15:32:40 -07:00
send-pack.h
sequencer.c Merge branch 'ab/retire-advice-config' 2021-09-10 11:46:29 -07:00
sequencer.h sequencer: advise if skipping cherry-picked commit 2021-08-30 16:35:36 -07:00
serve.c serve: drop "keys" strvec 2021-09-15 12:25:19 -07:00
serve.h serve.[ch]: remove "serve_options", split up --advertise-refs code 2021-08-05 08:59:37 -07:00
server-info.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07:00
setup.c Merge branch 'jt/partial-clone-submodule-1' 2021-07-16 17:42:53 -07:00
sh-i18n--envsubst.c builtins + test helpers: use return instead of exit() in cmd_* 2021-06-09 09:15:58 +09:00
sha1dc_git.c
sha1dc_git.h
shallow.c
shallow.h
shell.c builtins + test helpers: use return instead of exit() in cmd_* 2021-06-09 09:15:58 +09:00
shortlog.h
sideband.c sideband: don't lose clear-to-eol at packet boundary 2021-06-17 14:11:36 +09:00
sideband.h
sigchain.c
sigchain.h
simple-ipc.h simple-ipc: correct ifdefs when NO_PTHREADS is defined 2021-05-21 07:55:00 +09:00
sparse-index.c sparse-index: copy dir_hash in ensure_full_index() 2021-08-30 09:24:12 -07:00
sparse-index.h sparse-index: expand_to_path() 2021-04-14 13:47:54 -07:00
split-index.c split-index: use oideq instead of memcmp to compare object_id's 2021-06-15 12:07:56 +09:00
split-index.h
stable-qsort.c
strbuf.c *.c *_init(): define in terms of corresponding *_INIT macro 2021-07-01 12:32:22 -07:00
strbuf.h Merge branch 'ab/attribute-format' 2021-07-28 13:17:59 -07:00
streaming.c streaming.c: move {open,close,read} from vtable to "struct git_istream" 2021-05-06 12:56:10 +09:00
streaming.h
string-list.c string-list.[ch]: add a string_list_init_{nodup,dup}() 2021-07-01 12:32:22 -07:00
string-list.h string-list.[ch]: add a string_list_init_{nodup,dup}() 2021-07-01 12:32:22 -07:00
strmap.c *.c *_init(): define in terms of corresponding *_INIT macro 2021-07-01 12:32:22 -07:00
strmap.h
strvec.c *.c *_init(): define in terms of corresponding *_INIT macro 2021-07-01 12:32:22 -07:00
strvec.h
sub-process.c
sub-process.h
submodule-config.c hash: provide per-algorithm null OIDs 2021-04-27 16:31:39 +09:00
submodule-config.h
submodule.c run-command: refactor subprocess env preparation 2021-06-28 09:58:01 -07:00
submodule.h *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
symlinks.c
tag.c
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c
tmp-objdir.h
trace2.c tr2: log parent process name 2021-07-22 13:35:20 -07:00
trace2.h tr2: log parent process name 2021-07-22 13:35:20 -07:00
trace.c
trace.h
trailer.c trailer: add new .cmd config option 2021-05-04 12:09:43 +09:00
trailer.h
transport-helper.c transport: use designated initializers 2021-08-05 08:59:37 -07:00
transport-internal.h transport: rename "fetch" in transport_vtable to "fetch_refs" 2021-08-05 08:59:36 -07:00
transport.c transport: use designated initializers 2021-08-05 08:59:37 -07:00
transport.h fetch: teach independent negotiation (no packfile) 2021-05-05 10:41:29 +09:00
tree-diff.c hash: provide per-algorithm null OIDs 2021-04-27 16:31:39 +09:00
tree-walk.c Always use oidread to read into struct object_id 2021-04-27 16:31:38 +09:00
tree-walk.h
tree.c
tree.h
unicode-width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unix-stream-server.c
unix-stream-server.h
unpack-trees.c Merge branch 'ab/retire-advice-config' 2021-09-10 11:46:29 -07:00
unpack-trees.h
upload-pack.c Merge branch 'ab/serve-cleanup' into jk/reduce-malloc-in-v2-servers 2021-09-14 10:56:05 -07:00
upload-pack.h serve.[ch]: remove "serve_options", split up --advertise-refs code 2021-08-05 08:59:37 -07:00
url.c
url.h
urlmatch.c
urlmatch.h
usage.c usage.c: don't copy/paste the same comment three times 2021-04-13 14:56:28 -07:00
userdiff.c Merge branch 'uk/userdiff-php-enum' 2021-09-10 11:46:27 -07:00
userdiff.h userdiff: add and use for_each_userdiff_driver() 2021-04-08 12:19:10 -07:00
utf8.c t0060: test ntfs/hfs-obscured dotfiles 2021-05-04 11:52:02 +09:00
utf8.h t0060: test ntfs/hfs-obscured dotfiles 2021-05-04 11:52:02 +09:00
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c lookup_unknown_object(): take a repository argument 2021-04-13 13:18:46 -07:00
walker.h
wildmatch.c
wildmatch.h
worktree.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07:00
worktree.h
wrap-for-bin.sh
wrapper.c xopen: explicitly report creation failures 2021-08-25 14:39:06 -07:00
write-or-die.c fsync(): be prepared to see EINTR 2021-06-05 22:13:40 +09:00
ws.c
wt-status.c advice: remove read uses of most global advice_ variables 2021-08-25 12:07:52 -07:00
wt-status.h status: skip sparse-checkout percentage with sparse-index 2021-07-14 13:42:49 -07:00
xdiff-interface.c Merge branch 'ab/pickaxe-pcre2' 2021-07-13 16:52:50 -07:00
xdiff-interface.h xdiff-interface: replace discard_hunk_line() with a flag 2021-05-11 12:47:31 +09:00
zlib.c

Build status

Git - fast, scalable, distributed revision control system

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.

Many Git online resources are accessible from https://git-scm.com/ including full documentation and Git related tools.

See Documentation/gittutorial.txt to get started, then see Documentation/giteveryday.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).

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 https://lore.kernel.org/git/, http://marc.info/?l=git and other archival sites.

Issues which are security relevant should be disclosed privately to the Git Security mailing list git-security@googlegroups.com.

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.

The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (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