A fork of Git containing Microsoft-specific patches.
Перейти к файлу
Elijah Newren 81afc79412 merge-ort: fix small memory leak in unique_path()
The struct strmap paths member of merge_options_internal is perhaps the
most central data structure to all of merge-ort.  Because all the paths
involved in the merge need to be kept until the merge is complete, this
"paths" data structure traditionally took responsibility for owning all
the allocated paths.  When the merge is over, those paths were free()d
as part of free()ing this strmap.

In commit 6697ee01b5 (merge-ort: switch our strmaps over to using
memory pools, 2021-07-30), we changed the allocations for pathnames to
come from a memory pool.  That meant the ownership changed slightly;
there were no individual free() calls to make, instead the memory pool
owned all those paths and they were free()d all at once.

Unfortunately unique_path() was written presuming the pre-memory-pool
model, and allocated a path on the heap and left it in the strmap for
later free()ing.  Modify it to return a path allocated from the memory
pool instead.

Note that there's one instance -- in record_conflicted_index_entries()
-- where the returned string from unique_path() was only used very
temporarily and thus had been immediately free()'d.  This codepath was
associated with an ugly skip-worktree workaround that has since been
better fixed by the in-flight en/present-despite-skipped topic.  This
workaround probably makes sense to excise once that topic merges down,
but for now, just remove the immediate free() and allow the returned
string to be free()d when the memory pool is released.

This fixes the following memory leak as reported by valgrind:

==PID== 65 bytes in 1 blocks are definitely lost in loss record 79 of 134
==PID==    at 0xADDRESS: malloc
==PID==    by 0xADDRESS: realloc
==PID==    by 0xADDRESS: xrealloc (wrapper.c:126)
==PID==    by 0xADDRESS: strbuf_grow (strbuf.c:98)
==PID==    by 0xADDRESS: strbuf_vaddf (strbuf.c:394)
==PID==    by 0xADDRESS: strbuf_addf (strbuf.c:335)
==PID==    by 0xADDRESS: unique_path (merge-ort.c:733)
==PID==    by 0xADDRESS: process_entry (merge-ort.c:3678)
==PID==    by 0xADDRESS: process_entries (merge-ort.c:4037)
==PID==    by 0xADDRESS: merge_ort_nonrecursive_internal (merge-ort.c:4621)
==PID==    by 0xADDRESS: merge_ort_internal (merge-ort.c:4709)
==PID==    by 0xADDRESS: merge_incore_recursive (merge-ort.c:4760)
==PID==    by 0xADDRESS: merge_ort_recursive (merge-ort-wrappers.c:57)
==PID==    by 0xADDRESS: try_merge_strategy (merge.c:753)

