A fork of Git containing Microsoft-specific patches.
Перейти к файлу
Derrick Stolee 190a65f9db sparse-checkout: respect core.ignoreCase in cone mode
When a user uses the sparse-checkout feature in cone mode, they
add patterns using "git sparse-checkout set <dir1> <dir2> ..."
or by using "--stdin" to provide the directories line-by-line over
stdin. This behaviour naturally looks a lot like the way a user
would type "git add <dir1> <dir2> ..."

If core.ignoreCase is enabled, then "git add" will match the input
using a case-insensitive match. Do the same for the sparse-checkout
feature.

Perform case-insensitive checks while updating the skip-worktree
bits during unpack_trees(). This is done by changing the hash
algorithm and hashmap comparison methods to optionally use case-
insensitive methods.

When this is enabled, there is a small performance cost in the
hashing algorithm. To tease out the worst possible case, the
following was run on a repo with a deep directory structure:

	git ls-tree -d -r --name-only HEAD |
		git sparse-checkout set --stdin

The 'set' command was timed with core.ignoreCase disabled or
enabled. For the repo with a deep history, the numbers were

	core.ignoreCase=false: 62s
	core.ignoreCase=true:  74s (+19.3%)

For reproducibility, the equivalent test on the Linux kernel
repository had these numbers:

	core.ignoreCase=false: 3.1s
	core.ignoreCase=true:  3.6s (+16%)

