A fork of Git containing Microsoft-specific patches.
Перейти к файлу
Ævar Arnfjörð Bjarmason 52106430dc refs/files: remove "name exist?" check in lock_ref_oid_basic()
In lock_ref_oid_basic() we'll happily lock a reference that doesn't
exist yet. That's normal, and is how references are initially born,
but we don't need to retain checks here in lock_ref_oid_basic() about
the state of the ref, when what we're checking is either checked
already, or something we're about to discover by trying to lock the
ref with raceproof_create_file().

The one exception is the caller in files_reflog_expire(), who passes
us a "type" to find out if the reference is a symref or not. We can
move the that logic over to that caller, which can now defer its
discovery of whether or not the ref is a symref until it's needed. In
the preceding commit an exhaustive regression test was added for that
case in a new test in "t1417-reflog-updateref.sh".

The improved diagnostics here were added in
5b2d8d6f21 (lock_ref_sha1_basic(): improve diagnostics for ref D/F
conflicts, 2015-05-11), and then much of the surrounding code went
away recently in my 245fbba46d (refs/files: remove unused "errno ==
EISDIR" code, 2021-08-23).

The refs_resolve_ref_unsafe() code being removed here looks like it
should be tasked with doing that, but it's actually redundant to other
code.

The reason for that is as noted in 245fbba46d this once widely used
function now only has a handful of callers left, which all handle this
case themselves.

To the extent that we're racy between their check and ours removing
this check actually improves the situation, as we'll be doing fewer
things between the not-under-lock initial check and acquiring the
lock.

Why this is OK for all the remaining callers of lock_ref_oid_basic()
is noted below. There are only two of those callers:

* "git branch -[cm] <oldbranch> <newbranch>":

  In files_copy_or_rename_ref() we'll call this when we copy or rename
  refs via rename_ref() and copy_ref(). but only after we've checked
  if the refname exists already via its own call to
  refs_resolve_ref_unsafe() and refs_rename_ref_available().

  As the updated comment to the latter here notes neither of those are
  actually needed. If we delete not only this code but also
  refs_rename_ref_available() we'll do just fine, we'll just emit a
  less friendly error message if e.g. "git branch -m A B/C" would have
  a D/F conflict with a "B" file.

  Actually we'd probably die before that in case reflogs for the
  branch existed, i.e. when the try to rename() or copy_file() the
  relevant reflog, since if we've got a D/F conflict with a branch
  name we'll probably also have the same with its reflogs (but not
  necessarily, we might have reflogs, but it might not).

  As some #leftoverbits that code seems buggy to me, i.e. the reflog
  "protocol" should be to get a lock on the main ref, and then perform
  ref and/or reflog operations. That code dates back to
  c976d415e5 (git-branch: add options and tests for branch renaming,
  2006-11-28) and probably pre-dated the solidifying of that
  convention. But in any case, that edge case is not our bug or
  problem right now.

