Git with broken hash generation to generate collisions between object IDs. Don't use this! https://undefinedbehavior.de/posts/commit-vandalism/
Go to file
Derrick Stolee 71f82d032f sparse-index: expand_to_path()
Some users of the index API have a specific path they are looking for,
but choose to use index_file_exists() to rely on the name-hash hashtable
instead of doing binary search with index_name_pos(). These users only
need to know a yes/no answer, not a position within the cache array.

When the index is sparse, the name-hash hash table does not contain the
full list of paths within sparse directories. It _does_ contain the
directory names for the sparse-directory entries.

Create a helper function, expand_to_path(), for intended use with the
name-hash hashtable functions. The integration with name-hash.c will
follow in a later change.

The solution here is to use ensure_full_index() when we determine that
the requested path is within a sparse directory entry. This will
populate the name-hash hashtable as the index is recomputed from
scratch.

There may be cases where the caller is trying to find an untracked path
that is not in the index but also is not within a sparse directory
entry. We want to minimize the overhead for these requests. If we used
index_name_pos() to find the insertion order of the path, then we could
determine from that position if a sparse-directory exists. (In fact,
just calling index_name_pos() in that case would lead to expanding the
index to a full index.) However, this takes O(log N) time where N is the
number of cache entries.

To keep the performance of this call based mostly on the input string,
use index_file_exists() to look for the ancestors of the path. Using the
heuristic that a sparse directory is likely to have a small number of
parent directories, we start from the bottom and build up. Use a string
buffer to allow mutating the path name to terminate after each slash for
each hashset test.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-04-14 13:47:54 -07:00
.github Merge branch 'tb/ci-run-cocci-with-18.04' into maint 2021-02-11 13:57:36 -08:00
block-sha1
builtin update-index: ensure full index 2021-04-14 13:47:29 -07:00
ci Merge branch 'tb/pack-revindex-on-disk' 2021-02-12 14:21:04 -08:00
compat Merge branch 'jk/open-returns-eintr' 2021-03-04 15:34:45 -08:00
contrib Merge branch 'jk/complete-branch-force-delete' 2021-02-12 14:21:04 -08:00
Documentation sparse-index: API protection strategy 2021-04-14 13:45:34 -07:00
ewah
git-gui Merge https://github.com/prati0100/git-gui 2021-03-04 12:38:50 -08:00
gitk-git
gitweb gitweb/Makefile: conditionally include ../GIT-VERSION-FILE 2020-12-08 16:56:56 -08:00
mergetools mergetools/vimdiff: add vimdiff1 merge tool variant 2021-02-23 11:37:13 -08:00
negotiator
perl
po git-gui: fix typo in russian locale 2021-02-02 23:50:31 +05:30
ppc
refs refs/files-backend: don't peek into struct lock_file 2021-01-06 13:53:32 -08:00
sha1collisiondetection@855827c583
sha1dc
sha256
t p2000: add sparse-index repos 2021-03-30 12:57:49 -07:00
templates
trace2
vcs-svn
xdiff
.cirrus.yml
.clang-format
.editorconfig
.gitattributes CoC: explicitly take any whitespace breakage 2021-01-04 09:44:49 -08:00
.gitignore Merge branch 'fc/random-cleanup' 2020-12-08 15:11:21 -08:00
.gitmodules
.mailmap
.travis.yml ci: remove GETTEXT_POISON jobs 2021-01-21 15:50:00 -08:00
.tsan-suppressions
abspath.c abspath: add a function to resolve paths with missing components 2020-12-12 23:35:47 -08:00
aclocal.m4
add-interactive.c Merge branch 'js/add-i-color-fix' 2020-12-08 15:11:17 -08:00
add-interactive.h
add-patch.c Merge branch 'js/add-i-color-fix' 2020-12-08 15:11:17 -08:00
advice.c
advice.h
alias.c
alias.h
alloc.c
alloc.h
apply.c Merge branch 'ab/unreachable-break' 2020-12-18 15:15:18 -08:00
apply.h
archive-tar.c
archive-zip.c
archive.c tree.h API: simplify read_tree_recursive() signature 2021-03-20 16:09:26 -07:00
archive.h
attr.c *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
attr.h *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
banned.h
base85.c
bisect.c Merge branch 'js/params-vs-args' 2021-02-25 16:43:32 -08:00
bisect.h
blame.c
blame.h
blob.c
blob.h
bloom.c
bloom.h
branch.c
branch.h
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle.c bundle: arguments can be read from stdin 2021-01-11 21:50:41 -08:00
bundle.h
cache-tree.c sparse-index: loose integration with cache_tree_verify() 2021-03-30 12:57:48 -07:00
cache-tree.h cache-tree: extract subtree_pos() 2021-01-23 17:14:07 -08:00
cache.h cache: move ensure_full_index() to cache.h 2021-04-14 13:46:41 -07:00
chdir-notify.c
chdir-notify.h
check_bindir
check-builtins.sh
checkout.c
checkout.h
chunk-format.c chunk-format: restore duplicate chunk checks 2021-02-18 13:38:16 -08:00
chunk-format.h chunk-format: create read chunk API 2021-02-18 13:38:16 -08:00
CODE_OF_CONDUCT.md CoC: update to version 2.0 + local changes 2021-01-13 17:45:04 -08:00
color.c
color.h
column.c
column.h
combine-diff.c
command-list.txt mailmap doc: create a new "gitmailmap(5)" man page 2021-01-12 14:04:39 -08:00
commit-graph.c Merge branch 'ds/chunked-file-api' 2021-03-01 14:02:57 -08:00
commit-graph.h commit-reach: use corrected commit dates in paint_down_to_common() 2021-01-18 16:21:18 -08:00
commit-reach.c commit-reach: stale commits may prune generation further 2021-02-22 13:34:34 -08:00
commit-reach.h commit-graph: return 64-bit generation number 2021-01-18 16:21:18 -08:00
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c Merge branch 'bc/signed-objects-with-both-hashes' 2021-02-22 16:12:42 -08:00
commit.h Merge branch 'bc/signed-objects-with-both-hashes' 2021-02-22 16:12:42 -08:00
common-main.c
config.c Merge branch 'ak/config-bad-bool-error' 2021-02-17 17:21:43 -08:00
config.h Merge branch 'ps/config-env-pairs' 2021-01-25 14:19:19 -08:00
config.mak.dev
config.mak.in
config.mak.uname Merge branch 'jk/open-returns-eintr' 2021-03-04 15:34:45 -08:00
configure.ac Remove support for v1 of the PCRE library 2021-01-23 21:15:43 -08:00
connect.c Merge branch 'jt/clone-unborn-head' 2021-02-17 17:21:40 -08:00
connect.h
connected.c
connected.h
convert.c *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
convert.h *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
copy.c
COPYING
credential.c
credential.h
csum-file.c
csum-file.h
ctype.c
daemon.c
date.c
decorate.c
decorate.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
delta-islands.c
delta-islands.h
delta.h
detect-compiler
diff-delta.c
diff-lib.c
diff-merges.c diff-merges: add '--diff-merges=1' as synonym for 'first-parent' 2020-12-21 13:47:32 -08:00
diff-merges.h diff-merges: get rid of now empty diff_merges_init_revs() 2020-12-21 13:47:31 -08:00
diff-no-index.c
diff.c Merge branch 'jc/diffcore-rotate' 2021-02-25 16:43:30 -08:00
diff.h Merge branch 'jc/diffcore-rotate' 2021-02-25 16:43:30 -08:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c diffcore-rename: guide inexact rename detection based on basenames 2021-02-15 18:02:16 -08:00
diffcore-rotate.c diff: --{rotate,skip}-to=<path> 2021-02-16 09:30:42 -08:00
diffcore.h diff: --{rotate,skip}-to=<path> 2021-02-16 09:30:42 -08:00
dir-iterator.c
dir-iterator.h
dir.c dir: ensure full index 2021-04-14 13:47:32 -07:00
dir.h *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
editor.c
entry.c entry: ensure full index 2021-04-14 13:47:35 -07:00
environment.c config: allow specifying config entries via envvar pairs 2021-01-15 13:03:45 -08: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 'jt/transfer-fsck-across-packs' 2021-03-01 14:02:57 -08:00
fetch-pack.h
fmt-merge-msg.c Merge branch 'bc/signed-objects-with-both-hashes' 2021-02-22 16:12:42 -08:00
fmt-merge-msg.h
fsck.c Merge branch 'jt/transfer-fsck-across-packs' 2021-03-01 14:02:57 -08:00
fsck.h Merge branch 'jt/transfer-fsck-across-packs' 2021-03-01 14:02:57 -08:00
fsmonitor.c Merge branch 'jh/fsmonitor-prework' 2021-03-01 14:02:56 -08:00
fsmonitor.h fsmonitor: log invocation of FSMonitor hook to trace2 2021-02-16 17:14:34 -08:00
fuzz-commit-graph.c
fuzz-pack-headers.c
fuzz-pack-idx.c
generate-cmdlist.sh
generate-configlist.sh
gettext.c Merge branch 'ab/detox-gettext-tests' 2021-02-10 14:48:33 -08:00
gettext.h tests: remove support for GIT_TEST_GETTEXT_POISON 2021-01-21 15:50:01 -08:00
git-add--interactive.perl Merge branch 'js/add-i-color-fix' 2020-12-08 15:11:17 -08:00
git-archimport.perl
git-bisect.sh bisect--helper: reimplement bisect_skip shell function in C 2021-02-03 14:52:09 -08:00
git-compat-util.h Merge branch 'jk/open-returns-eintr' 2021-03-04 15:34:45 -08:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh mergetool: break setup_tool out into separate initialization function 2021-02-09 14:09:16 -08:00
git-filter-branch.sh
git-instaweb.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh Merge branch 'sh/mergetool-hideresolved' 2021-02-17 17:21:41 -08:00
git-mergetool.sh mergetool: add per-tool support and overrides for the hideResolved flag 2021-02-09 14:09:16 -08:00
git-p4.py Merge branch 'dl/p4-encode-after-kw-expansion' into maint 2021-02-08 14:05:54 -08:00
git-quiltimport.sh
git-rebase--preserve-merges.sh
git-request-pull.sh
git-send-email.perl
git-sh-i18n.sh tests: remove support for GIT_TEST_GETTEXT_POISON 2021-01-21 15:50:01 -08:00
git-sh-setup.sh
git-submodule.sh
git-svn.perl
GIT-VERSION-GEN Git 2.31-rc1 2021-03-02 22:41:13 -08:00
git-web--browse.sh
git.c Merge branch 'tb/precompose-prefix-too' 2021-02-12 14:21:04 -08:00
git.rc
gpg-interface.c gpg-interface: remove other signature headers before verifying 2021-02-10 23:35:42 -08:00
gpg-interface.h gpg-interface: improve interface for parsing tags 2021-02-10 23:35:42 -08:00
graph.c
graph.h
grep.c Merge branch 'ab/grep-pcre-invalid-utf8' 2021-02-10 14:48:33 -08:00
grep.h Merge branch 'ab/grep-pcre-invalid-utf8' 2021-02-10 14:48:33 -08:00
hash-lookup.c oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
hash-lookup.h oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
hash.h
hashmap.c
hashmap.h
help.c
help.h
hex.c
http-backend.c
http-fetch.c http-fetch: allow custom index-pack args 2021-02-22 12:07:40 -08:00
http-push.c
http-walker.c
http.c http: allow custom index-pack args 2021-02-22 12:07:40 -08:00
http.h http: allow custom index-pack args 2021-02-22 12:07:40 -08:00
ident.c
imap-send.c
INSTALL doc: mention Python 3.x supports 2020-12-14 15:01:03 -08:00
iterator.h
json-writer.c
json-writer.h
khash.h
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
list-objects-filter-options.h list_objects_filter_options: introduce 'list_object_filter_config_name' 2020-08-03 18:03:24 -07:00
list-objects-filter.c object-name.c: rename from sha1-name.c 2021-01-04 13:01:55 -08:00
list-objects-filter.h
list-objects.c
list-objects.h
list.h
ll-merge.c
ll-merge.h
lockfile.c
lockfile.h
log-tree.c Merge branch 'ab/diff-deferred-free' 2021-02-22 16:12:43 -08:00
log-tree.h
ls-refs.c Merge branch 'jt/clone-unborn-head' 2021-02-17 17:21:40 -08:00
ls-refs.h ls-refs: report unborn targets of symrefs 2021-02-05 13:49:53 -08:00
mailinfo.c
mailinfo.h
mailmap.c mailmap: only look for .mailmap in work tree 2021-02-10 13:34:51 -08:00
mailmap.h shortlog: remove unused(?) "repo-abbrev" feature 2021-01-12 14:04:42 -08:00
Makefile sparse-index: add guard to ensure full index 2021-03-30 12:57:45 -07:00
match-trees.c
mem-pool.c
mem-pool.h
merge-blobs.c
merge-blobs.h
merge-ort-wrappers.c
merge-ort-wrappers.h
merge-ort.c merge-ort: call diffcore_rename() directly 2021-02-15 18:02:16 -08:00
merge-ort.h merge-ort: implement merge_incore_recursive() 2020-12-16 21:56:39 -08:00
merge-recursive.c merge-recursive: ensure full index 2021-04-14 13:47:37 -07:00
merge-recursive.h
merge.c
mergesort.c
mergesort.h mergesort: rename it to llist_mergesort() 2012-04-17 11:07:01 -07:00
midx.c Merge branch 'ds/chunked-file-api' 2021-03-01 14:02:57 -08:00
midx.h
name-hash.c name-hash: don't add directories to name_hash 2021-04-14 13:47:51 -07:00
notes-cache.c
notes-cache.h
notes-merge.c
notes-merge.h
notes-utils.c
notes-utils.h
notes.c
notes.h
object-file.c hash-lookup: rename from sha1-lookup 2021-01-04 13:01:55 -08:00
object-name.c object-name.c: rename from sha1-name.c 2021-01-04 13:01:55 -08:00
object-store.h packfile: prepare for the existence of '*.rev' files 2021-01-25 18:32:43 -08:00
object.c bundle: lost objects when removing duplicate pendings 2021-01-11 21:50:41 -08:00
object.h
oid-array.c oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
oid-array.h
oidmap.c
oidmap.h
oidset.c
oidset.h
pack-bitmap-write.c oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
pack-bitmap.c rev-list: add --disk-usage option for calculating disk usage 2021-02-11 09:57:55 -08:00
pack-bitmap.h rev-list: add --disk-usage option for calculating disk usage 2021-02-11 09:57:55 -08:00
pack-check.c
pack-objects.c
pack-objects.h
pack-revindex.c pack-revindex: ensure that on-disk reverse indexes are given precedence 2021-01-25 18:32:44 -08:00
pack-revindex.h pack-revindex: ensure that on-disk reverse indexes are given precedence 2021-01-25 18:32:44 -08:00
pack-write.c Merge branch 'jt/transfer-fsck-across-packs' 2021-03-01 14:02:57 -08:00
pack.h Merge branch 'jt/transfer-fsck-across-packs' 2021-03-01 14:02:57 -08:00
packfile.c packfile: prepare for the existence of '*.rev' files 2021-01-25 18:32:43 -08:00
packfile.h packfile: prepare for the existence of '*.rev' files 2021-01-25 18:32:43 -08:00
pager.c pager: refactor wait_for_pager() function 2021-02-01 21:15:58 -08:00
parse-options-cb.c
parse-options.c MacOS: precompose_argv_prefix() 2021-02-03 14:09:37 -08:00
parse-options.h parse-options: format argh like error messages 2021-01-06 15:10:27 -08:00
patch-delta.c
patch-ids.c Merge branch 'jk/log-cherry-pick-duplicate-patches' into maint 2021-02-05 16:31:28 -08:00
patch-ids.h patch-ids: handle duplicate hashmap entries 2021-01-12 11:13:32 -08:00
path.c
path.h
pathspec.c pathspec: ensure full index 2021-04-14 13:47:40 -07:00
pathspec.h *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
pkt-line.c
pkt-line.h
preload-index.c preload-index: log the number of lstat calls to trace2 2021-02-16 17:14:34 -08:00
pretty.c Merge branch 'hv/trailer-formatting' 2021-03-01 14:02:58 -08:00
pretty.h pretty.c: capture invalid trailer argument 2021-02-15 16:48:38 -08:00
prio-queue.c
prio-queue.h
progress.c
progress.h
promisor-remote.c
promisor-remote.h
prompt.c
prompt.h
protocol.c
protocol.h
prune-packed.c
prune-packed.h
quote.c quote: make sq_dequote_step() a public function 2021-01-12 12:03:18 -08:00
quote.h quote: make sq_dequote_step() a public function 2021-01-12 12:03:18 -08:00
range-diff.c Merge branch 'js/range-diff-one-side-only' 2021-02-17 17:21:41 -08:00
range-diff.h Merge branch 'js/range-diff-one-side-only' 2021-02-17 17:21:41 -08:00
reachable.c
reachable.h
read-cache.c read-cache: ensure full index 2021-04-14 13:47:42 -07:00
README.md
rebase-interactive.c
rebase-interactive.h
rebase.c
rebase.h
ref-filter.c Merge branch 'hv/trailer-formatting' 2021-03-01 14:02:58 -08:00
ref-filter.h branch: sort detached HEAD based on a flag 2021-01-07 15:13:21 -08:00
reflog-walk.c
reflog-walk.h
refs.c Merge branch 'tb/ls-refs-optim' 2021-02-05 16:40:45 -08:00
refs.h Merge branch 'tb/ls-refs-optim' 2021-02-05 16:40:45 -08:00
refspec.c Merge branch 'fc/atmark-in-refspec' 2020-12-14 10:21:36 -08:00
refspec.h
RelNotes Prepare for 2.30.1 2021-02-05 16:31:28 -08:00
remote-curl.c
remote.c Merge branch 'nk/refspecs-negative-fix' 2020-12-23 13:59:46 -08:00
remote.h Merge branch 'jt/clone-unborn-head' 2021-02-17 17:21:40 -08:00
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 sparse-index: add guard to ensure full index 2021-03-30 12:57:45 -07:00
repository.h sparse-index: add index.sparse config option 2021-03-30 12:57:47 -07:00
rerere.c rerere: use strmap to store rerere directories 2021-01-28 11:26:20 -08:00
rerere.h
reset.c
reset.h
resolve-undo.c resolve-undo: ensure full index 2021-04-14 13:47:45 -07:00
resolve-undo.h
revision.c revision: ensure full index 2021-04-14 13:47:48 -07:00
revision.h Merge branch 'so/log-diff-merge' 2021-02-05 16:40:44 -08:00
run-command.c pager: properly log pager exit code when signalled 2021-02-01 21:15:58 -08:00
run-command.h run-command: document use_shell option 2021-01-22 14:21:32 -08:00
send-pack.c Merge branch 'js/trace2-session-id' 2020-12-08 15:11:20 -08:00
send-pack.h
sequencer.c Merge branch 'ds/more-index-cleanups' 2021-02-10 14:48:33 -08:00
sequencer.h
serve.c ls-refs: report unborn targets of symrefs 2021-02-05 13:49:53 -08:00
serve.h
server-info.c
setup.c
sh-i18n--envsubst.c
sha1dc_git.c
sha1dc_git.h
shallow.c commit_graft_pos(): take an oid instead of a bare hash 2021-01-28 11:21:07 -08:00
shallow.h
shell.c
shortlog.h shortlog: remove unused(?) "repo-abbrev" feature 2021-01-12 14:04:42 -08:00
sideband.c
sideband.h
sigchain.c
sigchain.h
sparse-index.c sparse-index: expand_to_path() 2021-04-14 13:47:54 -07:00
sparse-index.h sparse-index: expand_to_path() 2021-04-14 13:47:54 -07:00
split-index.c
split-index.h
stable-qsort.c
strbuf.c
strbuf.h
streaming.c
streaming.h
string-list.c
string-list.h
strmap.c
strmap.h strmap: make callers of strmap_remove() to call it in void context 2020-12-15 15:30:44 -08:00
strvec.c
strvec.h
sub-process.c
sub-process.h
submodule-config.c
submodule-config.h
submodule.c *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
submodule.h *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
symlinks.c
tag.c gpg-interface: improve interface for parsing tags 2021-02-10 23:35:42 -08:00
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c packfile: prepare for the existence of '*.rev' files 2021-01-25 18:32:43 -08:00
tmp-objdir.h
trace2.c
trace2.h
trace.c
trace.h
trailer.c pretty format %(trailers): add a "key_value_separator" 2020-12-09 14:16:42 -08:00
trailer.h pretty format %(trailers): add a "key_value_separator" 2020-12-09 14:16:42 -08:00
transport-helper.c connect, transport: encapsulate arg in struct 2021-02-05 13:49:54 -08:00
transport-internal.h connect, transport: encapsulate arg in struct 2021-02-05 13:49:54 -08:00
transport.c connect, transport: encapsulate arg in struct 2021-02-05 13:49:54 -08:00
transport.h clone: respect remote unborn HEAD 2021-02-05 13:49:55 -08:00
tree-diff.c
tree-walk.c tree-walk: report recursion counts 2021-01-04 15:23:08 -08:00
tree-walk.h
tree.c tree.h API: simplify read_tree_recursive() signature 2021-03-20 16:09:26 -07:00
tree.h tree.h API: simplify read_tree_recursive() signature 2021-03-20 16:09:26 -07:00
unicode-width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c unpack-trees: allow sparse directories 2021-03-30 12:57:47 -07:00
unpack-trees.h
upload-pack.c Merge branch 'ak/corrected-commit-date' 2021-02-17 17:21:40 -08:00
upload-pack.h
url.c
url.h
urlmatch.c
urlmatch.h
usage.c usage: trace2 BUG() invocations 2021-02-09 14:14:34 -08:00
userdiff.c
userdiff.h
utf8.c
utf8.h
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c
walker.h
wildmatch.c
wildmatch.h
worktree.c worktree: teach worktree_lock_reason() to gently handle main worktree 2021-01-30 09:57:20 -08:00
worktree.h worktree: teach worktree to lazy-load "prunable" reason 2021-01-30 09:57:16 -08:00
wrap-for-bin.sh
wrapper.c
write-or-die.c
ws.c
wt-status.c Merge branch 'sj/untracked-files-in-submodule-directory-is-not-dirty' 2021-01-25 14:19:18 -08:00
wt-status.h branch: sort detached HEAD based on a flag 2021-01-07 15:13:21 -08:00
xdiff-interface.c
xdiff-interface.h
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