Reported-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-02-20 00:03:30 -08:00
.github Merge branch 'ab/ci-updates' 2021-12-15 09:39:49 -08:00
Documentation The sixth batch 2022-02-18 13:53:30 -08:00
block-sha1 block-sha1: drop trailing semicolon from macro definition 2021-03-17 10:20:01 -07:00
builtin Merge branch 'js/short-help-outside-repo-fix' 2022-02-18 13:53:30 -08:00
ci compat: auto-detect if zlib has uncompress2() 2022-01-26 09:05:55 -08:00
compat Merge branch 'ab/auto-detect-zlib-compress2' 2022-02-16 15:14:30 -08:00
contrib Merge branch 'ab/complete-show-all-commands' 2022-02-17 16:25:06 -08: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
gitweb Merge branch 'gh/gitweb-branch-sort' 2021-09-10 11:46:32 -07:00
mergetools mergetools/xxdiff: prevent segfaults from stopping difftool 2021-10-13 11:04:04 -07:00
negotiator use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
perl perl Git.pm: don't ignore signalled failure in _cmd_close() 2022-02-01 15:21:19 -08:00
po l10n: Update Catalan translation 2022-01-23 09:40:52 +01:00
ppc
refs Merge branch 'ps/avoid-unnecessary-hook-invocation-with-packed-refs' 2022-02-18 13:53:27 -08:00
reftable Merge branch 'ab/auto-detect-zlib-compress2' 2022-02-16 15:14:30 -08:00
sha1collisiondetection@855827c583
sha1dc
sha256
t Merge branch 'jd/t0015-modernize' 2022-02-18 13:53:30 -08:00
templates
trace2 Merge branch 'ab/run-command' 2021-12-15 09:39:47 -08:00
xdiff Merge branch 'pw/xdiff-classify-record-in-histogram' 2021-12-21 15:03:14 -08:00
.cirrus.yml ci: update freebsd 12 cirrus job 2021-08-12 14:00:52 -07:00
.clang-format
.editorconfig
.gitattributes
.gitignore hook: add 'run' subcommand 2022-01-07 15:19:34 -08:00
.gitmodules
.mailmap Add entry for Ramkumar Ramachandra 2021-03-08 09:56:34 -08:00
.tsan-suppressions
CODE_OF_CONDUCT.md CoC: update to version 2.0 + local changes 2021-01-13 17:45:04 -08:00
COPYING
GIT-VERSION-GEN Git 2.35.1 2022-01-28 16:48:42 -08: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/auto-detect-zlib-compress2' 2022-02-16 15:14:30 -08:00
README.md Merge branch 'po/readme-mention-contributor-hints' 2022-02-09 14:20:59 -08:00
RelNotes Name the next one 2.36 to prepare for 2.35.1 2022-01-28 16:57:10 -08:00
SECURITY.md SECURITY: describe how to report vulnerabilities 2021-03-27 15:13:02 -07:00
abspath.c
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 Merge branch 'pw/add-p-hunk-split-fix' 2022-02-09 14:20:59 -08:00
advice.c branch: add --recurse-submodules option for branch creation 2022-02-04 08:16:39 -08:00
advice.h branch: add --recurse-submodules option for branch creation 2022-02-04 08:16:39 -08:00
alias.c
alias.h
alloc.c
alloc.h
apply.c Merge branch 'en/remerge-diff' 2022-02-16 15:14:29 -08:00
apply.h Merge branch 'rs/apply-symlinks-use-strset' 2022-02-05 09:42:30 -08:00
archive-tar.c run-command API users: use strvec_push(), not argv construction 2021-11-25 22:15:07 -08:00
archive-zip.c
archive.c i18n: factorize "--foo requires --bar" and the like 2022-01-05 13:31:00 -08: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
base85.c
bisect.c bisect: simplify return code from bisect_checkout() 2021-07-28 10:57:37 -07:00
bisect.h
blame.c git-rev-list: add --exclude-first-parent-only flag 2022-01-12 11:08:42 -08:00
blame.h
blob.c
blob.h
bloom.c Merge branch 'ah/plugleaks' 2021-05-07 12:47:41 +09:00
bloom.h
branch.c Merge branch 'gc/branch-recurse-submodules' 2022-02-18 13:53:29 -08:00
branch.h branch: add --recurse-submodules option for branch creation 2022-02-04 08:16:39 -08:00
builtin.h hook: add 'run' subcommand 2022-01-07 15:19:34 -08: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 'vd/sparse-reset' 2021-12-10 14:35:12 -08:00
cache-tree.h cache-tree: extract subtree_pos() 2021-01-23 17:14:07 -08:00
cache.h Merge branch 'ab/auto-detect-zlib-compress2' 2022-02-16 15:14:30 -08:00
cbtree.c cbtree: remove broken and unused cb_unlink 2021-12-07 15:18:35 -08:00
cbtree.h cbtree: remove broken and unused cb_unlink 2021-12-07 15:18:35 -08: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: allow colors to be prefixed with "reset" 2021-10-28 09:37:18 -07:00
color.h color: allow colors to be prefixed with "reset" 2021-10-28 09:37:18 -07:00
column.c
column.h
combine-diff.c Merge branch 'ab/pickaxe-pcre2' 2021-07-13 16:52:50 -07:00
command-list.txt hook: add 'run' subcommand 2022-01-07 15:19:34 -08:00
commit-graph.c commit-graph: return if there is no git directory 2021-12-06 09:55:05 -08: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
commit-slab-impl.h
commit-slab.h
commit.c Merge branch 'ab/config-based-hooks-2' 2022-02-09 14:21:00 -08:00
commit.h receive-pack.c: consolidate find header logic 2022-01-06 13:17:20 -08:00
common-main.c Merge branch 'en/keep-cwd' 2022-01-05 14:01:28 -08:00
config.c Merge branch 'jt/conditional-config-on-remote-url' 2022-02-09 14:20:59 -08:00
config.h config: include file if remote URL matches a glob 2022-01-18 13:55:53 -08:00
config.mak.dev Makefile: FreeBSD cannot do C99-or-below build 2022-01-18 12:16:23 -08:00
config.mak.in
config.mak.uname Merge branch 'ab/auto-detect-zlib-compress2' 2022-02-16 15:14:30 -08:00
configure.ac compat: auto-detect if zlib has uncompress2() 2022-01-26 09:05:55 -08:00
connect.c ls-remote & transport API: release "struct transport_ls_refs_options" 2022-02-06 18:02:34 -08:00
connect.h
connected.c run-command API: remove "env" member, always use "env_array" 2021-11-25 22:15:08 -08:00
connected.h connected: refactor iterator to return next object ID directly 2021-09-01 12:43:56 -07:00
convert.c Merge branch 'mc/clean-smudge-with-llp64' 2021-11-29 15:41:51 -08:00
convert.h Merge branch 'ds/sparse-index-protections' 2021-04-30 13:50:26 +09:00
copy.c
credential.c urlmatch.[ch]: add and use URLMATCH_CONFIG_INIT 2021-10-01 14:22:51 -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-plug-leak' 2022-01-05 14:01:31 -08:00
date.c strbuf_addftime(): handle "%s" manually 2021-11-04 12:38:09 -07:00
decorate.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
decorate.h
delta-islands.c
delta-islands.h
delta.h odb: guard against data loss checking out a huge file 2021-11-03 11:22:27 -07:00
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-merges: avoid history simplifications when diffing merges 2022-02-02 10:02:28 -08: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 Merge branch 'js/diff-filter-negation-fix' 2022-02-16 15:14:30 -08:00
diff.h Merge branch 'js/diff-filter-negation-fix' 2022-02-16 15:14:30 -08:00
diffcore-break.c
diffcore-delta.c diffcore-delta.c: LLP64 compatibility, upcast unity for left shift 2021-12-01 14:48:10 -08:00
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/sparse-checkout-malformed-pattern-fix' 2022-01-10 11:52:49 -08:00
dir.h dir: new flag to remove_dir_recurse() to spare the original_cwd 2021-12-09 13:33:13 -08:00
editor.c run-command API: remove "env" member, always use "env_array" 2021-11-25 22:15:08 -08:00
entry.c Merge branch 'mc/clean-smudge-with-llp64' 2021-11-29 15:41:51 -08:00
entry.h Merge branch 'mc/clean-smudge-with-llp64' 2021-11-29 15:41:51 -08:00
environment.c Merge branch 'ns/tmp-objdir' 2022-01-03 16:24:15 -08:00
environment.h environment: make `getenv_safe()` a public function 2021-01-15 13:03:45 -08:00
exec-cmd.c
exec-cmd.h
fetch-negotiator.c repo-settings: rename the traditional default fetch.negotiationAlgorithm 2022-02-02 09:36:17 -08:00
fetch-negotiator.h
fetch-pack.c i18n: factorize "--foo requires --bar" and the like 2022-01-05 13:31:00 -08:00
fetch-pack.h fetch: teach independent negotiation (no packfile) 2021-05-05 10:41:29 +09:00
fmt-merge-msg.c Merge branch 'fs/ssh-signing-key-lifetime' 2022-01-12 15:11:41 -08:00
fmt-merge-msg.h merge: allow to pretend a merge is made into a different branch 2021-12-20 14:55:02 -08: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
fuzz-pack-headers.c
fuzz-pack-idx.c
generate-cmdlist.sh generate-cmdlist.sh: don't parse command-list.txt thrice 2021-11-05 12:01:13 -07:00
generate-configlist.sh
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 add -p: avoid use of undefined $key when ReadKey -> EOF 2021-11-28 15:14:09 -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/auto-detect-zlib-compress2' 2022-02-16 15:14:30 -08:00
git-curl-compat.h http: check CURLE_SSL_PINNEDPUBKEYNOTMATCH when emitting errors 2021-09-27 10:58:07 -07:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl tests: disable fsync everywhere 2021-10-29 10:22:40 -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 git-sh-setup: remove "sane_grep", it's not needed anymore 2021-10-21 16:17:57 -07:00
git-instaweb.sh git-sh-setup: remove "sane_grep", it's not needed anymore 2021-10-21 16:17:57 -07:00
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 Merge branch 'ab/config-based-hooks-2' 2022-02-09 14:21:00 -08:00
git-quiltimport.sh
git-request-pull.sh
git-send-email.perl send-email: use 'git hook run' for 'sendemail-validate' 2022-01-07 15:19:35 -08:00
git-sh-i18n.sh git-sh-i18n: remove unused eval_ngettext() 2021-10-21 16:04:29 -07:00
git-sh-setup.sh git-sh-setup: remove remnant bits referring to `git-legacy-stash` 2022-01-27 18:00:09 -08:00
git-submodule.sh Merge branch 'ab/unused-script-helpers' 2021-09-23 13:44:47 -07:00
git-svn.perl git-svn: drop support for `--preserve-merges` 2021-09-07 21:45:33 -07:00
git-web--browse.sh
git.c Merge branch 'ab/config-based-hooks-2' 2022-02-09 14:21:00 -08:00
git.rc
gpg-interface.c gpg-interface: trim CR from ssh-keygen 2022-01-07 13:42:49 -08:00
gpg-interface.h ssh signing: make verify-commit consider key lifetime 2021-12-09 13:38:04 -08:00
graph.c graph: improve grammar of "invalid color" error message 2021-06-15 12:54:26 +09:00
graph.h
grep.c Merge branch 'rs/grep-expr-cleanup' 2022-02-05 09:42:30 -08:00
grep.h log: let --invert-grep only invert --grep 2021-12-17 14:13:08 -08:00
hash-lookup.c oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
hash-lookup.h oid_pos(): access table through const pointers 2021-01-28 12:03:26 -08:00
hash.h hash.h: provide constants for the hash IDs 2021-09-07 10:47:43 -07:00
hashmap.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
hashmap.h
help.c help: make auto-correction prompt more consistent 2021-12-16 13:49:39 -08: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 hooks: convert worktree 'post-checkout' hook to hook library 2022-01-07 15:19:34 -08:00
hook.h hooks: convert worktree 'post-checkout' hook to hook library 2022-01-07 15:19:34 -08:00
http-backend.c Merge branch 'ab/usage-die-message' 2022-01-10 11:52:53 -08:00
http-fetch.c i18n: factorize "--foo requires --bar" and the like 2022-01-05 13:31:00 -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 run-command API users: use strvec_pushv(), not argv assignment 2021-11-25 22:15:07 -08:00
http.h http: check CURLE_SSL_PINNEDPUBKEYNOTMATCH when emitting errors 2021-09-27 10:58:07 -07:00
ident.c
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-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-merge: make callers responsible for showing warnings 2022-02-02 10:02:27 -08:00
ll-merge.h ll-merge: make callers responsible for showing warnings 2022-02-02 10:02:27 -08:00
lockfile.c
lockfile.h *.[ch] *_INIT macros: use { 0 } for a "zero out" idiom 2021-09-27 14:47:59 -07:00
log-tree.c show, log: include conflict/warning messages in --remerge-diff headers 2022-02-02 10:02:28 -08: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: don't assume uintmax_t is aligned enough for all types 2022-01-24 10:26:40 -08:00
mem-pool.h
merge-blobs.c ll-merge: make callers responsible for showing warnings 2022-02-02 10:02:27 -08:00
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.c merge-ort: fix small memory leak in unique_path() 2022-02-20 00:03:30 -08:00
merge-ort.h show, log: include conflict/warning messages in --remerge-diff headers 2022-02-02 10:02:28 -08:00
merge-recursive.c merge-ort: format messages slightly different for use in headers 2022-02-02 10:02:27 -08:00
merge-recursive.h merge-ort: format messages slightly different for use in headers 2022-02-02 10:02:27 -08:00
merge.c unpack-trees: introduce preserve_ignored to unpack_trees_options 2021-09-27 13:38:37 -07:00
mergesort.c mergesort: avoid left shift overflow 2021-11-18 12:42:06 -08:00
mergesort.h
midx.c Merge branch 'tb/midx-no-bitmap-for-no-objects' 2022-02-18 13:53:30 -08:00
midx.h midx: read `RIDX` chunk when present 2022-01-27 12:07:53 -08: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 ll-merge: make callers responsible for showing warnings 2022-02-02 10:02:27 -08: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 'ns/tmp-objdir' 2022-01-03 16:24:15 -08:00
object-name.c cat-file: use GET_OID_ONLY_TO_DIE in --(textconv|filters) 2021-12-30 13:05:29 -08:00
object-store.h Merge branch 'ns/tmp-objdir' 2022-01-03 16:24:15 -08:00
object.c Merge branch 'ns/tmp-objdir' 2022-01-03 16:24:15 -08: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
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: gracefully fallback after opening pack/MIDX 2022-01-27 12:07:53 -08:00
pack-bitmap.h Merge branch 'tb/repack-write-midx' 2021-10-18 15:47:57 -07:00
pack-check.c Merge branch 'ab/fsck-unexpected-type' 2021-10-25 16:06:56 -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 midx: read `RIDX` chunk when present 2022-01-27 12:07:53 -08: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 'jt/pack-header-lshift-overflow' 2022-01-12 15:11:41 -08:00
packfile.h Merge branch 'tb/pack-revindex-on-disk-cleanup' 2021-12-15 09:39:50 -08:00
pager.c pager: fix crash when pager program doesn't exist 2021-11-24 16:14:10 -08:00
parallel-checkout.c Merge branch 'mc/clean-smudge-with-llp64' 2021-11-29 15:41:51 -08:00
parallel-checkout.h parallel-checkout: support progress displaying 2021-04-19 11:57:05 -07:00
parse-options-cb.c branch: add flags and config to inherit tracking 2021-12-20 22:40:21 -08:00
parse-options.c Merge branch 'ab/cat-file' 2022-02-05 09:42:31 -08:00
parse-options.h Merge branch 'rs/parse-options-lithelp-help' 2022-02-11 16:55:58 -08:00
patch-delta.c
patch-ids.c use CALLOC_ARRAY 2021-03-13 16:00:09 -08:00
patch-ids.h
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 pathspec: use BUG(...) not die("BUG:%s:%d....", <file>, <line>) 2021-12-07 12:31:17 -08:00
pkt-line.c fetch-pack: redact packfile urls in traces 2021-11-11 10:07:43 -08:00
pkt-line.h fetch-pack: redact packfile urls in traces 2021-11-11 10:07:43 -08:00
preload-index.c preload-index: log the number of lstat calls to trace2 2021-02-16 17:14:34 -08:00
pretty.c Merge branch 'es/pretty-describe-more' 2021-12-15 09:39:48 -08: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
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 run-command API users: use strvec_push(), not argv construction 2021-11-25 22:15:07 -08:00
prompt.h
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
prune-packed.h
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 i18n: refactor "foo and bar are mutually exclusive" 2022-01-05 13:29:23 -08: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 'vd/sparse-clean-etc' 2022-02-17 16:25:05 -08:00
rebase-interactive.c rebase: remove a no-longer-used function 2021-09-07 21:45:33 -07:00
rebase-interactive.h rebase: remove a no-longer-used function 2021-09-07 21:45:33 -07:00
rebase.c pull: remove support for `--rebase=preserve` 2021-09-07 21:45:32 -07:00
rebase.h pull: remove support for `--rebase=preserve` 2021-09-07 21:45:32 -07:00
ref-filter.c i18n: ref-filter: factorize "%(foo) atom used without %(bar) atom" 2022-01-05 13:31:00 -08:00
ref-filter.h for-each-ref: delay parsing of --sort=<atom> options 2021-10-20 14:33:07 -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 Merge branch 'ps/avoid-unnecessary-hook-invocation-with-packed-refs' 2022-02-18 13:53:27 -08:00
refs.h Merge branch 'ps/avoid-unnecessary-hook-invocation-with-packed-refs' 2022-02-18 13:53:27 -08:00
refspec.c
refspec.h
remote-curl.c run-command API users: use strvec_pushv(), not argv assignment 2021-11-25 22:15:07 -08:00
remote.c refs API: remove "failure_errno" from refs_resolve_ref_unsafe() 2022-01-26 15:58:41 -08:00
remote.h remote: die if branch is not found in repository 2021-11-18 22:31:19 -08:00
replace-object.c
replace-object.h
repo-settings.c Merge branch 'en/fetch-negotiation-default-fix' 2022-02-16 15:14:30 -08:00
repository.c Merge branch 'ns/tmp-objdir' 2022-01-03 16:24:15 -08:00
repository.h Merge branch 'en/fetch-negotiation-default-fix' 2022-02-16 15:14:30 -08:00
rerere.c ll-merge: make callers responsible for showing warnings 2022-02-02 10:02:27 -08:00
rerere.h
reset.c Merge branch 'pw/use-in-process-checkout-in-rebase' 2022-02-18 13:53:27 -08:00
reset.h rebase --apply: set ORIG_HEAD correctly 2022-01-26 12:08:53 -08:00
resolve-undo.c Merge branch 'ds/sparse-index-protections' 2021-04-30 13:50:26 +09:00
resolve-undo.h
revision.c git-rev-list: add --exclude-first-parent-only flag 2022-01-12 11:08:42 -08:00
revision.h Merge branch 'jz/rev-list-exclude-first-parent-only' 2022-02-17 16:25:05 -08:00
run-command.c Merge branch 'ab/config-based-hooks-2' 2022-02-09 14:21:00 -08:00
run-command.h run-command: remove old run_hook_{le,ve}() hook API 2022-01-07 15:19:35 -08:00
send-pack.c Merge branch 'fs/ssh-signing' 2021-10-25 16:06:58 -07:00
send-pack.h
sequencer.c Merge branch 'ps/avoid-unnecessary-hook-invocation-with-packed-refs' 2022-02-18 13:53:27 -08:00
sequencer.h create_autostash(): remove unneeded parameter 2022-01-26 12:08:53 -08: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: introduce startup_info->original_cwd 2021-12-09 13:33:12 -08: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 git-rev-list: add --exclude-first-parent-only flag 2022-01-12 11:08:42 -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
sigchain.c
sigchain.h
simple-ipc.h Merge branch 'jh/builtin-fsmonitor-part1' 2021-10-13 15:15:58 -07:00
sparse-index.c sparse-index: sparse index is disallowed when split index is active 2022-01-23 17:06:05 -08:00
sparse-index.h sparse-index: add ensure_correct_sparsity function 2021-11-24 16:32:38 -08:00
split-index.c split-index: it really is incompatible with the sparse index 2022-01-23 17:06:23 -08:00
split-index.h
stable-qsort.c stable-qsort: avoid using potentially unaligned access 2022-01-07 15:48:40 -08:00
strbuf.c strbuf_addftime(): handle "%s" manually 2021-11-04 12:38:09 -07:00
strbuf.h strbuf.h: use BUG(...) not die("BUG: ...") 2021-12-07 12:31:16 -08:00
streaming.c object-file.c: stop dying in parse_loose_header() 2021-10-01 15:06:00 -07:00
streaming.h
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
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 run-command API: remove "argv" member, always use "args" 2021-11-25 22:15:07 -08:00
sub-process.h
submodule-config.c branch: add --recurse-submodules option for branch creation 2022-02-04 08:16:39 -08:00
submodule-config.h branch: add --recurse-submodules option for branch creation 2022-02-04 08:16:39 -08:00
submodule.c branch: add --recurse-submodules option for branch creation 2022-02-04 08:16:39 -08:00
submodule.h branch: add --recurse-submodules option for branch creation 2022-02-04 08:16:39 -08:00
symlinks.c symlinks: do not include startup_info->original_cwd in dir removal 2021-12-09 13:33:13 -08:00
tag.c ssh signing: make verify-tag consider key lifetime 2021-12-09 13:38:04 -08:00
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c log: clean unneeded objects during `log --remerge-diff` 2022-02-02 10:02:27 -08:00
tmp-objdir.h log: clean unneeded objects during `log --remerge-diff` 2022-02-02 10:02:27 -08:00
trace.c
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 run-command API: remove "env" member, always use "env_array" 2021-11-25 22:15:08 -08:00
trailer.h
transport-helper.c Merge branch 'jk/http-push-status-fix' 2021-10-29 15:43:12 -07:00
transport-internal.h transport: rename "fetch" in transport_vtable to "fetch_refs" 2021-08-05 08:59:36 -07:00
transport.c ls-remote & transport API: release "struct transport_ls_refs_options" 2022-02-06 18:02:34 -08:00
transport.h ls-remote & transport API: release "struct transport_ls_refs_options" 2022-02-06 18:02:34 -08:00
tree-diff.c pathspec: use BUG(...) not die("BUG:%s:%d....", <file>, <line>) 2021-12-07 12:31:17 -08: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.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/keep-cwd' 2022-01-05 14:01:28 -08:00
unpack-trees.h unpack-trees: refuse to remove startup_info->original_cwd 2021-12-09 13:33:12 -08:00
upload-pack.c upload-pack.c: increase output buffer size 2021-12-15 11:51:18 -08: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 urlmatch: add underscore to URL_HOST_CHARS 2021-10-12 18:29:25 -07:00
urlmatch.h urlmatch.[ch]: add and use URLMATCH_CONFIG_INIT 2021-10-01 14:22:51 -07:00
usage.c config API: use get_error_routine(), not vreportf() 2021-12-07 13:25:16 -08:00
userdiff.c userdiff-cpp: back out the digit-separators in numbers 2021-10-25 08:47:44 -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
wildmatch.c
wildmatch.h
worktree.c refs API: remove "failure_errno" from refs_resolve_ref_unsafe() 2022-01-26 15:58:41 -08:00
worktree.h worktree: simplify find_shared_symref() memory ownership model 2021-12-01 22:18:25 -08:00
wrap-for-bin.sh
wrapper.c wrapper: use a CSPRNG to generate random file names 2022-01-17 14:17:51 -08:00
write-or-die.c Merge branch 'ew/test-wo-fsync' 2021-12-15 09:39:52 -08:00
ws.c
wt-status.c Merge branch 'xw/am-empty' 2022-01-05 14:01:28 -08:00
wt-status.h status: skip sparse-checkout percentage with sparse-index 2021-07-14 13:42:49 -07:00
xdiff-interface.c xdiff: implement a zealous diff3, or "zdiff3" 2021-12-01 14:45:58 -08: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 and Documentation/CodingGuidelines).

Those wishing to help with error message, usage and informational message string translations (localization l10) should see po/README.md (a po file is a Portable Object file that holds the translations).

To subscribe to the list, send an email with just "subscribe git" in the body to majordomo@vger.kernel.org (not the Git list). 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