Go to file
Jeff King 9d2e330b17 ewah_read_mmap: bounds-check mmap reads
The on-disk ewah format tells us how big the ewah data is,
and we blindly read that much from the buffer without
considering whether the mmap'd data is long enough, which
can lead to out-of-bound reads.

Let's make sure we have data available before reading it,
both for the ewah header/footer as well as for the bit data
itself. In particular:

  - keep our ptr/len pair in sync as we move through the
    buffer, and check it before each read

  - check the size for integer overflow (this should be
    impossible on 64-bit, as the size is given as a 32-bit
    count of 8-byte words, but is possible on a 32-bit
    system)

  - return the number of bytes read as an ssize_t instead of
    an int, again to prevent integer overflow

  - compute the return value using a pointer difference;
    this should yield the same result as the existing code,
    but makes it more obvious that we got our computations
    right

The included test is far from comprehensive, as it just
picks a static point at which to truncate the generated
bitmap. But in practice this will hit in the middle of an
ewah and make sure we're at least exercising this code.

Reported-by: Luat Nguyen <root@l4w.io>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-06-18 09:13:57 -07:00
.github
Documentation Git 2.16.4 2018-05-22 14:18:51 +09:00
block-sha1
builtin Sync with Git 2.15.2 2018-05-22 14:18:06 +09:00
ci Merge branch 'tg/split-index-fixes' into maint 2018-03-22 14:24:10 -07:00
compat Merge branch 'bp/fsmonitor' 2017-11-21 14:07:50 +09:00
contrib Merge branch 'rd/typofix' into maint 2018-03-22 14:24:22 -07:00
ewah ewah_read_mmap: bounds-check mmap reads 2018-06-18 09:13:57 -07:00
git-gui Merge branch 'js/misc-git-gui-stuff' of ../git-gui 2018-01-09 11:07:03 -08:00
gitk-git
gitweb Merge branch 'gc/gitweb-filetest-acl' 2017-11-06 14:24:30 +09:00
mergetools
perl Git/Packet.pm: use 'if' instead of 'unless' 2017-11-22 16:23:55 +09:00
po l10n: de.po: translate 72 new messages 2018-01-15 07:47:30 +01:00
ppc
refs Merge branch 'mr/packed-ref-store-fix' into maint 2018-03-22 14:24:10 -07:00
sha1collisiondetection@19d97bf5af
sha1dc
t ewah_read_mmap: bounds-check mmap reads 2018-06-18 09:13:57 -07:00
templates fsmonitor: simplify determining the git worktree under Windows 2017-11-13 10:02:20 +09:00
vcs-svn Merge branch 'jn/vcs-svn-cleanup' into maint 2017-09-10 17:03:09 +09:00
xdiff Merge branch 'jt/diff-anchored-patience' 2017-12-19 11:33:56 -08:00
.clang-format clang-format: add a comment about the meaning/status of the 2017-10-02 13:17:48 +09:00
.gitattributes
.gitignore
.gitmodules
.mailmap mailmap: use Kaartic Sivaraam's new address 2017-11-03 23:00:07 +09:00
.travis.yml travis-ci: build Git during the 'script' phase 2018-01-08 14:07:41 -08:00
.tsan-suppressions
COPYING
GIT-VERSION-GEN Git 2.16.4 2018-05-22 14:18:51 +09:00
INSTALL
LGPL-2.1
Makefile Makefile: suppress a sparse warning for pack-revindex.c 2018-02-12 12:19:39 -08:00
README.md
RelNotes Git 2.16.4 2018-05-22 14:18:51 +09:00
abspath.c real_path: clarify return value ownership 2017-09-27 09:13:47 +09:00
aclocal.m4
advice.c Merge branch 'ls/editor-waiting-message' 2017-12-19 11:33:59 -08:00
advice.h Merge branch 'ls/editor-waiting-message' 2017-12-19 11:33:59 -08:00
alias.c
alloc.c
apply.c Sync with Git 2.15.2 2018-05-22 14:18:06 +09:00
apply.h apply: remove `newfd` from `struct apply_state` 2017-10-06 10:07:18 +09:00
archive-tar.c
archive-zip.c
archive.c refs: convert dwim_ref and expand_ref to struct object_id 2017-10-16 11:05:51 +09:00
archive.h
argv-array.c
argv-array.h
attr.c
attr.h
base85.c
bisect.c Merge branch 'ys/bisect-object-id-missing-conversion-fix' into maint 2018-02-27 10:43:55 -08:00
bisect.h Merge branch 'ma/bisect-leakfix' 2017-11-15 12:14:28 +09:00
blame.c Merge branch 'bw/diff-opt-impl-to-bitfields' 2017-11-09 14:31:27 +09:00
blame.h
blob.c
blob.h
branch.c Merge branch 'ks/branch-cleanup' 2017-12-27 11:16:25 -08:00
branch.h Merge branch 'ks/branch-cleanup' 2017-12-27 11:16:25 -08:00
builtin.h
bulk-checkin.c distinguish error versus short read from read_in_full() 2017-09-27 15:45:24 +09:00
bulk-checkin.h
bundle.c Merge branch 'rs/lose-leak-pending' into maint 2018-02-15 15:18:11 -08:00
bundle.h
cache-tree.c Merge branch 'tg/split-index-fixes' into maint 2018-03-22 14:24:10 -07:00
cache-tree.h
cache.h Sync with Git 2.15.2 2018-05-22 14:18:06 +09:00
check-builtins.sh
check-racy.c
check_bindir
checkout.c checkout: factor out functions to new lib file 2017-11-27 09:48:06 +09:00
checkout.h checkout: factor out functions to new lib file 2017-11-27 09:48:06 +09:00
color.c refactor "dumb" terminal determination 2017-12-04 09:38:30 -08:00
color.h
column.c column: do not include pager.c 2017-10-24 10:19:06 +09:00
column.h
combine-diff.c Merge branch 'bw/diff-opt-impl-to-bitfields' 2017-11-09 14:31:27 +09:00
command-list.txt
commit-slab.h commit-slab.h: avoid -Wsign-compare warnings 2017-09-22 13:00:36 +09:00
commit.c commit: remove unused function clear_commit_marks_for_object_array() 2017-12-28 13:50:05 -08:00
commit.h Merge branch 'rs/lose-leak-pending' into maint 2018-02-15 15:18:11 -08:00
common-main.c
config.c Merge branch 'hm/config-parse-expiry-date' 2017-12-06 09:23:37 -08:00
config.h Merge branch 'hm/config-parse-expiry-date' 2017-12-06 09:23:37 -08:00
config.mak.in
config.mak.uname config.mak.uname: remove SPARSE_FLAGS setting for cygwin 2018-02-12 12:19:18 -08:00
configure.ac Makefile: NO_OPENSSL=1 should no longer imply BLK_SHA1=1 2017-12-28 11:55:56 -08:00
connect.c connect: correct style of C-style comment 2017-11-21 14:01:03 +09:00
connect.h
connected.c Convert check_connected to use struct object_id 2017-10-16 11:05:50 +09:00
connected.h Convert check_connected to use struct object_id 2017-10-16 11:05:50 +09:00
convert.c Merge branch 'tb/check-crlf-for-safe-crlf' 2017-12-27 11:16:21 -08:00
convert.h Merge branch 'tb/apply-with-crlf' into maint 2017-09-10 17:02:55 +09:00
copy.c
credential-cache--daemon.c
credential-cache.c
credential-store.c
credential.c
credential.h
csum-file.c prefer "!=" when checking read_in_full() result 2017-09-27 15:45:24 +09:00
csum-file.h
ctype.c
daemon.c daemon: fix length computation in newline stripping 2018-01-25 13:50:17 -08:00
date.c
decorate.c decorate: clean up and document API 2017-12-08 09:16:27 -08:00
decorate.h decorate: clean up and document API 2017-12-08 09:16:27 -08:00
delta.h
diff-delta.c Merge branch 'mk/diff-delta-avoid-large-offset' 2017-09-28 14:47:56 +09:00
diff-lib.c Merge branch 'bc/hash-algo' 2017-12-13 13:28:54 -08:00
diff-no-index.c diff: make struct diff_flags members lowercase 2017-11-01 11:51:40 +09:00
diff.c Merge branch 'nd/diff-flush-before-warning' into maint 2018-03-22 14:24:09 -07:00
diff.h diff: support anchoring line(s) 2017-11-28 10:40:04 +09:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c diff: make struct diff_flags members lowercase 2017-11-01 11:51:40 +09:00
diffcore-rename.c diffcore-rename: make diff-tree -l0 mean -l<large> 2017-12-02 22:16:57 -08:00
diffcore.h
dir-iterator.c
dir-iterator.h
dir.c Merge branch 'jh/object-filtering' 2017-12-27 11:16:21 -08:00
dir.h Merge branch 'jh/object-filtering' 2017-12-27 11:16:21 -08:00
editor.c launch_editor(): indicate that Git waits for user input 2017-12-07 10:10:19 -08:00
entry.c Merge branch 'bp/fsmonitor' 2017-11-21 14:07:50 +09:00
environment.c Merge branch 'ar/unconfuse-three-dots' 2017-12-19 11:33:58 -08:00
exec_cmd.c
exec_cmd.h
fast-import.c Merge branch 'jk/write-in-full-fix' into maint 2017-10-23 14:37:22 +09:00
fetch-pack.c Merge branch 'jk/fewer-pack-rescan' 2017-12-06 09:23:42 -08:00
fetch-pack.h
fmt-merge-msg.h
fsck.c Merge branch 'rs/fsck-null-return-from-lookup' 2017-10-11 14:52:23 +09:00
fsck.h
fsmonitor.c fsmonitor: store fsmonitor bitmap before splitting index 2017-11-10 14:05:01 +09:00
fsmonitor.h fsmonitor: store fsmonitor bitmap before splitting index 2017-11-10 14:05:01 +09:00
generate-cmdlist.sh generate-cmdlist: avoid non-deterministic output 2017-11-22 14:56:30 +09:00
gettext.c
gettext.h
git-add--interactive.perl add--interactive: ignore submodule changes except HEAD 2018-01-16 12:32:45 -08:00
git-archimport.perl archimport: use safe_pipe_capture for user input 2017-09-12 11:08:15 +09:00
git-bisect.sh Merge branch 'sb/bisect-run-empty' 2017-11-15 12:14:36 +09:00
git-compat-util.h Sync with Git 2.15.2 2018-05-22 14:18:06 +09:00
git-cvsexportcommit.perl
git-cvsimport.perl cvsimport: apply shell-quoting regex globally 2017-12-08 09:02:54 -08:00
git-cvsserver.perl cvsserver: use safe_pipe_capture for `constant commands` as well 2017-09-11 14:52:29 +09:00
git-difftool--helper.sh
git-filter-branch.sh Merge branch 'dg/filter-branch-filter-order-doc' 2017-10-19 14:45:45 +09:00
git-instaweb.sh
git-merge-octopus.sh Merge branch 'ma/up-to-date' 2017-09-10 17:08:22 +09:00
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-p4.py git-p4: update multiple shelved change lists 2017-12-22 13:30:52 -08:00
git-parse-remote.sh
git-quiltimport.sh
git-rebase--am.sh rebase: use mboxrd format to avoid split errors 2017-11-18 12:30:16 +09:00
git-rebase--interactive.sh Merge branch 'js/fix-merge-arg-quoting-in-rebase-p' 2018-01-10 14:01:24 -08:00
git-rebase--merge.sh
git-rebase.sh rebase: rebasing can also be done when HEAD is detached 2017-12-19 10:02:47 -08:00
git-remote-testgit.sh
git-request-pull.sh request-pull: capitalise "Git" to make it a proper noun 2017-10-03 13:11:57 +09:00
git-send-email.perl git-send-email: honor $PATH for sendmail binary 2017-11-28 10:14:30 +09:00
git-sh-i18n.sh git-sh-i18n: check GETTEXT_POISON before USE_GETTEXT_SCHEME 2018-02-08 10:09:45 -08:00
git-sh-setup.sh
git-stash.sh Merge branch 'tg/stash-with-pathspec-fix' into maint 2018-02-15 15:18:13 -08:00
git-submodule.sh Sync with Git 2.15.2 2018-05-22 14:18:06 +09:00
git-svn.perl Merge branch 'ew/svn-branch-segfault-fix' into maint 2018-03-22 14:24:11 -07:00
git-web--browse.sh
git.c Merge branch 'ma/branch-list-paginate' 2017-11-28 13:41:50 +09:00
git.rc mingw: include the full version information in the resources 2017-11-01 13:43:52 +09:00
gpg-interface.c
gpg-interface.h
graph.c graph: use strbuf_addchars() to add spaces 2017-10-02 13:14:07 +09:00
graph.h
grep.c Merge branch 'ab/pcre2-grep' 2017-12-13 13:28:54 -08:00
grep.h Merge branch 'ab/pcre-v2' into maint 2017-11-21 14:05:30 +09:00
hash.h Add structure representing hash algorithm 2017-11-13 13:20:44 +09:00
hashmap.c
hashmap.h Merge branch 'rb/hashmap-h-compilation-fix' into maint 2018-03-22 14:24:15 -07:00
help.c version --build-options: report commit, too, if possible 2017-12-14 22:53:04 -08:00
help.h
hex.c notes: move hex_to_bytes() to hex.c and export it 2017-11-01 10:35:35 +09:00
http-backend.c Merge branch 'rs/resolve-ref-optional-result' 2017-09-28 14:47:56 +09:00
http-fetch.c
http-push.c http-push: use hex_to_bytes() 2017-11-01 10:35:39 +09:00
http-walker.c
http.c http: support omitting data from traces 2018-01-19 13:06:57 -08:00
http.h
ident.c
imap-send.c imap-send: URI encode server folder 2017-12-18 13:57:06 -08:00
iterator.h
khash.h
kwset.c Replace Free Software Foundation address in license notices 2017-11-09 13:21:21 +09:00
kwset.h Replace Free Software Foundation address in license notices 2017-11-09 13:21:21 +09:00
levenshtein.c
levenshtein.h
line-log.c ALLOC_GROW: avoid -Wsign-compare warnings 2017-09-22 13:21:11 +09:00
line-log.h ALLOC_GROW: avoid -Wsign-compare warnings 2017-09-22 13:21:11 +09:00
line-range.c
line-range.h
list-objects-filter-options.c list-objects-filter-options: support --no-filter 2017-12-05 09:44:36 -08:00
list-objects-filter-options.h list-objects-filter-options: support --no-filter 2017-12-05 09:44:36 -08:00
list-objects-filter.c list-objects: filter objects in traverse_commit_list 2017-11-22 14:11:57 +09:00
list-objects-filter.h list-objects: filter objects in traverse_commit_list 2017-11-22 14:11:57 +09:00
list-objects.c Merge branch 'sb/describe-blob' 2017-12-28 14:08:50 -08:00
list-objects.h list-objects: filter objects in traverse_commit_list 2017-11-22 14:11:57 +09:00
list.h
ll-merge.c avoid "write_in_full(fd, buf, len) != len" pattern 2017-09-14 15:17:59 +09:00
ll-merge.h
lockfile.c
lockfile.h lockfile: fix documentation on `close_lock_file_gently()` 2017-10-06 10:07:17 +09:00
log-tree.c commit: drop uses of get_cached_commit_buffer() 2018-02-22 12:12:16 -08:00
log-tree.h log: add option to choose which refs to decorate 2017-11-22 13:18:59 +09:00
mailinfo.c Merge branch 'jc/mailinfo-cleanup-fix' into maint 2018-03-22 14:24:16 -07:00
mailinfo.h
mailmap.c
mailmap.h
match-trees.c
merge-blobs.c
merge-blobs.h
merge-recursive.c Merge branch 'jc/merge-symlink-ours-theirs' into maint 2018-02-15 15:18:12 -08:00
merge-recursive.h
merge.c Merge branch 'ew/empty-merge-with-dirty-index-maint' into ew/empty-merge-with-dirty-index 2017-12-22 12:48:38 -08:00
mergesort.c
mergesort.h
mru.c
mru.h
name-hash.c
notes-cache.c refs: convert read_ref and read_ref_full to object_id 2017-10-16 11:05:50 +09:00
notes-cache.h
notes-merge.c Switch empty tree and blob lookups to use hash abstraction 2017-11-13 13:20:44 +09:00
notes-merge.h
notes-utils.c refs: convert read_ref and read_ref_full to object_id 2017-10-16 11:05:50 +09:00
notes-utils.h
notes.c Merge branch 'rs/hex-to-bytes-cleanup' 2017-11-09 14:31:27 +09:00
notes.h
object.c object: add clear_commit_marks_all() 2017-12-28 13:50:05 -08:00
object.h Merge branch 'rs/lose-leak-pending' into maint 2018-02-15 15:18:11 -08:00
oidmap.c oidmap: ensure map is initialized 2017-12-27 12:28:06 -08:00
oidmap.h oidmap: add oidmap iterator methods 2017-11-22 14:11:56 +09:00
oidset.c oidset: add iterator methods to oidset 2017-11-22 14:11:56 +09:00
oidset.h oidset: don't return value from oidset_init 2018-01-08 15:24:35 -08:00
pack-bitmap-write.c pack-bitmap[-write]: use `object_array_clear()`, don't leak 2017-09-24 10:06:08 +09:00
pack-bitmap.c pack-bitmap: convert traverse_bitmap_commit_list to object_id 2017-10-16 11:05:51 +09:00
pack-bitmap.h pack-bitmap: convert traverse_bitmap_commit_list to object_id 2017-10-16 11:05:51 +09:00
pack-check.c
pack-objects.c
pack-objects.h
pack-revindex.c
pack-revindex.h
pack-write.c avoid looking at errno for short read_in_full() returns 2017-09-27 15:45:24 +09:00
pack.h
packfile.c cleanup: fix possible overflow errors in binary search 2017-10-10 08:57:24 +09:00
packfile.h
pager.c
parse-options-cb.c
parse-options.c parse-options: only insert newline in help text if needed 2017-09-25 14:35:53 +09:00
parse-options.h
patch-delta.c
patch-ids.c diff: make struct diff_flags members lowercase 2017-11-01 11:51:40 +09:00
patch-ids.h
path.c Sync with Git 2.14.4 2018-05-22 14:15:14 +09:00
path.h path: document path functions 2017-12-13 11:14:25 -08:00
pathspec.c Merge branch 'ex/deprecate-empty-pathspec-as-match-all' 2017-11-06 13:11:29 +09:00
pathspec.h Merge branch 'bw/pathspec-match-submodule-boundary' 2017-12-19 11:33:56 -08:00
pkt-line.c Merge branch 'bw/protocol-v1' 2017-12-06 09:23:44 -08:00
pkt-line.h pkt-line: add packet_write function 2017-10-17 10:51:29 +09:00
preload-index.c fsmonitor: teach git to optionally utilize a file system monitor to speed up detecting new or changed files. 2017-10-01 17:23:01 +09:00
pretty.c log: add option to choose which refs to decorate 2017-11-22 13:18:59 +09:00
pretty.h format: create docs for pretty.h 2017-12-12 10:41:15 -08:00
prio-queue.c
prio-queue.h
progress.c Merge branch 'en/rename-progress' 2017-12-19 11:33:55 -08:00
progress.h progress: fix progress meters when dealing with lots of work 2017-11-15 13:11:25 +09:00
prompt.c
prompt.h
protocol.c protocol: introduce protocol extension mechanisms 2017-10-17 10:51:29 +09:00
protocol.h protocol: introduce protocol extension mechanisms 2017-10-17 10:51:29 +09:00
quote.c consistently use "fallthrough" comments in switches 2017-09-22 12:49:57 +09:00
quote.h
reachable.c Merge branch 'nd/prune-in-worktree' 2017-09-19 10:47:53 +09:00
reachable.h
read-cache.c Sync with Git 2.15.2 2018-05-22 14:18:06 +09:00
ref-filter.c Merge branch 'rs/lose-leak-pending' into maint 2018-02-15 15:18:11 -08:00
ref-filter.h
reflog-walk.c refs: convert dwim_log to struct object_id 2017-10-16 11:05:51 +09:00
reflog-walk.h
refs.c log: add option to choose which refs to decorate 2017-11-22 13:18:59 +09:00
refs.h log: add option to choose which refs to decorate 2017-11-22 13:18:59 +09:00
remote-curl.c
remote-testsvn.c refs: convert read_ref and read_ref_full to object_id 2017-10-16 11:05:50 +09:00
remote.c Merge branch 'js/for-each-ref-remote-name-and-ref' 2017-11-15 12:14:32 +09:00
remote.h for-each-ref: let upstream/push report the remote ref name 2017-11-08 10:18:23 +09:00
replace_object.c
repository.c Merge branch 'tg/split-index-fixes' into maint 2018-03-22 14:24:10 -07:00
repository.h Integrate hash algorithm support with repo setup 2017-11-13 13:20:44 +09:00
rerere.c Merge branch 'jk/write-in-full-fix' 2017-09-25 15:24:06 +09:00
rerere.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'jk/cached-commit-buffer' into maint 2018-03-22 14:24:25 -07:00
revision.h revision: drop --show-all option 2018-02-22 12:15:25 -08:00
run-command.c run-command: add hint when a hook is ignored 2017-10-10 13:21:46 +09:00
run-command.h
send-pack.c send-pack: use internal argv_array of struct child_process 2017-12-22 13:33:53 -08:00
send-pack.h
sequencer.c sequencer: do not invent whitespace when transforming OIDs 2017-12-27 12:33:38 -08:00
sequencer.h rebase -i: learn to abbreviate command names 2017-12-05 10:20:51 -08:00
server-info.c
setup.c Merge branch 'sg/setup-doc-update' 2017-12-19 11:33:58 -08:00
sh-i18n--envsubst.c Replace Free Software Foundation address in license notices 2017-11-09 13:21:21 +09:00
sha1-array.c
sha1-array.h
sha1-lookup.c cleanup: fix possible overflow errors in binary search 2017-10-10 08:57:24 +09:00
sha1-lookup.h
sha1_file.c Merge branch 'ds/for-each-file-in-obj-micro-optim' 2017-12-13 13:28:57 -08:00
sha1_name.c Merge branch 'jc/branch-name-sanity' 2017-11-28 13:41:49 +09:00
sha1dc_git.c
sha1dc_git.h
shallow.c Merge branch 'ma/leakplugs' 2017-09-29 11:23:43 +09:00
shell.c shell: drop git-cvsserver support by default 2017-09-12 11:05:58 +09:00
shortlog.h
show-index.c
sideband.c refactor "dumb" terminal determination 2017-12-04 09:38:30 -08:00
sideband.h
sigchain.c
sigchain.h
split-index.c split-index: don't write cache tree with null oid entries 2018-01-19 10:36:39 -08:00
split-index.h
strbuf.c Merge branch 'jd/fix-strbuf-add-urlencode-bytes' 2018-01-05 13:28:10 -08:00
strbuf.h strbuf: remove unused stripspace function alias 2017-12-05 08:50:15 -08:00
streaming.c Merge branch 'jk/write-in-full-fix' 2017-09-25 15:24:06 +09:00
streaming.h
string-list.c cleanup: fix possible overflow errors in binary search 2017-10-10 08:57:24 +09:00
string-list.h string-list.h: move documentation from Documentation/api/ into header 2017-09-27 09:14:34 +09:00
sub-process.c Merge branch 'cc/subprocess-handshake-missing-capabilities' into maint 2017-10-18 14:19:10 +09:00
sub-process.h
submodule-config.c Sync with Git 2.15.2 2018-05-22 14:18:06 +09:00
submodule-config.h Sync with Git 2.15.2 2018-05-22 14:18:06 +09:00
submodule.c submodule: submodule_move_head omits old argument in forced case 2018-01-05 12:35:35 -08:00
submodule.h submodule: convert get_next_submodule to not rely on the_index 2017-12-12 12:35:22 -08:00
symlinks.c
tag.c Merge branch 'rs/tag-null-pointer-arith-fix' 2017-10-05 13:48:20 +09:00
tag.h
tar.h
tempfile.c
tempfile.h tempfile: fix documentation on `delete_tempfile()` 2017-10-06 10:07:18 +09:00
thread-utils.c
thread-utils.h
tmp-objdir.c
tmp-objdir.h
trace.c trace: improve performance while category is disabled 2017-12-06 09:43:02 -08:00
trace.h trace: improve performance while category is disabled 2017-12-06 09:43:02 -08:00
trailer.c
trailer.h
transport-helper.c Merge branch 'jt/transport-hide-vtable' 2017-12-28 14:08:47 -08:00
transport-internal.h transport: make transport vtable more private 2017-12-14 14:28:04 -08:00
transport.c Merge branch 'jt/transport-hide-vtable' 2017-12-28 14:08:47 -08:00
transport.h transport: make transport vtable more private 2017-12-14 14:28:04 -08:00
tree-diff.c diff: make struct diff_flags members lowercase 2017-11-01 11:51:40 +09:00
tree-walk.c Merge branch 'bw/pathspec-match-submodule-boundary' 2017-12-19 11:33:56 -08:00
tree-walk.h
tree.c
tree.h
unicode_width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c unpack-trees: oneway_merge to update submodules 2018-01-05 12:35:35 -08:00
unpack-trees.h
upload-pack.c Merge branch 'bw/protocol-v1' 2017-12-06 09:23:44 -08:00
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c Merge branch 'ik/userdiff-html-h-element-fix' into maint 2017-10-18 14:19:02 +09:00
userdiff.h
utf8.c Sync with Git 2.14.4 2018-05-22 14:15:14 +09:00
utf8.h is_hfs_dotgit: match other .git files 2018-05-21 23:50:11 -04:00
varint.c
varint.h
version.c version --build-options: report commit, too, if possible 2017-12-14 22:53:04 -08:00
version.h version --build-options: report commit, too, if possible 2017-12-14 22:53:04 -08:00
versioncmp.c
walker.c refs: update ref transactions to use struct object_id 2017-10-16 11:05:50 +09:00
walker.h
wildmatch.c
wildmatch.h
worktree.c Merge branch 'bc/object-id' 2017-11-06 14:24:27 +09:00
worktree.h worktree: convert struct worktree to object_id 2017-10-16 11:05:51 +09:00
wrap-for-bin.sh
wrapper.c wrapper.c: consistently quote filenames in error messages 2017-11-06 11:53:14 +09:00
write_or_die.c
ws.c
wt-status.c Merge branch 'nd/ita-wt-renames-in-status' into maint 2018-02-27 10:39:35 -08:00
wt-status.h Merge branch 'nd/ita-wt-renames-in-status' into maint 2018-02-27 10:39:35 -08:00
xdiff-interface.c xdiff-interface: export comparing and hashing strings 2017-10-26 11:23:22 +09:00
xdiff-interface.h xdiff-interface: export comparing and hashing strings 2017-10-26 11:23:22 +09:00
zlib.c

README.md

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-.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://public-inbox.org/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.

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