1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-12 12:56:08 +02:00
Git Source Code Mirror. Please follow Documentation/SubmittingPatches procedure for any of your improvements.
Go to file
Taylor Blau b31e2680c4 ref-filter.c: find disjoint pattern prefixes
Since cfe004a5a9 (ref-filter: limit traversal to prefix, 2017-05-22),
the ref-filter code has sought to limit the traversals to a prefix of
the given patterns.

That code stopped short of handling more than one pattern, because it
means invoking 'for_each_ref_in' multiple times. If we're not careful
about which patterns overlap, we will output the same refs multiple
times.

For instance, consider the set of patterns 'refs/heads/a/*',
'refs/heads/a/b/c', and 'refs/tags/v1.0.0'. If we naïvely ran:

  for_each_ref_in("refs/heads/a/*", ...);
  for_each_ref_in("refs/heads/a/b/c", ...);
  for_each_ref_in("refs/tags/v1.0.0", ...);

we would see 'refs/heads/a/b/c' (and everything underneath it) twice.

Instead, we want to partition the patterns into disjoint sets, where we
know that no ref will be matched by any two patterns in different sets.
In the above, these are:

  - {'refs/heads/a/*', 'refs/heads/a/b/c'}, and
  - {'refs/tags/v1.0.0'}

Given one of these disjoint sets, what is a suitable pattern to pass to
'for_each_ref_in'? One approach is to compute the longest common prefix
over all elements in that disjoint set, and let the caller cull out the
refs they didn't want. Computing the longest prefix means that in most
cases, we won't match too many things the caller would like to ignore.