* "git reflog expire <ref>":

  In files_reflog_expire() we'll call this without previous ref
  existence checking in files-backend.c, but that code is in turn
  called by code that's just finished checking if the refname whose
  reflog we're expiring exists.

  See ae35e16cd4 (reflog expire: don't lock reflogs using previously
  seen OID, 2021-08-23) for the current state of that code, and
  5e6f003ca8 (reflog_expire(): ignore --updateref for symbolic
  references, 2015-03-03) for the code we'd break if we only did a
  "update = !!ref" here, which is covered by the aforementioned
  regression test in "t1417-reflog-updateref.sh".

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-10-16 11:17:02 -07:00
.github Merge branch 'cb/ci-use-upload-artifacts-v1' into maint 2021-10-12 13:51:38 -07:00
Documentation Thirteenth batch 2021-10-14 09:55:16 -07:00
block-sha1 block-sha1: drop trailing semicolon from macro definition 2021-03-17 10:20:01 -07:00
builtin Merge branch 'ab/align-parse-options-help' 2021-10-13 15:15:58 -07:00
ci Merge branch 'cb/ci-build-pedantic' into maint 2021-10-12 13:51:31 -07:00
compat Merge branch 'jh/builtin-fsmonitor-part1' 2021-10-13 15:15:58 -07:00
contrib Merge branch 'ab/help-config-vars' 2021-10-13 15:15:58 -07:00
ewah use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
git-gui Merge https://github.com/prati0100/git-gui 2021-03-04 12:38:50 -08:00
gitk-git Merge remote-tracking branch 'paulus/master' into pm/gitk-update 2020-10-03 10:06:27 -07:00
gitweb Merge branch 'gh/gitweb-branch-sort' 2021-09-10 11:46:32 -07:00
mergetools mergetools/kdiff3: make kdiff3 work on Windows too 2021-06-08 10:26:16 +09:00
negotiator use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
perl Merge branch 'ab/send-email-optim' 2021-07-22 13:05:54 -07:00
po l10n: sv.po: Update Swedish translation (5230t0f0u) 2021-08-16 06:54:20 +08:00
ppc
refs refs/files: remove "name exist?" check in lock_ref_oid_basic() 2021-10-16 11:17:02 -07:00
sha1collisiondetection@855827c583
sha1dc
sha256 hash: implement and use a context cloning function 2020-02-24 09:33:21 -08:00
t reflog tests: add --updateref tests 2021-10-16 11:17:02 -07:00
templates hook: add sample template for push-to-checkout 2020-10-16 08:47:02 -07:00
trace2 Merge branch 'jh/builtin-fsmonitor-part1' 2021-10-13 15:15:58 -07:00
xdiff Merge branch 'ab/pickaxe-pcre2' 2021-07-13 16:52:50 -07:00
.cirrus.yml ci: update freebsd 12 cirrus job 2021-08-12 14:00:52 -07:00
.clang-format
.editorconfig
.gitattributes CoC: explicitly take any whitespace breakage 2021-01-04 09:44:49 -08:00
.gitignore Merge branch 'ab/make-sparse-for-real' 2021-10-13 15:15:58 -07:00
.gitmodules
.mailmap Add entry for Ramkumar Ramachandra 2021-03-08 09:56:34 -08:00
.travis.yml ci: remove GETTEXT_POISON jobs 2021-01-21 15:50:00 -08:00
.tsan-suppressions replace-object: make replace operations thread-safe 2020-01-17 13:52:14 -08:00
CODE_OF_CONDUCT.md CoC: update to version 2.0 + local changes 2021-01-13 17:45:04 -08:00
COPYING
GIT-VERSION-GEN The first batch post 2.33 2021-08-24 15:33:23 -07:00
INSTALL INSTALL: mention that we need libcurl 7.19.4 or newer to build 2021-09-13 10:39:03 -07:00
LGPL-2.1
Makefile Merge branch 'ab/make-sparse-for-real' 2021-10-13 15:15:58 -07:00
README.md ci: retire the Azure Pipelines definition 2020-04-10 10:30:40 -07:00
RelNotes Git 2.33.1 2021-10-12 13:51:59 -07:00
SECURITY.md SECURITY: describe how to report vulnerabilities 2021-03-27 15:13:02 -07:00
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 *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
add-interactive.h
add-patch.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07:00
advice.c Merge branch 'ds/add-rm-with-sparse-index' 2021-10-13 15:15:56 -07:00
advice.h Merge branch 'en/pull-conflicting-options' into maint 2021-10-12 13:51:36 -07:00
alias.c
alias.h
alloc.c commit: move members graph_pos, generation to a slab 2020-06-17 14:37:30 -07:00
alloc.h object: drop parsed_object_pool->commit_count 2020-06-17 14:37:14 -07:00
apply.c Merge branch 'jc/trivial-threeway-binary-merge' into maint 2021-10-12 13:51:45 -07:00
apply.h
archive-tar.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
archive-zip.c archive: read short blobs in archive.c::write_archive_entry() 2020-09-19 15:56:05 -07:00
archive.c archive: convert queue_directory to struct object_id 2021-08-27 14:19:00 -07:00
archive.h archive: expand only a single %(describe) per archive 2021-03-11 13:22:44 -08:00
attr.c attr: be careful about sparse directories 2021-09-07 22:41:10 -07:00
attr.h *: remove 'const' qualifier for struct index_state 2021-04-14 13:46:00 -07:00
banned.h banned.h: mark ctime_r() and asctime_r() as banned 2020-12-02 14:30:39 -08:00
base85.c
bisect.c bisect: simplify return code from bisect_checkout() 2021-07-28 10:57:37 -07:00
bisect.h bisect: combine args passed to find_bisection() 2020-08-07 15:13:03 -07:00
blame.c hash: provide per-algorithm null OIDs 2021-04-27 16:31:39 +09:00
blame.h blame: simplify 'setup_blame_bloom_data' interface 2020-11-01 15:54:15 -08:00
blob.c object: drop parsed_object_pool->commit_count 2020-06-17 14:37:14 -07:00
blob.h
bloom.c Merge branch 'ah/plugleaks' 2021-05-07 12:47:41 +09:00
bloom.h bloom: encode out-of-bounds filters as non-empty 2020-09-17 21:55:50 -07:00
branch.c advice: remove read uses of most global `advice_` variables 2021-08-25 12:07:52 -07:00
branch.h
builtin.h builtin.h: remove cmd_tar_tree() declaration 2021-10-01 14:39:46 -07:00
bulk-checkin.c pack-write: split up finish_tmp_packfile() function 2021-09-09 18:23:11 -07:00
bulk-checkin.h
bundle.c bundle API: change "flags" to be "extra_index_pack_args" 2021-09-07 10:59:23 -07:00
bundle.h bundle API: change "flags" to be "extra_index_pack_args" 2021-09-07 10:59:23 -07:00
cache-tree.c Merge branch 'ds/commit-and-checkout-with-sparse-index' 2021-08-04 13:28:53 -07:00
cache-tree.h cache-tree: extract subtree_pos() 2021-01-23 17:14:07 -08:00
cache.h Merge branch 'ab/designated-initializers' 2021-10-11 10:21:48 -07:00
cbtree.c oidtree: a crit-bit tree for odb_loose_cache 2021-07-07 21:28:04 -07:00
cbtree.h cbtree.h: define cb_init() in terms of CBTREE_INIT 2021-09-27 14:48:00 -07:00
chdir-notify.c
chdir-notify.h
check-builtins.sh
checkout.c *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
checkout.h
chunk-format.c csum-file.h: increase hashfile buffer size 2021-05-19 16:41:21 +09:00
chunk-format.h chunk-format: create read chunk API 2021-02-18 13:38:16 -08:00
color.c color.c: alias RGB colors 8-15 to aixterm colors 2020-02-11 11:19:00 -08:00
color.h
column.c Merge branch 'jk/strvec' 2020-08-10 10:23:57 -07:00
column.h
combine-diff.c Merge branch 'ab/pickaxe-pcre2' 2021-07-13 16:52:50 -07:00
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 'js/run-command-close-packs' 2021-09-20 15:20:45 -07:00
commit-graph.h revision: avoid hitting packfiles when commits are in commit-graph 2021-08-09 09:51:12 -07:00
commit-reach.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
commit-reach.h commit-graph: return 64-bit generation number 2021-01-18 16:21:18 -08:00
commit-slab-decl.h Merge branch 'sg/commit-graph-cleanups' into master 2020-07-30 13:20:30 -07:00
commit-slab-impl.h commit-slab: add a function to deep free entries on the slab 2020-06-08 12:28:49 -07:00
commit-slab.h commit-slab: add a function to deep free entries on the slab 2020-06-08 12:28:49 -07:00
commit.c advice: move advice.graftFileDeprecated squashing to commit.[ch] 2021-08-25 12:07:52 -07:00
commit.h advice: move advice.graftFileDeprecated squashing to commit.[ch] 2021-08-25 12:07:52 -07:00
common-main.c
config.c config.c: remove unused git_config_key_is_valid() 2021-09-28 14:54:15 -07:00
config.h Merge branch 'ab/retire-git-config-key-is-valid' 2021-10-11 10:21:47 -07:00
config.mak.dev Makefile: restrict -Wpedantic and -Wno-pedantic-ms-format better 2021-09-28 21:15:53 -07:00
config.mak.in
config.mak.uname Merge branch 'ab/config-based-hooks-1' 2021-10-13 15:15:57 -07:00
configure.ac Remove support for v1 of the PCRE library 2021-01-23 21:15:43 -08:00
connect.c Merge branch 'ah/connect-parse-feature-v0-fix' into maint 2021-10-12 13:51:49 -07:00
connect.h Merge branch 'bc/sha-256-part-2' 2020-07-06 22:09:13 -07:00
connected.c Merge branch 'ps/fetch-optim' 2021-09-20 15:20:39 -07:00
connected.h connected: refactor iterator to return next object ID directly 2021-09-01 12:43:56 -07:00
convert.c convert: release strbuf to avoid leak 2021-07-26 12:19:20 -07:00
convert.h Merge branch 'ds/sparse-index-protections' 2021-04-30 13:50:26 +09:00
copy.c
credential.c credential: fix leak in credential_apply_config() 2021-08-25 11:41:30 -07:00
credential.h *.h: move some *_INIT to designated initializers 2021-07-01 12:31:45 -07:00
csum-file.c use xopen() to handle fatal open(2) failures 2021-08-25 14:39:08 -07:00
csum-file.h Merge branch 'tb/midx-use-checksum' 2021-07-16 17:42:46 -07:00
ctype.c
daemon.c Merge branch 'rs/daemon-sanitize-dir-sep' 2021-04-08 13:23:26 -07:00
date.c comments: avoid using the gender of our users 2021-06-16 11:25:11 +09:00
decorate.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
decorate.h
delta-islands.c oid_array: rename source file from sha1-array 2020-03-30 10:59:08 -07:00
delta-islands.h
delta.h
detect-compiler build: catch clang that identifies itself as "$VENDOR clang" 2021-08-06 13:35:37 -07:00
diff-delta.c
diff-lib.c Merge branch 'dd/diff-files-unmerged-fix' into maint 2021-10-12 13:51:40 -07:00
diff-merges.c diff-index: restore -c/--cc options handling 2021-09-07 11:11:35 -07:00
diff-merges.h diff-index: restore -c/--cc options handling 2021-09-07 11:11:35 -07:00
diff-no-index.c dir: introduce readdir_skip_dot_and_dotdot() helper 2021-05-27 14:02:37 +09:00
diff.c *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
diff.h diff.h: move pickaxe fields together again 2021-05-11 12:47:31 +09:00
diffcore-break.c diff: restrict when prefetching occurs 2020-04-07 16:09:29 -07:00
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c xdiff-interface: replace discard_hunk_line() with a flag 2021-05-11 12:47:31 +09:00
diffcore-rename.c Merge branch 'en/ort-perf-batch-15' 2021-08-24 15:32:39 -07:00
diffcore-rotate.c diff: --{rotate,skip}-to=<path> 2021-02-16 09:30:42 -08:00
diffcore.h merge-ort: store filepairs and filespecs in our mem_pool 2021-07-30 09:01:19 -07:00
dir-iterator.c
dir-iterator.h
dir.c Merge branch 'ds/add-rm-with-sparse-index' 2021-10-13 15:15:56 -07:00
dir.h Merge branch 'ds/sparse-index-ignored-files' 2021-09-20 15:20:44 -07:00
editor.c advice: remove read uses of most global `advice_` variables 2021-08-25 12:07:52 -07:00
entry.c entry: show finer-grained counter in "Filtering content" progress line 2021-09-09 09:58:19 -07:00
entry.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
environment.c Merge branch 'jk/ref-paranoia' 2021-10-11 10:21:47 -07:00
environment.h environment: make `getenv_safe()` a public function 2021-01-15 13:03:45 -08:00
exec-cmd.c strvec: rename struct fields 2020-07-30 19:18:06 -07:00
exec-cmd.h argv-array: rename to strvec 2020-07-28 15:02:17 -07:00
fetch-negotiator.c repo-settings.c: simplify the setup 2021-09-22 13:15:00 -07:00
fetch-negotiator.h
fetch-pack.c fetch-pack: optimize loading of refs via commit graph 2021-09-01 12:43:56 -07:00
fetch-pack.h fetch: teach independent negotiation (no packfile) 2021-05-05 10:41:29 +09:00
fmt-merge-msg.c fmt-merge-msg: free newly allocated temporary strings when done 2021-07-26 12:19:19 -07:00
fmt-merge-msg.h Lib-ify fmt-merge-msg 2020-03-24 15:04:43 -07:00
fsck.c fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW 2021-05-04 11:52:02 +09:00
fsck.h fsck: warn about symlinked dotfiles we'll open with O_NOFOLLOW 2021-05-04 11:52:02 +09:00
fsmonitor.c Merge branch 'jh/fsmonitor-prework' 2021-03-19 15:25:37 -07:00
fsmonitor.h fsmonitor: add assertion that fsmonitor is valid to check_removed 2021-03-18 13:31:13 -07:00
fuzz-commit-graph.c commit-graph: pass a 'struct repository *' in more places 2020-09-09 12:51:48 -07:00
fuzz-pack-headers.c
fuzz-pack-idx.c
generate-cmdlist.sh Fit to Plan 9's ANSI/POSIX compatibility layer 2020-09-09 22:31:31 -07:00
generate-configlist.sh help: move list_config_help to builtin/help 2020-04-16 15:22:16 -07:00
generate-hooklist.sh hook-list.h: add a generated list of hooks, like config-list.h 2021-09-27 09:44:54 -07:00
gettext.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07:00
gettext.h gettext: remove optional non-standard parens in N_() definition 2021-09-03 11:40:30 -07: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 Merge branch 'mr/bisect-in-c-4' 2021-09-23 13:44:48 -07:00
git-compat-util.h Merge branch 'ab/repo-settings-cleanup' 2021-10-06 13:40:11 -07:00
git-curl-compat.h http: check CURLE_SSL_PINNEDPUBKEYNOTMATCH when emitting errors 2021-09-27 10:58:07 -07:00
git-cvsexportcommit.perl cvsexportcommit: do not run git programs in dashed form 2020-08-26 14:49:52 -07:00
git-cvsimport.perl git-cvsimport: port to SHA-256 2020-06-22 11:21:07 -07:00
git-cvsserver.perl git-cvsserver: protect against NULL in crypt(3) 2021-09-16 20:47:23 -07:00
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 filter-branch: drop $_x40 glob 2021-03-10 14:16:58 -08:00
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: do not enable hideResolved by default 2021-03-13 15:30:29 -08:00
git-p4.py git-p4: fix failed submit by skip non-text data files 2021-06-28 09:49:30 -07:00
git-quiltimport.sh
git-rebase--preserve-merges.sh rebase: remove unused function reschedule_last_action 2020-08-12 12:25:42 -07:00
git-request-pull.sh
git-send-email.perl Merge branch 'ab/send-email-config-fix' into maint 2021-10-12 13:51:44 -07:00
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-sh-setup: remove unused "pull with rebase" message 2021-09-12 16:22:05 -07:00
git-submodule.sh Merge branch 'ab/unused-script-helpers' 2021-09-23 13:44:47 -07:00
git-svn.perl perl: check for perl warnings while running tests 2020-10-21 23:11:48 -07:00
git-web--browse.sh
git.c midx: disallow running outside of a repository 2021-09-01 10:58:43 -07: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: improve grammar of "invalid color" error message 2021-06-15 12:54:26 +09:00
graph.h
grep.c grep: store grep_source buffer as const 2021-09-22 11:59:50 -07:00
grep.h Merge branch 'mt/grep-submodule-textconv' 2021-10-13 15:15:56 -07: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 oidtree: avoid unaligned access to crit-bit tree 2021-08-15 13:13:50 -07:00
hashmap.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
hashmap.h hashmap: provide deallocation function names 2020-11-02 12:15:50 -08:00
help.c help: move column config discovery to help.c library 2021-09-23 10:30:43 -07:00
help.h help: move column config discovery to help.c library 2021-09-23 10:30:43 -07:00
hex.c hex: print objects using the hash algorithm member 2021-04-27 16:31:39 +09:00
hook.c hook.c: add a hook_exists() wrapper and use it in bugreport.c 2021-09-27 09:44:54 -07:00
hook.h hook.c: add a hook_exists() wrapper and use it in bugreport.c 2021-09-27 09:44:54 -07:00
http-backend.c Merge branch 'jk/http-server-protocol-versions' 2021-09-23 13:44:47 -07:00
http-fetch.c http-fetch: allow custom index-pack args 2021-02-22 12:07:40 -08:00
http-push.c http: rename CURLOPT_FILE to CURLOPT_WRITEDATA 2021-07-30 16:01:54 -07:00
http-walker.c http: rename CURLOPT_FILE to CURLOPT_WRITEDATA 2021-07-30 16:01:54 -07:00
http.c Merge branch 'ab/http-pinned-public-key-mismatch' 2021-10-11 10:21:47 -07:00
http.h http: check CURLE_SSL_PINNEDPUBKEYNOTMATCH when emitting errors 2021-09-27 10:58:07 -07:00
ident.c Merge branch 'pw/rebase-i-more-options' 2020-09-03 12:37:01 -07:00
imap-send.c http: centralize the accounting of libcurl dependencies 2021-09-13 10:39:04 -07:00
iterator.h
json-writer.c *.c *_init(): define in terms of corresponding *_INIT macro 2021-07-01 12:32:22 -07:00
json-writer.h *.h: move some *_INIT to designated initializers 2021-07-01 12:31:45 -07:00
khash.h khash: clarify that allocations never fail 2021-07-06 13:07:50 -07:00
kwset.c
kwset.h
levenshtein.c
levenshtein.h
line-log.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
line-log.h line-log: more responsive, incremental 'git log -L' 2020-05-11 09:33:56 -07:00
line-range.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c help: fix small typo in error message 2021-05-21 07:52:10 +09:00
list-objects-filter-options.h list-objects: implement object type filter 2021-04-19 14:09:11 -07:00
list-objects-filter.c list-objects: implement object type filter 2021-04-19 14:09:11 -07:00
list-objects-filter.h list-objects: support filtering by tag and commit 2021-04-12 09:35:50 -07:00
list-objects.c list-objects.c: rename "traverse_trees_and_blobs" to "traverse_non_commits" 2021-08-12 13:08:30 -07:00
list-objects.h
list.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
ll-merge.c ll_union_merge(): rename path_unused parameter 2021-06-11 12:37:33 +09:00
ll-merge.h
lockfile.c lockfile.c: introduce 'hold_lock_file_for_update_mode' 2020-04-27 11:27:36 -07:00
lockfile.h *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
log-tree.c load_ref_decorations(): fix decoration with tags 2021-07-14 10:11:02 -07:00
log-tree.h log-tree.h: remove unused function declarations 2021-10-01 14:39:46 -07:00
ls-refs.c Merge branch 'jk/ref-paranoia' 2021-10-11 10:21:47 -07:00
ls-refs.h serve.[ch]: don't pass "struct strvec *keys" to commands 2021-08-05 08:59:37 -07:00
mailinfo.c Merge branch 'ar/mailinfo-memcmp-to-skip-prefix' 2021-07-08 13:15:03 -07:00
mailinfo.h am: learn to process quoted lines that ends with CRLF 2021-05-10 15:06:22 +09:00
mailmap.c Merge branch 'ab/mailmap-leakfix' into maint 2021-10-12 13:51:30 -07:00
mailmap.h shortlog: remove unused(?) "repo-abbrev" feature 2021-01-12 14:04:42 -08:00
match-trees.c Always use oidread to read into struct object_id 2021-04-27 16:31:38 +09:00
mem-pool.c mem-pool: drop trailing semicolon from macro definition 2021-03-17 10:20:16 -07:00
mem-pool.h mem-pool: use consistent pool variable name 2020-08-18 12:16:08 -07:00
merge-blobs.c
merge-blobs.h
merge-ort-wrappers.c merge(s): apply consistent punctuation to "up to date" messages 2021-05-03 14:14:56 +09:00
merge-ort-wrappers.h merge-ort-wrappers: new convience wrappers to mimic the old merge API 2020-10-26 22:36:14 -07:00
merge-ort.c Merge branch 'en/removing-untracked-fixes' 2021-10-13 15:15:57 -07:00
merge-ort.h merge-ort: avoid accidental API mis-use 2021-05-20 15:40:39 +09:00
merge-recursive.c Merge branch 'en/removing-untracked-fixes' 2021-10-13 15:15:57 -07:00
merge-recursive.h merge-recursive: fix unclear and outright wrong comments 2020-08-02 11:03:57 -07:00
merge.c unpack-trees: introduce preserve_ignored to unpack_trees_options 2021-09-27 13:38:37 -07:00
mergesort.c
mergesort.h
midx.c Merge branch 'tb/midx-write-propagate-namehash' 2021-10-11 10:21:46 -07:00
midx.h midx.c: respect 'pack.writeBitmapHashcache' when writing bitmaps 2021-09-14 16:34:18 -07:00
name-hash.c Merge branch 'ds/sparse-index-protections' 2021-04-30 13:50:26 +09:00
notes-cache.c
notes-cache.h
notes-merge.c advice: remove read uses of most global `advice_` variables 2021-08-25 12:07:52 -07:00
notes-merge.h
notes-utils.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
notes-utils.h
notes.c hash: provide per-algorithm null OIDs 2021-04-27 16:31:39 +09:00
notes.h
object-file.c Merge branch 'hn/refs-errno-cleanup' 2021-10-03 21:49:18 -07:00
object-name.c advice: remove read uses of most global `advice_` variables 2021-08-25 12:07:52 -07:00
object-store.h *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
object.c Merge branch 'jk/log-decorate-optim' 2021-07-28 13:17:58 -07:00
object.h *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
oid-array.c oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
oid-array.h *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
oidmap.c hashmap: provide deallocation function names 2020-11-02 12:15:50 -08:00
oidmap.h
oidset.c oidset: make oidset_size() an inline function 2021-09-12 16:14:32 -07:00
oidset.h oidset: make oidset_size() an inline function 2021-09-12 16:14:32 -07:00
oidtree.c oidtree: avoid unaligned access to crit-bit tree 2021-08-15 13:13:50 -07:00
oidtree.h oidtree: a crit-bit tree for odb_loose_cache 2021-07-07 21:28:04 -07:00
pack-bitmap-write.c pack-bitmap: read multi-pack bitmaps 2021-09-01 13:56:43 -07:00
pack-bitmap.c pack-bitmap.c: propagate namehash values from existing bitmaps 2021-09-14 16:34:17 -07:00
pack-bitmap.h t/helper/test-bitmap.c: add 'dump-hashes' mode 2021-09-14 16:34:17 -07:00
pack-check.c csum-file: introduce checksum_valid() 2021-06-28 20:36:17 -07:00
pack-objects.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
pack-objects.h pack-objects: move static inline from a header to the sole consumer 2021-05-27 12:14:41 +09:00
pack-revindex.c Merge branch 'tb/reverse-midx' 2021-04-08 13:23:25 -07:00
pack-revindex.h pack-revindex.h: correct the time complexity descriptions 2021-09-15 22:16:25 -07:00
pack-write.c Merge branch 'tb/pack-finalize-ordering' into maint 2021-10-12 13:51:46 -07:00
pack.h pack-write: split up finish_tmp_packfile() function 2021-09-09 18:23:11 -07:00
packfile.c Merge branch 'rs/close-pack-leakfix' 2021-10-03 21:49:20 -07:00
packfile.h packfile: convert has_packed_and_bad() to object_id 2021-09-12 16:14:32 -07:00
pager.c pager: avoid setting COLUMNS when we're guessing its value 2021-06-28 10:42:10 -07:00
parallel-checkout.c parallel-checkout: send the new object_id algo field to the workers 2021-05-18 05:38:54 +09:00
parallel-checkout.h parallel-checkout: support progress displaying 2021-04-19 11:57:05 -07:00
parse-options-cb.c hash: provide per-algorithm null OIDs 2021-04-27 16:31:39 +09:00
parse-options.c Merge branch 'ab/align-parse-options-help' 2021-10-13 15:15:58 -07:00
parse-options.h Merge branch 'ab/help-config-vars' 2021-10-13 15:15:58 -07:00
patch-delta.c
patch-ids.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
patch-ids.h patch-ids: handle duplicate hashmap entries 2021-01-12 11:13:32 -08:00
path.c Merge branch 'lh/systemd-timers' 2021-09-20 15:20:40 -07:00
path.h *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
pathspec.c add: skip tracked paths outside sparse-checkout cone 2021-09-28 10:31:02 -07:00
pathspec.h Merge branch 'ds/gender-neutral-doc' 2021-07-16 17:42:53 -07:00
pkt-line.c pkt-line: add stdio packet write functions 2021-09-01 10:20:39 -07:00
pkt-line.h pkt-line: add stdio packet write functions 2021-09-01 10:20:39 -07:00
preload-index.c preload-index: log the number of lstat calls to trace2 2021-02-16 17:14:34 -08:00
pretty.c logmsg_reencode(): warn when iconv() fails 2021-08-27 12:43:22 -07:00
pretty.h log: avoid loading decorations for userformats that don't need it 2021-06-28 20:30:17 -07:00
prio-queue.c
prio-queue.h
progress.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
progress.h progress.c: silence cgcc suggestion about internal linkage 2020-04-27 11:21:28 -07:00
promisor-remote.c Merge branch 'jt/partial-clone-submodule-1' 2021-07-16 17:42:53 -07:00
promisor-remote.h promisor-remote: support per-repository config 2021-06-28 09:57:42 -07:00
prompt.c interactive: explicitly `fflush` stdout before expecting input 2020-04-10 10:27:16 -07:00
prompt.h interactive: refactor code asking the user for interactive input 2020-04-10 10:26:31 -07:00
protocol-caps.c Merge branch 'ab/serve-cleanup' 2021-09-20 15:20:43 -07:00
protocol-caps.h serve.[ch]: don't pass "struct strvec *keys" to commands 2021-08-05 08:59:37 -07:00
protocol.c connect, protocol: log negotiated protocol version 2021-08-10 11:46:33 -07:00
protocol.h
prune-packed.c Lib-ify prune-packed 2020-03-24 15:04:44 -07:00
prune-packed.h Lib-ify prune-packed 2020-03-24 15:04:44 -07:00
quote.c ref-filter: --format=%(raw) support --perl 2021-07-26 12:01:25 -07:00
quote.h Merge branch 'zh/ref-filter-raw-data' 2021-08-24 15:32:37 -07:00
range-diff.c Merge branch 'rs/range-diff-avoid-segfault-with-I' into maint 2021-10-12 13:51:45 -07:00
range-diff.h Merge branch 'js/range-diff-one-side-only' 2021-02-17 17:21:41 -08:00
reachable.c object.h: add lookup_object_by_type() function 2021-06-28 20:30:18 -07:00
reachable.h
read-cache.c Merge branch 'sg/test-split-index-fix' 2021-10-11 10:21:47 -07:00
rebase-interactive.c rebase -i: clarify and fix 'fixup -c' rebase-todo help 2021-02-10 13:58:19 -08:00
rebase-interactive.h Merge branch 'en/rebase-backend' 2020-03-02 15:07:19 -08:00
rebase.c pull --rebase/remote rename: document and honor single-letter abbreviations rebase types 2020-02-10 10:52:10 -08:00
rebase.h pull --rebase/remote rename: document and honor single-letter abbreviations rebase types 2020-02-10 10:52:10 -08:00
ref-filter.c Merge branch 'ab/designated-initializers' 2021-10-11 10:21:48 -07:00
ref-filter.h ref-filter: drop broken-ref code entirely 2021-09-27 12:36:45 -07:00
reflog-walk.c refs: make repo_dwim_log() accept a NULL oid 2021-08-25 13:27:37 -07:00
reflog-walk.h
refs.c refs API: make refs_rename_ref_available() static 2021-10-16 11:17:02 -07:00
refs.h refs API: add a version of refs_resolve_ref_unsafe() with "errno" 2021-10-16 11:17:02 -07:00
refspec.c Merge branch 'fc/atmark-in-refspec' 2020-12-14 10:21:36 -08:00
refspec.h Merge branch 'sb/clone-origin' 2020-10-27 15:09:50 -07:00
remote-curl.c Merge branch 'ab/http-pinned-public-key-mismatch' 2021-10-11 10:21:47 -07:00
remote.c *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
remote.h Merge branch 'jt/clone-unborn-head' 2021-02-17 17:21:40 -08:00
replace-object.c replace-object: make replace operations thread-safe 2020-01-17 13:52:14 -08:00
replace-object.h replace-object: make replace operations thread-safe 2020-01-17 13:52:14 -08:00
repo-settings.c repository.h: don't use a mix of int and bitfields 2021-09-22 13:15:00 -07:00
repository.c Merge branch 'jt/add-submodule-odb-clean-up' 2021-10-06 13:40:11 -07:00
repository.h Merge branch 'ab/repo-settings-cleanup' 2021-10-06 13:40:11 -07:00
rerere.c dir: introduce readdir_skip_dot_and_dotdot() helper 2021-05-27 14:02:37 +09:00
rerere.h
reset.c Change unpack_trees' 'reset' flag into an enum 2021-09-27 13:38:37 -07:00
reset.h reset: extract reset_head() from rebase 2020-04-10 09:28:02 -07:00
resolve-undo.c Merge branch 'ds/sparse-index-protections' 2021-04-30 13:50:26 +09:00
resolve-undo.h
revision.c Merge branch 'ab/designated-initializers' 2021-10-11 10:21:48 -07:00
revision.h Merge branch 'jt/add-submodule-odb-clean-up' 2021-10-06 13:40:11 -07:00
run-command.c Merge branch 'jh/builtin-fsmonitor-part1' 2021-10-13 15:15:58 -07:00
run-command.h Merge branch 'jh/builtin-fsmonitor-part1' 2021-10-13 15:15:58 -07:00
send-pack.c Merge branch 'jt/push-negotiation-fixes' into maint 2021-10-12 13:51:36 -07:00
send-pack.h
sequencer.c Merge branch 'ab/config-based-hooks-1' 2021-10-13 15:15:57 -07:00
sequencer.h Merge branch 'ab/designated-initializers' 2021-10-11 10:21:48 -07:00
serve.c serve: reject commands used as capabilities 2021-09-15 12:25:19 -07:00
serve.h serve.[ch]: remove "serve_options", split up --advertise-refs code 2021-08-05 08:59:37 -07:00
server-info.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07:00
setup.c setup: use xopen and xdup in sanitize_stdfds 2021-09-09 17:40:02 -07:00
sh-i18n--envsubst.c builtins + test helpers: use return instead of exit() in cmd_* 2021-06-09 09:15:58 +09:00
sha1dc_git.c
sha1dc_git.h
shallow.c commit_graft_pos(): take an oid instead of a bare hash 2021-01-28 11:21:07 -08:00
shallow.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
shell.c builtins + test helpers: use return instead of exit() in cmd_* 2021-06-09 09:15:58 +09:00
shortlog.h shortlog: remove unused(?) "repo-abbrev" feature 2021-01-12 14:04:42 -08:00
sideband.c sideband: don't lose clear-to-eol at packet boundary 2021-06-17 14:11:36 +09:00
sideband.h sideband: diagnose more sideband anomalies 2020-10-29 09:23:29 -07:00
sigchain.c
sigchain.h
simple-ipc.h Merge branch 'jh/builtin-fsmonitor-part1' 2021-10-13 15:15:58 -07:00
sparse-index.c Merge branch 'ds/sparse-index-ignored-files' 2021-09-20 15:20:44 -07:00
sparse-index.h sparse-index: add SPARSE_INDEX_MEMORY_ONLY flag 2021-09-07 22:41:10 -07:00
split-index.c split-index: use oideq instead of memcmp to compare object_id's 2021-06-15 12:07:56 +09:00
split-index.h
stable-qsort.c
strbuf.c *.c *_init(): define in terms of corresponding *_INIT macro 2021-07-01 12:32:22 -07:00
strbuf.h *.h _INIT macros: don't specify fields equal to 0 2021-09-27 14:47:59 -07:00
streaming.c streaming.c: move {open,close,read} from vtable to "struct git_istream" 2021-05-06 12:56:10 +09:00
streaming.h streaming: allow open_istream() to handle any repo 2020-01-31 10:45:39 -08:00
string-list.c string-list.[ch]: remove string_list_init() compatibility function 2021-09-28 14:43:38 -07:00
string-list.h string-list.[ch]: remove string_list_init() compatibility function 2021-09-28 14:43:38 -07:00
strmap.c *.c *_init(): define in terms of corresponding *_INIT macro 2021-07-01 12:32:22 -07:00
strmap.h strmap: make callers of strmap_remove() to call it in void context 2020-12-15 15:30:44 -08:00
strvec.c *.c *_init(): define in terms of corresponding *_INIT macro 2021-07-01 12:32:22 -07:00
strvec.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
sub-process.c strvec: convert remaining callers away from argv_array name 2020-07-28 15:02:18 -07:00
sub-process.h
submodule-config.c submodule-config: pass repo upon blob config read 2021-09-08 11:48:09 -07:00
submodule-config.h submodule-config.h: remove unused SUBMODULE_INIT macro 2021-09-27 14:47:59 -07:00
submodule.c Merge branch 'en/removing-untracked-fixes' 2021-10-13 15:15:57 -07:00
submodule.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
symlinks.c checkout: don't follow symlinks when removing entries 2021-03-18 12:58:10 -07:00
tag.c gpg-interface: improve interface for parsing tags 2021-02-10 23:35:42 -08:00
tag.h
tar.h
tempfile.c tempfile.c: introduce 'create_tempfile_mode' 2020-04-27 11:27:35 -07:00
tempfile.h tempfile.c: introduce 'create_tempfile_mode' 2020-04-27 11:27:35 -07:00
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
trace.c http, imap-send: stop using CURLOPT_VERBOSE 2020-05-11 11:18:01 -07:00
trace.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
trace2.c trace2: add trace2_child_ready() to report on background children 2021-09-20 08:57:58 -07:00
trace2.h Merge branch 'jh/builtin-fsmonitor-part1' 2021-10-13 15:15:58 -07:00
trailer.c trailer: add new .cmd config option 2021-05-04 12:09:43 +09:00
trailer.h pretty format %(trailers): add a "key_value_separator" 2020-12-09 14:16:42 -08:00
transport-helper.c transport: use designated initializers 2021-08-05 08:59:37 -07:00
transport-internal.h transport: rename "fetch" in transport_vtable to "fetch_refs" 2021-08-05 08:59:36 -07:00
transport.c hook.[ch]: move find_hook() from run-command.c to hook.c 2021-09-27 09:44:54 -07:00
transport.h *.h: move some *_INIT to designated initializers 2021-09-27 14:48:00 -07:00
tree-diff.c tree-diff: fix leak when not HAVE_ALLOCA_H 2021-09-16 13:43:42 -07:00
tree-walk.c Always use oidread to read into struct object_id 2021-04-27 16:31:38 +09:00
tree-walk.h tree-walk.c: break circular dependency with unpack-trees 2020-02-04 10:32:15 -08:00
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 unicode: update the width tables to Unicode 14 2021-09-17 17:26:21 -07:00
unimplemented.sh
unix-socket.c unix-socket: disallow chdir() when creating unix domain sockets 2021-03-15 14:32:51 -07:00
unix-socket.h unix-socket: disallow chdir() when creating unix domain sockets 2021-03-15 14:32:51 -07:00
unix-stream-server.c unix-stream-server: create unix domain socket under lock 2021-03-15 14:32:51 -07:00
unix-stream-server.h unix-stream-server: create unix domain socket under lock 2021-03-15 14:32:51 -07:00
unpack-trees.c Merge branch 'en/removing-untracked-fixes' 2021-10-13 15:15:57 -07:00
unpack-trees.h Change unpack_trees' 'reset' flag into an enum 2021-09-27 13:38:37 -07:00
upload-pack.c Merge branch 'ab/serve-cleanup' 2021-09-20 15:20:43 -07:00
upload-pack.h serve.[ch]: remove "serve_options", split up --advertise-refs code 2021-08-05 08:59:37 -07:00
url.c
url.h
urlmatch.c credential: handle `credential.<partial-URL>.<key>` again 2020-04-24 15:53:46 -07:00
urlmatch.h credential: handle `credential.<partial-URL>.<key>` again 2020-04-24 15:53:46 -07:00
usage.c usage.c: don't copy/paste the same comment three times 2021-04-13 14:56:28 -07:00
userdiff.c Merge branch 'uk/userdiff-php-enum' 2021-09-10 11:46:27 -07:00
userdiff.h userdiff: add and use for_each_userdiff_driver() 2021-04-08 12:19:10 -07:00
utf8.c t0060: test ntfs/hfs-obscured dotfiles 2021-05-04 11:52:02 +09:00
utf8.h t0060: test ntfs/hfs-obscured dotfiles 2021-05-04 11:52:02 +09:00
varint.c
varint.h
version.c
version.h
versioncmp.c
walker.c lookup_unknown_object(): take a repository argument 2021-04-13 13:18:46 -07:00
walker.h remote-curl: show progress for fetches over dumb HTTP 2020-03-03 13:15:40 -08:00
wildmatch.c
wildmatch.h
worktree.c *.c static functions: add missing __attribute__((format)) 2021-07-13 15:20:20 -07: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 wrapper.c: add x{un,}setenv(), and use xsetenv() in environment.c 2021-09-22 13:15:00 -07:00
write-or-die.c pkt-line: add stdio packet write functions 2021-09-01 10:20:39 -07:00
ws.c
wt-status.c advice: remove read uses of most global `advice_` variables 2021-08-25 12:07:52 -07:00
wt-status.h status: skip sparse-checkout percentage with sparse-index 2021-07-14 13:42:49 -07:00
xdiff-interface.c Merge branch 'ab/pickaxe-pcre2' 2021-07-13 16:52:50 -07:00
xdiff-interface.h xdiff-interface: replace discard_hunk_line() with a flag 2021-05-11 12:47:31 +09:00
zlib.c

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://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