Now, this is not an entirely fair comparison, as most users
will define their sparse cone using more shallow directories,
and the performance improvement from eb42feca97 ("unpack-trees:
hash less in cone mode" 2019-11-21) can remove most of the
hash cost. For a more realistic test, drop the "-r" from the
ls-tree command to store only the first-level directories.
In that case, the Linux kernel repository takes 0.2-0.25s in
each case, and the deep repository takes one second, plus or
minus 0.05s, in each case.

Thus, we _can_ demonstrate a cost to this change, but it is
unlikely to matter to any reasonable sparse-checkout cone.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-12-13 12:01:02 -08:00
.github
Documentation sparse-checkout: respect core.ignoreCase in cone mode 2019-12-13 12:01:02 -08:00
block-sha1
builtin sparse-checkout: respect core.ignoreCase in cone mode 2019-12-13 12:01:02 -08:00
ci Merge branch 'sg/ci-osx-gcc8-fix' 2019-10-24 13:34:03 +09:00
compat Merge branch 'js/mingw-needs-hiding-fix' 2019-10-30 15:13:13 +09:00
contrib Merge branch 'nr/diff-highlight-indent-fix' 2019-10-23 14:43:09 +09:00
ewah
git-gui Merge https://github.com/prati0100/git-gui 2019-11-04 13:29:38 +09:00
gitk-git
gitweb gitweb: correctly store previous rev in javascript-actions mode 2019-10-28 11:06:57 +09:00
mergetools
negotiator
perl
po l10n: zh_CN: for git v2.24.0 l10n round 1~2 2019-11-02 20:51:12 +08:00
ppc
refs
sha1collisiondetection@855827c583
sha1dc
sha256
t sparse-checkout: respect core.ignoreCase in cone mode 2019-12-13 12:01:02 -08:00
templates
trace2
vcs-svn
xdiff xdiffi: fix typos and touch up comments 2019-10-09 10:58:34 +09:00
.clang-format
.editorconfig
.gitattributes
.gitignore sparse-checkout: create builtin with 'list' subcommand 2019-11-22 16:11:43 +09:00
.gitmodules
.mailmap
.travis.yml
.tsan-suppressions
CODE_OF_CONDUCT.md CODE_OF_CONDUCT: mention individual project-leader emails 2019-10-10 10:41:46 +09:00
COPYING
GIT-VERSION-GEN The first batch post 2.24 cycle 2019-11-10 18:02:17 +09:00
INSTALL
LGPL-2.1
Makefile sparse-checkout: create builtin with 'list' subcommand 2019-11-22 16:11:43 +09:00
README.md git-gui: add a readme 2019-10-12 21:29:30 +05:30
RelNotes The first batch post 2.24 cycle 2019-11-10 18:02:17 +09:00
abspath.c
aclocal.m4
advice.c
advice.h
alias.c
alias.h
alloc.c
alloc.h
apply.c Merge branch 'dl/apply-3way-diff3' 2019-11-10 18:02:15 +09:00
apply.h
archive-tar.c
archive-zip.c
archive.c
archive.h
argv-array.c
argv-array.h
attr.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
attr.h
azure-pipelines.yml Merge branch 'js/azure-pipelines-msvc' 2019-10-23 11:06:46 +09:00
banned.h
base85.c
bisect.c
bisect.h
blame.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
blame.h
blob.c
blob.h
branch.c
branch.h
builtin.h sparse-checkout: create builtin with 'list' subcommand 2019-11-22 16:11:43 +09:00
bulk-checkin.c
bulk-checkin.h
bundle.c
bundle.h
cache-tree.c Merge branch 'en/merge-recursive-cleanup' 2019-10-15 13:47:59 +09:00
cache-tree.h
cache.h unpack-trees: add progress to clear_ce_flags() 2019-11-22 16:11:44 +09:00
chdir-notify.c
chdir-notify.h
check-builtins.sh
check_bindir
checkout.c
checkout.h
color.c
color.h
column.c column: use utf8_strnwidth() to strip out ANSI color escapes 2019-10-15 10:54:15 +09:00
column.h
combine-diff.c
command-list.txt sparse-checkout: create builtin with 'list' subcommand 2019-11-22 16:11:43 +09:00
commit-graph.c Merge branch 'ds/commit-graph-on-fetch' 2019-11-04 13:33:06 +09:00
commit-graph.h
commit-reach.c commit-graph: fix writing first commit-graph during fetch 2019-10-25 11:19:16 +09:00
commit-reach.h
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c Merge branch 'pw/post-commit-from-sequencer' 2019-11-10 18:02:12 +09:00
commit.h
common-main.c
config.c sparse-checkout: add 'cone' mode 2019-11-22 16:11:44 +09:00
config.h
config.mak.dev
config.mak.in
config.mak.uname
configure.ac
connect.c
connect.h
connected.c Merge branch 'bc/object-id-part17' 2019-10-11 14:24:46 +09:00
connected.h
convert.c Merge branch 'rs/convert-fix-utf-without-dash' 2019-10-09 14:01:00 +09:00
convert.h
copy.c
credential-cache--daemon.c
credential-cache.c
credential-store.c
credential.c
credential.h
csum-file.c
csum-file.h
ctype.c
daemon.c
date.c
decorate.c
decorate.h
delta-islands.c
delta-islands.h
delta.h
detect-compiler
diff-delta.c
diff-lib.c
diff-no-index.c
diff.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
diff.h
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
diffcore.h
dir-iterator.c
dir-iterator.h
dir.c sparse-checkout: respect core.ignoreCase in cone mode 2019-12-13 12:01:02 -08:00
dir.h unpack-trees: hash less in cone mode 2019-11-22 16:11:44 +09:00
editor.c
entry.c
environment.c sparse-checkout: add 'cone' mode 2019-11-22 16:11:44 +09:00
exec-cmd.c
exec-cmd.h
fast-import.c Merge branch 'en/fast-imexport-nested-tags' 2019-10-15 13:48:00 +09:00
fetch-negotiator.c
fetch-negotiator.h
fetch-pack.c Merge branch 'jt/fetch-pack-record-refs-in-the-dot-promisor' 2019-11-10 18:02:10 +09:00
fetch-pack.h
fmt-merge-msg.h
fsck.c
fsck.h
fsmonitor.c fsmonitor: don't fill bitmap with entries to be removed 2019-10-12 10:16:11 +09:00
fsmonitor.h
fuzz-commit-graph.c
fuzz-pack-headers.c
fuzz-pack-idx.c
generate-cmdlist.sh
gettext.c
gettext.h
git-add--interactive.perl
git-archimport.perl
git-bisect.sh
git-compat-util.h Merge branch 'bb/compat-util-comment-fix' 2019-10-18 11:40:48 +09:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-filter-branch.sh
git-instaweb.sh
git-legacy-stash.sh Merge branch 'js/update-index-ignore-removal-for-skip-worktree' 2019-11-10 18:02:16 +09:00
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-p4.py
git-parse-remote.sh
git-quiltimport.sh
git-rebase--preserve-merges.sh
git-request-pull.sh
git-send-email.perl
git-sh-i18n.sh
git-sh-setup.sh
git-submodule.sh
git-svn.perl
git-web--browse.sh
git.c sparse-checkout: create builtin with 'list' subcommand 2019-11-22 16:11:43 +09:00
git.rc
gpg-interface.c
gpg-interface.h
graph.c
graph.h
grep.c Merge branch 'cb/pcre2-chartables-leakfix' 2019-10-23 14:43:11 +09:00
grep.h Merge branch 'cb/pcre2-chartables-leakfix' 2019-10-23 14:43:11 +09:00
hash.h
hashmap.c
hashmap.h hashmap_entry: remove first member requirement from docs 2019-10-07 10:20:12 +09:00
help.c
help.h
hex.c
http-backend.c
http-fetch.c
http-push.c http-push: simplify deleting a list item 2019-10-15 10:53:50 +09:00
http-walker.c
http.c
http.h
ident.c
imap-send.c
interdiff.c
interdiff.h
iterator.h
json-writer.c
json-writer.h
khash.h
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c
line-log.h
line-range.c
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c Merge branch 'jk/partial-clone-sparse-blob' 2019-10-07 11:32:54 +09:00
list-objects-filter-options.h Merge branch 'jk/partial-clone-sparse-blob' 2019-10-07 11:32:54 +09:00
list-objects-filter.c Merge branch 'jk/partial-clone-sparse-blob' 2019-10-07 11:32:54 +09:00
list-objects-filter.h
list-objects.c Merge branch 'jk/list-objects-optim-wo-trees' 2019-10-07 11:32:56 +09:00
list-objects.h
list.h
ll-merge.c
ll-merge.h
lockfile.c
lockfile.h
log-tree.c Merge branch 'rs/simplify-by-deco-with-deco-refs-exclude' 2019-10-07 11:32:54 +09:00
log-tree.h
ls-refs.c
ls-refs.h
mailinfo.c
mailinfo.h
mailmap.c
mailmap.h
match-trees.c
mem-pool.c
mem-pool.h
merge-blobs.c
merge-blobs.h
merge-recursive.c Merge branch 'en/merge-recursive-directory-rename-fixes' 2019-11-10 18:02:13 +09:00
merge-recursive.h hashmap_entry: remove first member requirement from docs 2019-10-07 10:20:12 +09:00
merge.c
mergesort.c
mergesort.h
midx.c midx: honor the MIDX_PROGRESS flag in midx_repack 2019-10-23 12:05:06 +09:00
midx.h midx: add MIDX_PROGRESS flag 2019-10-23 12:05:05 +09:00
name-hash.c
notes-cache.c
notes-cache.h
notes-merge.c
notes-merge.h
notes-utils.c
notes-utils.h
notes.c
notes.h
object-store.h
object.c
object.h commit-graph: fix writing first commit-graph during fetch 2019-10-25 11:19:16 +09:00
oidmap.c
oidmap.h
oidset.c
oidset.h
pack-bitmap-write.c
pack-bitmap.c
pack-bitmap.h
pack-check.c
pack-objects.c
pack-objects.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
packfile.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
packfile.h
pager.c
parse-options-cb.c
parse-options.c
parse-options.h
patch-delta.c
patch-ids.c
patch-ids.h
path.c Merge branch 'sg/dir-trie-fixes' 2019-11-10 18:02:14 +09:00
path.h
pathspec.c
pathspec.h
pkt-line.c
pkt-line.h
preload-index.c
pretty.c pretty: add "%aL" etc. to show local-part of email addresses 2019-10-30 11:49:41 +09:00
pretty.h
prio-queue.c
prio-queue.h
progress.c
progress.h
promisor-remote.c
promisor-remote.h Merge branch 'dl/honor-cflags-in-hdr-check' 2019-10-07 11:33:02 +09:00
prompt.c
prompt.h
protocol.c
protocol.h
quote.c Merge branch 'gs/sq-quote-buf-pretty' 2019-10-15 13:48:02 +09:00
quote.h
range-diff.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
range-diff.h
reachable.c
reachable.h
read-cache.c Merge branch 'js/azure-pipelines-msvc' 2019-10-15 13:48:00 +09:00
rebase-interactive.c
rebase-interactive.h
ref-filter.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
ref-filter.h
reflog-walk.c
reflog-walk.h
refs.c hashmap_entry: remove first member requirement from docs 2019-10-07 10:20:12 +09:00
refs.h
refspec.c
refspec.h
remote-curl.c Merge branch 'bc/smart-http-atomic-push' 2019-10-23 14:43:11 +09:00
remote-testsvn.c
remote.c
remote.h hashmap_entry: remove first member requirement from docs 2019-10-07 10:20:12 +09:00
replace-object.c
replace-object.h
repo-settings.c Merge branch 'ds/feature-macros' 2019-10-24 13:34:03 +09:00
repository.c
repository.h Merge branch 'jk/disable-commit-graph-during-upload-pack' 2019-10-07 11:32:55 +09:00
rerere.c
rerere.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'ew/hashmap' 2019-10-15 13:48:02 +09:00
revision.h
run-command.c
run-command.h
send-pack.c send-pack: never fetch when checking exclusions 2019-10-09 10:46:41 +09:00
send-pack.h
sequencer.c Merge branch 'pw/post-commit-from-sequencer' 2019-11-10 18:02:12 +09:00
sequencer.h Merge branch 'pw/post-commit-from-sequencer' 2019-11-10 18:02:12 +09:00
serve.c
serve.h
server-info.c
setup.c
sh-i18n--envsubst.c
sha1-array.c
sha1-array.h
sha1-file.c Merge branch 'bc/object-id-part17' 2019-10-11 14:24:46 +09:00
sha1-lookup.c Merge branch 'js/azure-pipelines-msvc' 2019-10-15 13:48:00 +09:00
sha1-lookup.h
sha1-name.c Merge branch 'rs/nth-switch-code-simplification' 2019-10-07 11:33:00 +09:00
sha1dc_git.c
sha1dc_git.h
shallow.c Merge branch 'rs/dedup-includes' 2019-10-11 14:24:48 +09:00
shell.c
shortlog.h
sideband.c
sideband.h
sigchain.c
sigchain.h
split-index.c
split-index.h
stable-qsort.c
strbuf.c
strbuf.h
streaming.c
streaming.h
string-list.c
string-list.h
sub-process.c
sub-process.h hashmap_entry: remove first member requirement from docs 2019-10-07 10:20:12 +09:00
submodule-config.c
submodule-config.h
submodule.c
submodule.h
symlinks.c
tag.c
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c
tmp-objdir.h
trace.c
trace.h
trace2.c
trace2.h
trailer.c
trailer.h
transport-helper.c Merge branch 'bc/smart-http-atomic-push' 2019-10-23 14:43:11 +09:00
transport-internal.h
transport.c transport: push codepath can take arbitrary repository 2019-10-08 13:20:01 +09:00
transport.h remote-curl: pass on atomic capability to remote side 2019-10-17 16:08:22 +09:00
tree-diff.c
tree-walk.c
tree-walk.h
tree.c
tree.h
unicode-width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c sparse-checkout: update working directory in-process 2019-11-22 16:11:44 +09:00
unpack-trees.h sparse-checkout: update working directory in-process 2019-11-22 16:11:44 +09:00
upload-pack.c Merge branch 'jk/disable-commit-graph-during-upload-pack' 2019-10-07 11:32:55 +09:00
upload-pack.h
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c userdiff: fix some corner cases in dts regex 2019-10-21 17:44:12 +09:00
userdiff.h
utf8.c utf8: use ARRAY_SIZE() in git_wcwidth() 2019-10-12 10:57:39 +09:00
utf8.h
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c
walker.h
wildmatch.c
wildmatch.h
worktree.c
worktree.h
wrap-for-bin.sh
wrapper.c Merge branch 'ah/cleanups' 2019-10-09 14:01:00 +09:00
write-or-die.c
ws.c
wt-status.c Merge branch 'bc/object-id-part17' 2019-10-11 14:24:46 +09:00
wt-status.h
xdiff-interface.c
xdiff-interface.h
zlib.c

README.md

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