The longest common prefixes of the above are:

  - {'refs/heads/a/*', 'refs/heads/a/b/c'} -> refs/heads/a/*
  - {'refs/tags/v1.0.0'}                   -> refs/tags/v1.0.0

We instead invoke:

  for_each_ref_in("refs/heads/a/*", ...);
  for_each_ref_in("refs/tags/v1.0.0", ...);

Which provides us with the refs we were looking for with a minimal
amount of extra cruft, but never a duplicate of the ref we asked for.

Implemented here is an algorithm which accomplishes the above, which
works as follows:

  1. Lexicographically sort the given list of patterns.

  2. Initialize 'prefix' to the empty string, where our goal is to
     build each element in the above set of longest common prefixes.

  3. Consider each pattern in the given set, and emit 'prefix' if it
     reaches the end of a pattern, or touches a wildcard character. The
     end of a string is treated as if it precedes a wildcard. (Note that
     there is some room for future work to detect that, e.g., 'a?b' and
     'abc' are disjoint).

  4. Otherwise, recurse on step (3) with the slice of the list
     corresponding to our current prefix (i.e., the subset of patterns
     that have our prefix as a literal string prefix.)

This algorithm is 'O(kn + n log(n))', where 'k' is max(len(pattern)) for
each pattern in the list, and 'n' is len(patterns).

By discovering this set of interesting patterns, we reduce the runtime
of multi-pattern 'git for-each-ref' (and other ref traversals) from
O(N) to O(n log(N)), where 'N' is the total number of packed references.

Running 'git for-each-ref refs/tags/a refs/tags/b' on a repository with
10,000,000 refs in 'refs/tags/huge-N', my best-of-five times drop from:

  real    0m5.805s
  user    0m5.188s
  sys     0m0.468s

to:

  real    0m0.001s
  user    0m0.000s
  sys     0m0.000s

On linux.git, the times to dig out two of the latest -rc tags drops from
0.002s to 0.001s, so the change on repositories with fewer tags is much
less noticeable.

Co-authored-by: Jeff King <peff@peff.net>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-06-27 13:14:06 -07:00
.github point pull requesters to GitGitGadget 2019-03-13 11:07:50 +09:00
Documentation The third batch 2019-06-21 11:26:11 -07:00
block-sha1
builtin Merge branch 'jt/partial-clone-missing-ref-delta-base' 2019-06-21 11:24:09 -07:00
ci Merge branch 'sg/ci-libsvn-perl' 2019-05-19 16:45:31 +09:00
compat Merge branch 'tt/no-ipv6-fallback-for-winxp' 2019-05-19 16:45:32 +09:00
contrib list-objects-filter: disable 'sparse:path' filters 2019-05-29 11:05:34 -07:00
ewah ewok_rlw.h: add missing 'inline' to function definition 2018-10-29 10:14:19 +09:00
git-gui
gitk-git Merge git://ozlabs.org/~paulus/gitk 2019-03-18 11:18:49 +09:00
gitweb gitweb: make hash size independent 2019-04-01 11:57:39 +09:00
mergetools mergetools: add support for smerge (Sublime Merge) 2019-04-04 18:21:25 +09:00
negotiator
perl Git.pm: make hash size independent 2019-04-01 11:57:39 +09:00
po Merge branch 'fr_review' of git://github.com/jnavila/git 2019-06-07 16:51:09 +08:00
ppc *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
refs Merge branch 'jk/refs-double-abort' 2019-04-16 19:28:11 +09:00
sha1collisiondetection@855827c583 sha1dc: update from upstream 2019-05-14 16:45:01 +09:00
sha1dc sha1dc: update from upstream 2019-05-14 16:45:01 +09:00
sha256 sha256: add an SHA-256 implementation using libgcrypt 2018-11-14 16:54:53 +09:00
t ref-filter.c: find disjoint pattern prefixes 2019-06-27 13:14:06 -07:00
templates
trace2 Merge branch 'sg/trace2-rename' 2019-05-30 10:50:45 -07:00
vcs-svn *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
xdiff xdiff: use xmalloc/xrealloc 2019-04-12 13:34:17 +09:00
.clang-format clang-format: use git grep to generate the ForEachMacros list 2019-06-04 14:50:40 -07:00
.editorconfig editorconfig: indicate settings should be kept in sync 2018-10-09 18:34:15 +09:00
.gitattributes Merge branch 'ds/hash-independent-tests-fix' into maint 2018-12-15 12:24:32 +09:00
.gitignore rebase: fold git-rebase--common into the -p backend 2019-05-15 10:57:32 +09:00
.gitmodules
.mailmap .mailmap: map Clemens Buchacher's mail addresses 2019-02-08 11:14:15 -08:00
.travis.yml travis: remove the hack to build the Windows job on Azure Pipelines 2019-03-01 08:21:26 +09:00
.tsan-suppressions
COPYING
GIT-VERSION-GEN The first batch after 2.22 2019-06-13 13:23:03 -07:00
INSTALL
LGPL-2.1
Makefile Merge branch 'ab/deprecate-R-for-dynpath' 2019-06-13 13:19:43 -07:00
README.md README: adjust for final Azure Pipeline ID 2019-02-23 21:27:04 -08:00
RelNotes The first batch after 2.22 2019-06-13 13:23:03 -07:00
abspath.c
aclocal.m4
advice.c tag: advise on nested tags 2019-04-12 10:52:35 +09:00
advice.h Merge branch 'dl/no-extern-in-func-decl' 2019-05-13 23:50:32 +09:00
alias.c alias.c: mark split_cmdline_strerror() strings for translation 2018-11-12 14:47:09 +09:00
alias.h headers: normalize the spelling of some header guards 2018-10-18 13:39:35 +09:00
alloc.c object_as_type: initialize commit-graph-related fields of 'struct commit' 2019-01-27 16:55:57 -08:00
alloc.h object_as_type: initialize commit-graph-related fields of 'struct commit' 2019-01-27 16:55:57 -08:00
apply.c fill_stat_cache_info(): prepare for an fsmonitor fix 2019-05-28 12:43:42 -07:00
apply.h
archive-tar.c archive: convert struct archiver_args to object_id 2019-04-01 11:57:39 +09:00
archive-zip.c archive: convert struct archiver_args to object_id 2019-04-01 11:57:39 +09:00
archive.c Merge branch 'en/merge-directory-renames' 2019-05-09 00:37:22 +09:00
archive.h Merge branch 'dl/no-extern-in-func-decl' 2019-05-13 23:50:32 +09:00
argv-array.c
argv-array.h
attr.c Merge branch 'rd/attr.c-comment-typofix' 2019-03-11 16:16:24 +09:00
attr.h Make git_check_attr() a void function 2018-09-12 15:15:34 -07:00
azure-pipelines.yml ci: parallelize testing on Windows 2019-01-29 09:26:47 -08:00
banned.h banned.h: mark strncat() as banned 2019-01-02 10:19:05 -08:00
base85.c
bisect.c bisect: make diff-tree output prettier 2019-03-01 07:31:38 +09:00
bisect.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
blame.c Merge branch 'en/merge-directory-renames' 2019-05-09 00:37:22 +09:00
blame.h Merge branch 'dl/no-extern-in-func-decl' 2019-05-13 23:50:32 +09:00
blob.c
blob.h
branch.c Merge branch 'nd/merge-quit' 2019-06-13 13:19:41 -07:00
branch.h Merge branch 'nd/merge-quit' 2019-06-13 13:19:41 -07:00
builtin.h Merge branch 'dl/no-extern-in-func-decl' 2019-05-13 23:50:32 +09:00
bulk-checkin.c convert has_sha1_file() callers to has_object_file() 2019-01-08 09:41:06 -08:00
bulk-checkin.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
bundle.c bundle verify: error out if called without an object database 2019-05-28 13:04:14 -07:00
bundle.h create_bundle(): drop unused "header" parameter 2019-01-24 12:35:44 -08:00
cache-tree.c Merge branch 'jk/loose-object-cache-oid' 2019-02-06 22:05:27 -08:00
cache-tree.h cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
cache.h fill_stat_cache_info(): prepare for an fsmonitor fix 2019-05-28 12:43:42 -07:00
chdir-notify.c
chdir-notify.h
check-builtins.sh
check_bindir
checkout.c
checkout.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
color.c
color.h
column.c column: drop unused "opts" parameter in item_length() 2019-01-24 12:35:44 -08:00
column.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
combine-diff.c Merge branch 'en/combined-all-paths' 2019-03-07 09:59:54 +09:00
command-list.txt Merge branch 'du/cherry-is-plumbing' into maint 2018-11-21 22:58:05 +09:00
commit-graph.c Merge branch 'js/commit-graph-parse-leakfix' 2019-05-19 16:45:28 +09:00
commit-graph.h commit-graph write: don't die if the existing graph is corrupt 2019-04-01 12:14:50 +09:00
commit-reach.c Merge branch 'sb/more-repo-in-api' 2019-02-05 14:26:09 -08:00
commit-reach.h Merge branch 'sb/more-repo-in-api' 2019-02-05 14:26:09 -08:00
commit-slab-decl.h
commit-slab-impl.h commit-slabs: move MAYBE_UNUSED out 2018-10-24 14:52:50 +09:00
commit-slab.h
commit.c Merge branch 'tb/unexpected' 2019-05-09 00:37:25 +09:00
commit.h Merge branch 'dl/no-extern-in-func-decl' 2019-05-13 23:50:32 +09:00
common-main.c trace2: report peak memory usage of the process 2019-04-16 13:37:07 +09:00
config.c Merge branch 'jh/trace2-sid-fix' 2019-05-13 23:50:31 +09:00
config.h Merge branch 'dl/no-extern-in-func-decl' 2019-05-13 23:50:32 +09:00
config.mak.dev Makefile: allow for combining DEVELOPER=1 and CFLAGS="..." 2019-02-24 07:35:07 -08:00
config.mak.in
config.mak.uname Merge branch 'id/windows-dep-aslr' 2019-05-19 16:45:27 +09:00
configure.ac autoconf: #include <libintl.h> when checking for gettext() 2019-04-19 13:57:23 +09:00
connect.c trace2:data: add trace2 transport child classification 2019-02-22 15:28:14 -08:00
connect.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
connected.c clone: do faster object check for partial clones 2019-04-21 14:08:53 +09:00
connected.h clone: do faster object check for partial clones 2019-04-21 14:08:53 +09:00
convert.c Merge branch 'jh/resize-convert-scratch-buffer' 2019-04-10 02:14:22 +09:00
convert.h
copy.c
credential-cache--daemon.c style: the opening '{' of a function is in a separate line 2018-12-10 15:41:09 +09:00
credential-cache.c
credential-store.c
credential.c
credential.h
csum-file.c
csum-file.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
ctype.c
daemon.c
date.c completion: add more parameter value completion 2019-02-20 12:31:56 -08:00
decorate.c
decorate.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
delta-islands.c tree-walk: store object_id in a separate member 2019-01-15 09:57:41 -08:00
delta-islands.h delta-islands.c: remove the_repository references 2018-11-12 14:50:06 +09:00
delta.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
detect-compiler
diff-delta.c
diff-lib.c mark_fsmonitor_valid(): mark the index as changed if needed 2019-05-28 12:43:43 -07:00
diff-no-index.c Merge branch 'nd/diff-parseopt-4' 2019-04-25 16:41:12 +09:00
diff.c Merge branch 'sb/format-patch-base-patch-id-fix' 2019-06-13 13:18:46 -07:00
diff.h Merge branch 'sb/format-patch-base-patch-id-fix' 2019-06-13 13:18:46 -07:00
diffcore-break.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
diffcore-delta.c diff.c: reduce implicit dependency on the_index 2018-09-21 09:48:10 -07:00
diffcore-order.c
diffcore-pickaxe.c Merge branch 'nd/the-index' into md/list-objects-filter-by-depth 2019-01-15 15:38:29 -08:00
diffcore-rename.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
diffcore.h diff.c: reduce implicit dependency on the_index 2018-09-21 09:48:10 -07:00
dir-iterator.c
dir-iterator.h
dir.c Merge branch 'jk/untracked-cache-more-fixes' 2019-05-09 00:37:28 +09:00
dir.h Merge branch 'dl/no-extern-in-func-decl' 2019-05-13 23:50:32 +09:00
editor.c trace2:data: add editor/pager child classification 2019-02-22 15:27:59 -08:00
entry.c fill_stat_cache_info(): prepare for an fsmonitor fix 2019-05-28 12:43:42 -07:00
environment.c Merge branch 'jk/save-getenv-result' 2019-01-29 12:47:54 -08:00
exec-cmd.c trace2: create new combined trace facility 2019-02-22 15:27:59 -08:00
exec-cmd.h *.[ch]: remove extern from function declarations using sed 2019-05-05 15:20:08 +09:00
fast-import.c fast-import: support 'encoding' commit header 2019-05-14 16:48:56 +09:00
fetch-negotiator.c
fetch-negotiator.h headers: normalize the spelling of some header guards 2018-10-18 13:39:35 +09:00
fetch-object.c fetch-object: set exact_oid when fetching 2018-09-13 13:57:31 -07:00
fetch-object.h fetch-object.h: add missing declaration (hdr-check) 2018-10-29 10:14:17 +09:00
fetch-pack.c Merge branch 'jt/clone-server-option' 2019-05-30 10:50:46 -07:00
fetch-pack.h fetch_pack(): drop unused parameters 2019-03-20 18:34:09 +09:00
fmt-merge-msg.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
fsck.c Use 'unsigned short' for mode, like diff_filespec does 2019-04-08 16:02:07 +09:00
fsck.h fsck: use oidset instead of oid_array for skipList 2018-09-12 15:17:46 -07:00
fsmonitor.c fsmonitor: force a refresh after the index was discarded 2019-05-08 12:03:48 +09:00
fsmonitor.h mark_fsmonitor_valid(): mark the index as changed if needed 2019-05-28 12:43:43 -07:00
fuzz-commit-graph.c fuzz-commit-graph: initialize repo object 2019-02-07 13:02:26 -08:00
fuzz-pack-headers.c fuzz: add basic fuzz testing target. 2018-10-15 14:28:59 +09:00
fuzz-pack-idx.c fuzz: add fuzz testing for packfile indices. 2018-10-15 14:29:03 +09:00
generate-cmdlist.sh help -a: do not list commands that are excluded from the build 2019-04-19 14:03:24 +09:00
gettext.c i18n: make GETTEXT_POISON a runtime option 2018-11-09 11:25:19 +09:00
gettext.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
git-add--interactive.perl
git-archimport.perl
git-bisect.sh bisect--helper: `bisect_start` shell function partially in C 2019-01-02 10:23:03 -08:00
git-compat-util.h Merge branch 'cc/access-on-aix-workaround' 2019-05-13 23:50:35 +09:00
git-cvsexportcommit.perl cvsexportcommit: force crlf translation 2019-05-07 18:23:27 +09:00
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh mergetool: use get_merge_tool function 2019-05-13 23:11:59 +09:00
git-filter-branch.sh
git-instaweb.sh git-instaweb: add Python builtin http.server support 2019-01-28 10:57:44 -08:00
git-legacy-stash.sh legacy stash: fix "rudimentary backport of -q" 2019-03-08 10:37:58 +09:00
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh Merge branch 'dl/difftool-mergetool' 2019-05-19 16:45:30 +09:00
git-mergetool.sh mergetool: use get_merge_tool function 2019-05-13 23:11:59 +09:00
git-p4.py Merge branch 'mm/p4-unshelve-windows-fix' 2019-06-17 10:15:19 -07:00
git-parse-remote.sh
git-quiltimport.sh git-quiltimport: add --keep-non-patch option 2019-01-07 15:29:34 -08:00
git-rebase--preserve-merges.sh rebase: fold git-rebase--common into the -p backend 2019-05-15 10:57:32 +09:00
git-request-pull.sh request-pull: warn if the remote object is not the same as the local one 2019-05-28 13:06:25 -07:00
git-send-email.perl Merge branch 'ab/send-email-transferencoding-fix' 2019-06-13 13:18:46 -07:00
git-sh-i18n.sh i18n: make GETTEXT_POISON a runtime option 2018-11-09 11:25:19 +09:00
git-sh-setup.sh stash: optionally use the scripted version again 2019-03-07 09:41:40 +09:00
git-submodule.sh Merge branch 'km/empty-repo-is-still-a-repo' 2019-05-09 00:37:23 +09:00
git-svn.perl
git-web--browse.sh
git.c Merge branch 'po/git-help-on-git-itself' 2019-06-17 10:15:19 -07:00
git.rc
gpg-interface.c Merge branch 'mg/gpg-fingerprint' 2018-11-03 00:53:58 +09:00
gpg-interface.h gpg-interface.c: obtain primary key fingerprint as well 2018-10-23 08:00:43 +09:00
graph.c Merge branch 'np/log-graph-octopus-fix' into maint 2018-11-21 22:57:49 +09:00
graph.h
grep.c grep: fail if call could output and name is null 2019-05-28 10:57:07 -07:00
grep.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
hash.h hash: add a function to lookup hash algorithm by length 2019-04-01 11:57:39 +09:00
hashmap.c
hashmap.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
help.c Merge branch 'jk/help-unknown-ref-fix' 2019-06-13 13:19:42 -07:00
help.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
hex.c hex: introduce functions to print arbitrary hashes 2018-11-14 16:54:52 +09:00
http-backend.c http-backend: allow 64-character hex names 2019-04-01 11:57:38 +09:00
http-fetch.c
http-push.c Merge branch 'cb/http-push-null-in-message-fix' 2019-05-19 16:45:35 +09:00
http-walker.c Merge branch 'bc/hash-transition-16' 2019-04-25 16:41:17 +09:00
http.c Make fread/fwrite-like functions in http.c more like fread/fwrite. 2019-05-08 12:15:25 +09:00
http.h Merge branch 'dl/no-extern-in-func-decl' 2019-05-13 23:50:32 +09:00
ident.c Merge branch 'ps/stash-in-c' 2019-04-22 11:14:43 +09:00
imap-send.c Merge branch 'nd/imap-send-typofix' 2019-02-12 09:00:25 -08:00
interdiff.c
interdiff.h
iterator.h
json-writer.c
json-writer.h json-writer.h: add missing include (hdr-check) 2018-09-20 11:50:00 -07:00
khash.h Merge branch 'dl/no-extern-in-func-decl' 2019-05-13 23:50:32 +09:00
kwset.c
kwset.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
levenshtein.c
levenshtein.h
line-log.c Merge branch 'en/merge-directory-renames' 2019-05-09 00:37:22 +09:00
line-log.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
line-range.c line-range.c: remove implicit dependency on the_index 2018-09-21 09:51:18 -07:00
line-range.h line-range.c: remove implicit dependency on the_index 2018-09-21 09:51:18 -07:00
linear-assignment.c linear-assignment: fix potential out of bounds memory access 2018-09-14 09:10:26 -07:00
linear-assignment.h
list-objects-filter-options.c Merge branch 'md/list-objects-filter-parse-msgfix' 2019-06-21 11:24:10 -07:00
list-objects-filter-options.h list-objects-filter: disable 'sparse:path' filters 2019-05-29 11:05:34 -07:00
list-objects-filter.c Merge branch 'md/list-objects-filter-memfix' 2019-06-21 11:24:09 -07:00
list-objects-filter.h list-objects-filter.c: remove implicit dependency on the_index 2018-11-12 14:50:05 +09:00
list-objects.c rev-list: detect broken root trees 2019-04-10 12:59:39 +09:00
list-objects.h list-objects: consume sparse tree walk 2019-01-17 13:44:39 -08:00
list.h
ll-merge.c Merge branch 'en/merge-path-collision' 2019-01-04 13:33:32 -08:00
ll-merge.h Merge branch 'en/merge-path-collision' 2019-01-04 13:33:32 -08:00
lockfile.c
lockfile.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
log-tree.c Merge branch 'wh/author-committer-ident-config' 2019-03-07 09:59:53 +09:00
log-tree.h
ls-refs.c upload-pack: strip namespace from symref data 2019-05-28 10:02:00 -07:00
ls-refs.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
mailinfo.c mailinfo: support format=flowed 2018-08-29 13:05:35 -07:00
mailinfo.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
mailmap.c
mailmap.h
match-trees.c Use 'unsigned short' for mode, like diff_filespec does 2019-04-08 16:02:07 +09:00
mem-pool.c
mem-pool.h
merge-blobs.c merge-blobs.c: remove implicit dependency on the_index 2018-09-21 09:48:10 -07:00
merge-blobs.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
merge-recursive.c Merge branch 'en/merge-directory-renames-fix' 2019-06-06 14:03:36 -07:00
merge-recursive.h merge-recursive.c: remove implicit dependency on the_index 2019-01-14 12:13:04 -08:00
merge.c read-cache.c: kill read_index() 2019-01-14 12:13:04 -08:00
mergesort.c
mergesort.h
midx.c midx: add packs to packed_git linked list 2019-05-07 13:48:42 +09:00
midx.h midx: pass a repository pointer 2019-05-07 13:48:41 +09:00
name-hash.c cache.h: flip NO_THE_INDEX_COMPATIBILITY_MACROS switch 2019-01-24 11:55:06 -08:00
notes-cache.c notes-cache.c: remove the_repository references 2018-11-12 14:50:06 +09:00
notes-cache.h notes-cache.c: remove the_repository references 2018-11-12 14:50:06 +09:00
notes-merge.c notes-merge: switch to use the_hash_algo 2019-04-01 11:57:37 +09:00
notes-merge.h notes-merge.c: remove implicit dependency on the_index 2018-11-12 14:50:05 +09:00
notes-utils.c notes-utils.c: remove the_repository references 2019-01-14 12:13:04 -08:00
notes-utils.h notes-utils.c: remove the_repository references 2019-01-14 12:13:04 -08:00
notes.c Merge branch 'en/merge-directory-renames' 2019-05-09 00:37:22 +09:00
notes.h notes: correct documentation of format_display_notes() 2019-05-07 19:08:10 +09:00
object-store.h Merge branch 'ds/object-info-for-prefetch-fix' 2019-06-17 10:15:14 -07:00
object.c object: fix leak of shallow_stat 2019-02-07 13:02:28 -08:00
object.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
oidmap.c convert hashmap comparison functions to oideq() 2018-08-29 11:32:49 -07:00
oidmap.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
oidset.c oidset: uninline oidset_init() 2018-10-04 11:12:14 -07:00
oidset.h khash: move oid hash table definition 2019-04-01 11:57:37 +09:00
pack-bitmap-write.c pack-bitmap: replace sha1_to_hex 2019-04-01 11:57:37 +09:00
pack-bitmap.c Merge branch 'bc/hash-transition-16' 2019-04-25 16:41:17 +09:00
pack-bitmap.h pack-bitmap: switch hash tables to use struct object_id 2019-04-01 11:57:37 +09:00
pack-check.c pack-check.c: remove the_repository references 2018-11-12 14:50:06 +09:00
pack-objects.c pack-objects: drop unused parameter from oe_map_new_pack() 2019-02-14 15:26:15 -08:00
pack-objects.h pack-objects: drop unused parameter from oe_map_new_pack() 2019-02-14 15:26:15 -08:00
pack-revindex.c pack-revindex: open index if necessary 2019-04-16 16:58:21 +09:00
pack-revindex.h pack-revindex: open index if necessary 2019-04-16 16:58:21 +09:00
pack-write.c convert "hashcmp() != 0" to "!hasheq()" 2018-08-29 11:32:49 -07:00
pack.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
packfile.c Merge branch 'mh/import-transport-fd-fix' 2019-06-13 13:19:43 -07:00
packfile.h Merge branch 'nd/sha1-name-c-wo-the-repository' 2019-05-09 00:37:25 +09:00
pager.c trace2:data: add editor/pager child classification 2019-02-22 15:27:59 -08:00
parse-options-cb.c Merge branch 'nd/diff-parseopt' 2019-05-30 10:50:44 -07:00
parse-options.c Merge branch 'nd/diff-parseopt' 2019-05-30 10:50:44 -07:00
parse-options.h Merge branch 'js/parseopt-unknown-cb-returns-an-enum' 2019-05-19 16:45:34 +09:00
patch-delta.c patch-delta: handle truncated copy parameters 2018-08-30 10:30:23 -07:00
patch-ids.c format-patch: make --base patch-id output stable 2019-05-08 19:27:43 +09:00
patch-ids.h format-patch: make --base patch-id output stable 2019-05-08 19:27:43 +09:00
path.c Merge branch 'nd/rewritten-ref-is-per-worktree' 2019-04-10 02:14:23 +09:00
path.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
pathspec.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
pathspec.h dir.c: move, rename and export match_attrs() 2018-11-19 10:50:33 +09:00
pkt-line.c pkt-line: drop 'const'-ness of a param to set_packet_header() 2019-05-16 13:29:06 +09:00
pkt-line.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
preload-index.c mark_fsmonitor_valid(): mark the index as changed if needed 2019-05-28 12:43:43 -07:00
pretty.c pretty: drop unused strbuf from parse_padding_placeholder() 2019-03-20 18:34:09 +09:00
pretty.h Merge branch 'sb/more-repo-in-api' 2019-02-05 14:26:09 -08:00
prio-queue.c prio-queue: add 'peek' operation 2018-11-02 12:14:21 +09:00
prio-queue.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
progress.c Merge branch 'sg/progress-off-by-one-fix' 2019-05-30 10:50:45 -07:00
progress.h Merge branch 'sg/overlong-progress-fix' 2019-04-25 16:41:19 +09:00
prompt.c
prompt.h
protocol.c tests: define GIT_TEST_PROTOCOL_VERSION 2019-03-07 10:02:42 +09:00
protocol.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
quote.c Indent code with TABs 2018-12-09 12:37:32 +09:00
quote.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
range-diff.c format-patch: do not let its diff-options affect --range-diff 2018-11-30 13:47:55 +09:00
range-diff.h format-patch: do not let its diff-options affect --range-diff 2018-11-30 13:47:55 +09:00
reachable.c prune: use bitmaps for reachability traversal 2019-02-14 15:25:33 -08:00
reachable.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
read-cache.c Merge branch 'js/fsmonitor-unflake' 2019-06-17 10:15:18 -07:00
rebase-interactive.c rebase-interactive: rewrite edit_todo_list() to handle the initial edit 2019-03-07 09:17:57 +09:00
rebase-interactive.h rebase-interactive: rewrite edit_todo_list() to handle the initial edit 2019-03-07 09:17:57 +09:00
ref-filter.c ref-filter.c: find disjoint pattern prefixes 2019-06-27 13:14:06 -07:00
ref-filter.h parse_opt_ref_sorting: always use with NONEG flag 2019-03-21 12:03:35 +09:00
reflog-walk.c
reflog-walk.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
refs.c Merge branch 'nd/worktree-name-sanitization' 2019-06-13 13:19:40 -07:00
refs.h Merge branch 'nd/worktree-name-sanitization' 2019-06-13 13:19:40 -07:00
refspec.c refspec: make hash size independent 2019-04-01 11:57:39 +09:00
refspec.h
remote-curl.c i18n: fix typos found during l10n for git 2.22.0 2019-06-03 11:10:53 -07:00
remote-testsvn.c
remote.c Merge branch 'dr/ref-filter-push-track-fix' 2019-05-09 00:37:26 +09:00
remote.h Merge branch 'dl/no-extern-in-func-decl' 2019-05-13 23:50:32 +09:00
replace-object.c Merge branch 'ds/commit-graph-with-grafts' into maint 2018-11-21 22:57:47 +09:00
replace-object.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
repository.c Merge branch 'ma/clear-repository-format' 2019-03-20 15:16:07 +09:00
repository.h trace2: create new combined trace facility 2019-02-22 15:27:59 -08:00
rerere.c read-cache.c: kill read_index() 2019-01-14 12:13:04 -08:00
rerere.h rerere.c: remove the_repository references 2018-11-12 14:50:06 +09:00
resolve-undo.c
resolve-undo.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
revision.c revision: keep topo-walk free of unintersting commits 2019-05-28 10:39:49 -07:00
revision.h Merge branch 'en/combined-all-paths' 2019-03-07 09:59:54 +09:00
run-command.c trace2: create new combined trace facility 2019-02-22 15:27:59 -08:00
run-command.h *.[ch]: remove extern from function declarations using sed 2019-05-05 15:20:08 +09:00
send-pack.c Merge branch 'jk/loose-object-cache-oid' 2019-02-06 22:05:27 -08:00
send-pack.h
sequencer.c Merge branch 'pw/rebase-edit-message-for-replayed-merge' 2019-06-13 13:19:43 -07:00
sequencer.h Merge branch 'pw/clean-sequencer-state-upon-final-commit' 2019-05-13 23:50:35 +09:00
serve.c pack-protocol.txt: accept error packets in any context 2019-01-02 13:05:30 -08:00
serve.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
server-info.c Merge branch 'ew/server-info-remove-crufts' 2019-06-17 10:15:15 -07:00
setup.c sha1-name.c: remove the_repo from maybe_die_on_misspelt_object_name 2019-04-16 18:56:53 +09:00
sh-i18n--envsubst.c trace2: create new combined trace facility 2019-02-22 15:27:59 -08:00
sha1-array.c sha1-array: provide oid_array_filter 2018-12-05 11:42:31 +09:00
sha1-array.h sha1-array: provide oid_array_filter 2018-12-05 11:42:31 +09:00
sha1-file.c Merge branch 'ds/object-info-for-prefetch-fix' 2019-06-17 10:15:14 -07:00
sha1-lookup.c
sha1-lookup.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
sha1-name.c Merge branch 'jk/get-oid-indexed-object-name' 2019-05-19 16:45:35 +09:00
sha1dc_git.c
sha1dc_git.h
shallow.c fetch-pack: do not take shallow lock unnecessarily 2019-01-10 14:53:35 -08:00
shell.c
shortlog.h
sideband.c Merge branch 'jt/fetch-v2-sideband' 2019-02-05 14:26:11 -08:00
sideband.h {fetch,upload}-pack: sideband v2 fetch response 2019-01-17 11:25:07 -08:00
sigchain.c
sigchain.h
split-index.c Merge branch 'nd/split-index-null-base-fix' 2019-03-07 09:59:56 +09:00
split-index.h
strbuf.c Merge branch 'ps/stash-in-c' 2019-04-22 11:14:43 +09:00
strbuf.h Merge branch 'ps/stash-in-c' 2019-04-22 11:14:43 +09:00
streaming.c Merge branch 'jk/loose-object-cache-oid' 2019-02-06 22:05:27 -08:00
streaming.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
string-list.c style: the opening '{' of a function is in a separate line 2018-12-10 15:41:09 +09:00
string-list.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
sub-process.c trace2:data: add trace2 sub-process classification 2019-02-22 15:28:12 -08:00
sub-process.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
submodule-config.c submodule-config.c: use repo_get_oid for reading .gitmodules 2019-04-16 18:56:53 +09:00
submodule-config.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
submodule.c submodule: drop unused prefix parameter from some functions 2019-05-13 14:22:54 +09:00
submodule.h submodule: drop unused prefix parameter from some functions 2019-05-13 14:22:54 +09:00
symlinks.c Indent code with TABs 2018-12-09 12:37:32 +09:00
tag.c tag: express constant in terms of the_hash_algo 2018-10-15 12:53:16 +09:00
tag.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
tar.h
tempfile.c reopen_tempfile(): truncate opened file 2018-09-05 09:46:16 -07:00
tempfile.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
thread-utils.c thread-utils: macros to unconditionally compile pthreads API 2018-10-29 11:22:48 +09:00
thread-utils.h thread-utils: macros to unconditionally compile pthreads API 2018-10-29 11:22:48 +09:00
tmp-objdir.c
tmp-objdir.h
trace.c
trace.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
trace2.c Merge branch 'jh/trace2' 2019-05-13 23:50:35 +09:00
trace2.h trace2: rename environment variables to GIT_TRACE2* 2019-05-28 10:20:34 -07:00
trailer.c pretty: add support for separator option in %(trailers) 2019-01-29 10:03:32 -08:00
trailer.h pretty: add support for separator option in %(trailers) 2019-01-29 10:03:32 -08:00
transport-helper.c Merge branch 'mh/import-transport-fd-fix' 2019-06-13 13:19:43 -07:00
transport-internal.h transport: list refs before fetch if necessary 2018-10-07 09:53:19 +09:00
transport.c Merge branch 'jt/clone-server-option' 2019-05-09 00:37:25 +09:00
transport.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
tree-diff.c Use 'unsigned short' for mode, like diff_filespec does 2019-04-08 16:02:07 +09:00
tree-walk.c Use 'unsigned short' for mode, like diff_filespec does 2019-04-08 16:02:07 +09:00
tree-walk.h Merge branch 'dl/no-extern-in-func-decl' 2019-05-13 23:50:32 +09:00
tree.c Merge branch 'nd/the-index-final' 2019-02-06 22:05:23 -08:00
tree.h tree.c: make read_tree*() take 'struct repository *' 2018-11-19 10:50:33 +09:00
unicode-width.h Merge branch 'bb/unicode-12.1-reiwa' 2019-06-17 10:15:18 -07:00
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c Merge branch 'jt/batch-fetch-blobs-in-diff' 2019-04-25 16:41:19 +09:00
unpack-trees.h unpack-trees: rename "gently" flag to "quiet" 2019-03-24 21:35:34 +09:00
upload-pack.c Merge branch 'jk/HEAD-symref-in-xfer-namespaces' 2019-06-17 10:15:15 -07:00
upload-pack.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
url.c url: do not allow %00 to represent NUL in URLs 2019-06-04 14:48:25 -07:00
url.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
urlmatch.c
urlmatch.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
usage.c trace2: create new combined trace facility 2019-02-22 15:27:59 -08:00
userdiff.c Merge branch 'ml/userdiff-rust' 2019-06-21 11:24:08 -07:00
userdiff.h notes-cache.c: remove the_repository references 2018-11-12 14:50:06 +09:00
utf8.c utf8: handle systems that don't write BOM for UTF-16 2019-02-11 18:20:07 -08:00
utf8.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
varint.c
varint.h *.[ch]: remove extern from function declarations using spatch 2019-05-05 15:20:06 +09:00
version.c
version.h
versioncmp.c
walker.c tree-walk: store object_id in a separate member 2019-01-15 09:57:41 -08:00
walker.h
wildmatch.c wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode 2018-10-29 13:19:22 +09:00
wildmatch.h wildmatch: change behavior of "foo**bar" in WM_PATHNAME mode 2018-10-29 13:19:22 +09:00
worktree.c Merge branch 'nd/corrupt-worktrees' 2019-06-13 13:19:41 -07:00
worktree.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +09:00
wrap-for-bin.sh
wrapper.c wrapper: move is_empty_file() and rename it as is_empty_or_missing_file() 2019-01-02 10:23:02 -08:00
write-or-die.c
ws.c Merge branch 'nd/the-index' 2018-10-19 13:34:02 +09:00
wt-status.c Merge branch 'jk/unused-params-final-batch' 2019-06-13 13:19:34 -07:00
wt-status.h merge: cleanup messages like commit 2019-04-18 13:49:29 +09:00
xdiff-interface.c completion: add more parameter value completion 2019-02-20 12:31:56 -08:00
xdiff-interface.h *.[ch]: manually align parameter lists 2019-05-05 15:20:10 +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-.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