Find a file
Jeff King 1c10b8e5b0 format-patch: fix leak of empty header string
The log_write_email_headers() function recently learned to return the
"extra_headers_p" variable to the caller as an allocated string. We
start by copying rev_info.extra_headers into a strbuf, and then detach
the strbuf at the end of the function. If there are no extra headers, we
leave the strbuf empty. Likewise, if there are no headers to return, we
pass back NULL.

This misses a corner case which can cause a leak. The "do we have any
headers to copy" check is done by looking for a NULL opt->extra_headers.
But the "do we have a non-empty string to return" check is done by
checking the length of the strbuf. That means if opt->extra_headers is
the empty string, we'll "copy" it into the strbuf, triggering an
allocation, but then leak the buffer when we return NULL from the
function.

We can solve this in one of two ways:

  1. Rather than checking headers->len at the end, we could check
     headers->alloc to see if we allocated anything. That retains the
     original behavior before the recent change, where an empty
     extra_headers string is "passed through" to the caller. In practice
     this doesn't matter, though (the code which eventually looks at the
     result treats NULL or the empty string the same).

  2. Only bother copying a non-empty string into the strbuf. This has
     the added bonus of avoiding a pointless allocation.

     Arguably strbuf_addstr() could do this optimization itself, though
     it may be slightly dangerous to do so (some existing callers may
     not get a fresh allocation when they expect to). In theory callers
     are all supposed to use strbuf_detach() in such a case, but there's
     no guarantee that this is the case.

This patch uses option 2. Without it, building with SANITIZE=leak shows
many errors in t4021 and elsewhere.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-03-22 09:50:53 -07:00
.github l10n: ci: disable cache for setup-go to suppress warnings 2024-02-16 11:51:19 +08:00
block-sha1
builtin format-patch: return an allocated string from log_write_email_headers() 2024-03-19 17:54:16 -07:00
ci Merge branch 'js/ci-discard-prove-state' into maint-2.43 2024-02-08 16:22:00 -08:00
compat Merge branch 'js/win32-retry-pipe-write-on-enospc' into maint-2.43 2024-02-13 14:44:51 -08:00
contrib Merge branch 'pb/complete-config' 2024-02-14 15:36:06 -08:00
Documentation Git 2.43.3 2024-02-22 16:14:53 -08:00
ewah ewah: implement bitmap_is_empty() 2023-12-14 14:38:07 -08:00
git-gui Merge branch 'js/update-urls-in-doc-and-comment' into maint-2.43 2024-02-08 16:22:01 -08:00
gitk-git doc: switch links to https 2023-11-26 10:07:05 +09:00
gitweb Merge branch 'js/update-urls-in-doc-and-comment' into maint-2.43 2024-02-08 16:22:01 -08:00
mergetools
negotiator treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
oss-fuzz Merge branch 'js/oss-fuzz-build-in-ci' 2024-01-29 16:03:00 -08:00
perl Merge branch 'js/update-urls-in-doc-and-comment' into maint-2.43 2024-02-08 16:22:01 -08:00
po l10n: zh_TW: Git 2.44 2024-02-18 21:03:43 +08:00
refs Merge branch 'ps/worktree-refdb-initialization' 2024-01-26 08:54:46 -08:00
reftable Merge branch 'jc/comment-style-fixes' into maint-2.43 2024-02-13 14:44:48 -08:00
sha1
sha1collisiondetection@855827c583
sha1dc doc: refer to internet archive 2023-11-26 10:07:06 +09:00
sha256
t Merge branch 'la/trailer-cleanups' into maint-2.43 2024-02-22 16:09:45 -08:00
templates Merge branch 'jp/use-diff-index-in-pre-commit-sample' into maint-2.43 2024-02-08 16:22:02 -08:00
trace2 Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
xdiff
.cirrus.yml Merge branch 'cb/use-freebsd-13-2-at-cirrus-ci' 2024-02-06 14:31:22 -08:00
.clang-format clang-format: fix typo in comment 2023-11-01 12:24:19 +09:00
.editorconfig
.gitattributes
.gitignore replay: introduce new builtin 2023-11-26 10:10:48 +09:00
.gitlab-ci.yml ci: add macOS jobs to GitLab CI 2024-01-18 11:53:17 -08:00
.gitmodules
.mailmap
.tsan-suppressions
abspath.c
abspath.h
aclocal.m4
add-interactive.c
add-interactive.h
add-patch.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
advice.c advice: allow disabling the automatic hint in advise_if_enabled() 2024-01-16 13:07:00 -08:00
advice.h branch: make the advice to force-deleting a conditional one 2024-01-11 17:15:54 -08:00
alias.c
alias.h
alloc.c
alloc.h
apply.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
apply.h
archive-tar.c archive.h: remove unnecessary include 2023-12-26 12:04:31 -08:00
archive-zip.c archive.h: remove unnecessary include 2023-12-26 12:04:31 -08:00
archive.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
archive.h archive.h: remove unnecessary include 2023-12-26 12:04:31 -08:00
attr.c attr: add builtin objectmode values support 2023-12-28 13:21:52 -08:00
attr.h
banned.h
base85.c
base85.h
bisect.c Merge branch 'js/check-null-from-read-object-file' 2024-02-14 15:36:06 -08:00
bisect.h
blame.c blame.h: remove unnecessary includes 2023-12-26 12:04:32 -08:00
blame.h blame.h: remove unnecessary includes 2023-12-26 12:04:32 -08:00
blob.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
blob.h
bloom.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
bloom.h
branch.c Merge branch 'rj/status-bisect-while-rebase' into maint-2.43 2024-02-08 16:22:04 -08:00
branch.h
builtin.h replay: introduce new builtin 2023-11-26 10:10:48 +09:00
bulk-checkin.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
bulk-checkin.h
bundle-uri.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
bundle-uri.h
bundle.c
bundle.h
cache-tree.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
cache-tree.h
cbtree.c
cbtree.h
chdir-notify.c
chdir-notify.h
check-builtins.sh
checkout.c
checkout.h
chunk-format.c
chunk-format.h
CODE_OF_CONDUCT.md CoC: whitespace fix 2024-01-23 10:40:10 -08:00
color.c
color.h
column.c
column.h
combine-diff.c Merge branch 'js/check-null-from-read-object-file' 2024-02-14 15:36:06 -08:00
command-list.txt replay: introduce new builtin 2023-11-26 10:10:48 +09:00
commit-graph.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
commit-graph.h Merge branch 'ps/do-not-trust-commit-graph-blindly-for-existence' 2023-11-08 11:03:59 +09:00
commit-reach.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
commit-reach.h
commit-slab-decl.h
commit-slab-impl.h
commit-slab.h
commit.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
commit.h
common-main.c
config.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
config.h config: factor out global config file retrieval 2024-01-18 12:17:41 -08:00
config.mak.dev
config.mak.in
config.mak.uname Makefile: detect new Homebrew location for ARM-based Macs 2024-01-18 11:53:17 -08:00
configure.ac global: convert trivial usages of test <expr> -a/-o <expr> 2023-11-11 09:21:00 +09:00
connect.c
connect.h
connected.c
connected.h
convert.c
convert.h config: use git_config_string() for core.checkRoundTripEncoding 2023-12-09 08:26:22 +09:00
copy.c
copy.h
COPYING
credential.c
credential.h
csum-file.c
csum-file.h
ctype.c
daemon.c
date.c
date.h
decorate.c
decorate.h
delta-islands.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
delta-islands.h
delta.h
detect-compiler
diagnose.c
diagnose.h
diff-delta.c
diff-lib.c Merge branch 'en/header-cleanup' 2024-01-08 14:05:15 -08:00
diff-merges.c
diff-merges.h
diff-no-index.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
diff.c Merge branch 'jx/dirstat-parseopt-help' 2024-02-15 15:14:48 -08:00
diff.h
diffcore-break.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
diffcore-delta.c Merge branch 'en/diffcore-delta-final-line-fix' into maint-2.43 2024-02-13 14:44:48 -08:00
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c
diffcore-rotate.c
diffcore.h
dir-iterator.c
dir-iterator.h
dir.c Merge branch 'en/header-cleanup' 2024-01-08 14:05:15 -08:00
dir.h
editor.c
editor.h
entry.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
entry.h
environment.c config: use git_config_string() for core.checkRoundTripEncoding 2023-12-09 08:26:22 +09:00
environment.h
exec-cmd.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
exec-cmd.h
fetch-negotiator.c
fetch-negotiator.h
fetch-pack.c Merge branch 'sd/negotiate-trace-fix' into maint-2.43 2024-02-13 14:44:50 -08:00
fetch-pack.h treewide: remove unnecessary includes from header files 2023-12-26 12:04:31 -08:00
fmt-merge-msg.c
fmt-merge-msg.h
fsck.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
fsck.h
fsmonitor--daemon.h fsmonitor--daemon.h: remove unnecessary includes 2023-12-26 12:04:32 -08:00
fsmonitor-ipc.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:33 -08:00
fsmonitor-ipc.h
fsmonitor-ll.h
fsmonitor-path-utils.h
fsmonitor-settings.c
fsmonitor-settings.h
fsmonitor.c
fsmonitor.h
generate-cmdlist.sh
generate-configlist.sh
generate-hooklist.sh
gettext.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
gettext.h
git-archimport.perl perl: bump the required Perl version to 5.8.1 from 5.8.0 2023-11-17 07:26:32 +09:00
git-compat-util.h Merge branch 'tb/multi-pack-verbatim-reuse' 2024-01-12 16:09:56 -08:00
git-curl-compat.h
git-cvsexportcommit.perl perl: bump the required Perl version to 5.8.1 from 5.8.0 2023-11-17 07:26:32 +09:00
git-cvsimport.perl Merge branch 'js/update-urls-in-doc-and-comment' into maint-2.43 2024-02-08 16:22:01 -08:00
git-cvsserver.perl perl: bump the required Perl version to 5.8.1 from 5.8.0 2023-11-17 07:26:32 +09:00
git-difftool--helper.sh
git-filter-branch.sh
git-instaweb.sh doc: switch links to https 2023-11-26 10:07:05 +09:00
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-p4.py Merge branch 'jt/p4-spell-re-with-raw-string' 2024-02-06 14:31:20 -08:00
git-quiltimport.sh
git-request-pull.sh
git-send-email.perl Merge branch 'tz/send-email-negatable-options' into maint-2.43 2024-02-08 16:22:01 -08:00
git-sh-i18n.sh
git-sh-setup.sh
git-submodule.sh
git-svn.perl Merge branch 'tz/send-email-negatable-options' into maint-2.43 2024-02-08 16:22:01 -08:00
GIT-VERSION-GEN Git 2.43.3 2024-02-22 16:14:53 -08:00
git-web--browse.sh
git-zlib.c
git-zlib.h
git.c replay: introduce new builtin 2023-11-26 10:10:48 +09:00
git.rc
gpg-interface.c Merge branch 'jc/sign-buffer-failure-propagation-fix' into maint-2.43 2024-02-13 14:44:48 -08:00
gpg-interface.h tag: fix sign_buffer() call to create a signed tag 2024-02-07 10:47:25 -08:00
graph.c
graph.h doc: switch links to https 2023-11-26 10:07:05 +09:00
grep.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
grep.h
hash-ll.h
hash-lookup.c
hash-lookup.h
hash.h
hashmap.c
hashmap.h
help.c help: handle NULL value for alias.* config 2023-12-09 08:24:47 +09:00
help.h
hex-ll.c
hex-ll.h
hex.c
hex.h
hook.c
hook.h
http-backend.c http-backend: new rpc-service for git-upload-archive 2024-01-22 07:54:37 -08:00
http-fetch.c http.h: remove unnecessary include 2023-12-26 12:04:32 -08:00
http-push.c Merge branch 'es/some-up-to-date-messages-must-stay' 2024-01-26 08:54:45 -08:00
http-walker.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
http.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
http.h http.h: remove unnecessary include 2023-12-26 12:04:32 -08:00
ident.c
ident.h
imap-send.c Merge branch 'pb/imap-send-wo-curl-build-fix' into maint-2.43 2024-02-12 09:57:59 -08:00
INSTALL Merge branch 'js/update-urls-in-doc-and-comment' into maint-2.43 2024-02-08 16:22:01 -08:00
iterator.h
json-writer.c
json-writer.h doc: switch links to https 2023-11-26 10:07:05 +09:00
khash.h
kwset.c doc: switch links to https 2023-11-26 10:07:05 +09:00
kwset.h doc: switch links to https 2023-11-26 10:07:05 +09:00
levenshtein.c
levenshtein.h
LGPL-2.1
line-log.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:33 -08:00
line-log.h line-log.h: remove unnecessary include 2023-12-26 12:04:32 -08:00
line-range.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
line-range.h
linear-assignment.c
linear-assignment.h
list-objects-filter-options.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
list-objects-filter-options.h
list-objects-filter.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
list-objects-filter.h
list-objects.c Merge branch 'tb/rev-list-unpacked-fix' 2023-11-08 15:04:42 +09:00
list-objects.h
list.h doc: switch links to https 2023-11-26 10:07:05 +09:00
lockfile.c
lockfile.h
log-tree.c format-patch: fix leak of empty header string 2024-03-22 09:50:53 -07:00
log-tree.h format-patch: return an allocated string from log_write_email_headers() 2024-03-19 17:54:16 -07:00
ls-refs.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
ls-refs.h
mailinfo.c Merge branch 'jk/mailinfo-iterative-unquote-comment' into maint-2.43 2024-02-08 16:22:03 -08:00
mailinfo.h
mailmap.c
mailmap.h
Makefile Merge branch 'js/update-urls-in-doc-and-comment' into maint-2.43 2024-02-08 16:22:01 -08:00
match-trees.c
match-trees.h
mem-pool.c mem-pool: simplify alignment calculation 2023-12-28 12:22:58 -08:00
mem-pool.h
merge-blobs.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
merge-blobs.h
merge-ll.c merge-ll: expose revision names to custom drivers 2024-01-24 13:15:06 -08:00
merge-ll.h
merge-ort-wrappers.c
merge-ort-wrappers.h
merge-ort.c Merge branch 'jc/comment-style-fixes' into maint-2.43 2024-02-13 14:44:48 -08:00
merge-ort.h
merge-recursive.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
merge-recursive.h
merge.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
merge.h
mergesort.h
midx.c midx: implement midx_preferred_pack() 2023-12-14 14:38:08 -08:00
midx.h Merge branch 'tb/multi-pack-verbatim-reuse' 2024-01-12 16:09:56 -08:00
name-hash.c
name-hash.h
neue attr: add builtin objectmode values support 2023-12-28 13:21:52 -08:00
notes-cache.c
notes-cache.h
notes-merge.c
notes-merge.h
notes-utils.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
notes-utils.h
notes.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
notes.h
object-file.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
object-file.h
object-name.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
object-name.h
object-store-ll.h
object-store.h
object.c
object.h
oid-array.c
oid-array.h
oidmap.c
oidmap.h
oidset.c
oidset.h
oidtree.c
oidtree.h
pack-bitmap-write.c Merge branch 'tb/multi-pack-verbatim-reuse' 2024-01-12 16:09:56 -08:00
pack-bitmap.c Merge branch 'tb/pack-bitmap-drop-unused-struct-member' 2024-02-06 14:31:20 -08:00
pack-bitmap.h pack-bitmap: enable reuse from all bitmapped packs 2023-12-14 14:38:09 -08:00
pack-check.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
pack-mtimes.c
pack-mtimes.h
pack-objects.c pack-objects: free packing_data in more places 2023-12-14 14:38:07 -08:00
pack-objects.h pack-objects: free packing_data in more places 2023-12-14 14:38:07 -08:00
pack-revindex.c pack-revindex: implement midx_pair_to_pack_pos() 2023-12-14 14:38:08 -08:00
pack-revindex.h pack-revindex: implement midx_pair_to_pack_pos() 2023-12-14 14:38:08 -08:00
pack-write.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
pack.h
packfile.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
packfile.h packfile.c: fix a typo in each_file_in_pack_dir_fn()'s declaration 2023-11-20 08:15:50 +09:00
pager.c
pager.h
parallel-checkout.c
parallel-checkout.h
parse-options-cb.c
parse-options.c Merge branch 'rs/parse-options-with-keep-unknown-abbrev-fix' into maint-2.43 2024-02-13 14:44:48 -08:00
parse-options.h
parse.c
parse.h
patch-delta.c
patch-ids.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
patch-ids.h
path.c refs: convert MERGE_AUTOSTASH to become a normal pseudo-ref 2024-01-19 11:10:41 -08:00
path.h refs: convert MERGE_AUTOSTASH to become a normal pseudo-ref 2024-01-19 11:10:41 -08:00
pathspec.c attr: enable attr pathspec magic for git-add and git-stash 2023-11-04 17:00:27 +09:00
pathspec.h
pkt-line.c Merge branch 'jx/sideband-chomp-newline-fix' into maint-2.43 2024-02-08 16:22:11 -08:00
pkt-line.h Merge branch 'jx/sideband-chomp-newline-fix' into maint-2.43 2024-02-08 16:22:11 -08:00
preload-index.c
preload-index.h
pretty.c pretty: drop print_email_subject flag 2024-03-19 17:54:15 -07:00
pretty.h format-patch: return an allocated string from log_write_email_headers() 2024-03-19 17:54:16 -07:00
prio-queue.c
prio-queue.h
progress.c
progress.h
promisor-remote.c
promisor-remote.h
prompt.c
prompt.h
protocol-caps.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
protocol-caps.h
protocol.c
protocol.h doc: switch links to https 2023-11-26 10:07:05 +09:00
prune-packed.c
prune-packed.h
quote.c
quote.h
range-diff.c
range-diff.h
reachable.c prune: mark rebase autostash and orig-head as reachable 2024-02-09 10:04:59 -08:00
reachable.h
read-cache-ll.h
read-cache.c Merge branch 'en/header-cleanup' 2024-01-08 14:05:15 -08:00
read-cache.h
README.md Merge branch 'jc/majordomo-to-subspace' into maint-2.43 2024-02-13 14:44:50 -08:00
rebase-interactive.c
rebase-interactive.h
rebase.c
rebase.h
ref-filter.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
ref-filter.h Merge branch 'en/header-cleanup' 2024-01-08 14:05:15 -08:00
reflog-walk.c
reflog-walk.h
reflog.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
reflog.h
refs.c Merge branch 'ps/not-so-many-refs-are-special' 2024-01-29 16:03:00 -08:00
refs.h Merge branch 'ps/worktree-refdb-initialization' 2024-01-26 08:54:46 -08:00
refspec.c
refspec.h
RelNotes Git 2.43.3 2024-02-22 16:13:38 -08:00
remote-curl.c Merge branch 'jx/remote-archive-over-smart-http' 2024-01-30 13:34:12 -08:00
remote.c Merge branch 'en/header-cleanup' 2024-01-08 14:05:15 -08:00
remote.h Merge branch 'jc/retire-cas-opt-name-constant' into maint-2.43 2024-02-08 16:22:09 -08:00
replace-object.c
replace-object.h
repo-settings.c pack-objects: enable multi-pack reuse via feature.experimental 2024-02-05 15:27:01 -08:00
repository.c refs: convert MERGE_AUTOSTASH to become a normal pseudo-ref 2024-01-19 11:10:41 -08:00
repository.h pack-objects: enable multi-pack reuse via feature.experimental 2024-02-05 15:27:01 -08:00
rerere.c Merge branch 'js/check-null-from-read-object-file' 2024-02-14 15:36:06 -08:00
rerere.h
reset.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
reset.h
resolve-undo.c
resolve-undo.h
revision.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
revision.h rev-list: add commit object support in --missing option 2023-11-01 12:07:18 +09:00
run-command.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
run-command.h
sane-ctype.h
scalar.c Merge branch 'ds/scalar-updates' into maint-2.42 2023-11-02 16:53:15 +09:00
SECURITY.md
send-pack.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
send-pack.h
sequencer.c Merge branch 'vn/rebase-with-cherry-pick-authorship' 2024-02-14 15:36:05 -08:00
sequencer.h sequencer: introduce functions to handle autostashes via refs 2024-01-19 11:10:41 -08:00
serve.c
serve.h
server-info.c
server-info.h
setup.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
setup.h setup: introduce "extensions.refStorage" extension 2024-01-02 09:24:48 -08:00
sh-i18n--envsubst.c doc: switch links to https 2023-11-26 10:07:05 +09:00
sha1dc_git.c
sha1dc_git.h
shallow.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
shallow.h
shared.mak Makefile: simplify output of the libpath_template 2024-01-31 14:43:00 -08:00
shell.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
shortlog.h
sideband.c Merge branch 'cp/sideband-array-index-comment-fix' into maint-2.43 2024-02-08 16:22:12 -08:00
sideband.h
sigchain.c
sigchain.h
simple-ipc.h
sparse-index.c Merge branch 'jh/sparse-index-expand-to-path-fix' 2024-02-08 13:20:34 -08:00
sparse-index.h
split-index.c
split-index.h
stable-qsort.c
statinfo.c Merge branch 'jc/fake-lstat' 2023-12-27 14:52:24 -08:00
statinfo.h
strbuf.c
strbuf.h
streaming.c
streaming.h
string-list.c
string-list.h
strmap.c
strmap.h
strvec.c strvec: drop unnecessary include of hex.h 2023-11-03 08:26:55 +09:00
strvec.h strvec: use correct member name in comments 2024-01-12 13:38:07 -08:00
sub-process.c
sub-process.h
submodule-config.c Merge branch 'vd/fsck-submodule-url-test' 2024-01-26 08:54:47 -08:00
submodule-config.h Merge branch 'vd/fsck-submodule-url-test' 2024-01-26 08:54:47 -08:00
submodule.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
submodule.h
symlinks.c
symlinks.h
tag.c
tag.h
tar.h
tempfile.c
tempfile.h
thread-utils.c
thread-utils.h
tmp-objdir.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
tmp-objdir.h
trace.c doc: switch links to https 2023-11-26 10:07:05 +09:00
trace.h
trace2.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
trace2.h trace2: fix signature of trace2_def_param() macro 2023-11-23 10:30:32 +09:00
trailer.c Merge branch 'la/trailer-cleanups' into maint-2.43 2024-02-22 16:09:45 -08:00
trailer.h trailer: use offsets for trailer_start/trailer_end 2023-12-20 11:55:04 -08:00
transport-helper.c Merge branch 'jk/fetch-auto-tag-following-fix' 2024-02-02 11:31:51 -08:00
transport-internal.h
transport.c Merge branch 'es/some-up-to-date-messages-must-stay' 2024-01-26 08:54:45 -08:00
transport.h
tree-diff.c
tree-walk.c
tree-walk.h
tree.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
tree.h
unicode-width.h
unimplemented.sh
unix-socket.c
unix-socket.h
unix-stream-server.c
unix-stream-server.h
unpack-trees.c
unpack-trees.h
upload-pack.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
upload-pack.h
url.c
url.h
urlmatch.c
urlmatch.h
usage.c
userdiff.c
userdiff.h
utf8.c doc: switch links to https 2023-11-26 10:07:05 +09:00
utf8.h doc: switch links to https 2023-11-26 10:07:05 +09:00
varint.c
varint.h
version.c
version.h
versioncmp.c
versioncmp.h
walker.c
walker.h
wildmatch.c
wildmatch.h
worktree.c Merge branch 'rj/status-bisect-while-rebase' into maint-2.43 2024-02-08 16:22:04 -08:00
worktree.h worktree: expose interface to look up worktree by name 2024-01-08 13:17:30 -08:00
wrap-for-bin.sh
wrapper.c treewide: remove unnecessary includes in source files 2023-12-26 12:04:31 -08:00
wrapper.h
write-or-die.c write-or-die: fix the polarity of GIT_FLUSH environment variable 2024-02-13 11:57:28 -08:00
write-or-die.h
ws.c
ws.h
wt-status.c Merge branch 'rj/status-bisect-while-rebase' into maint-2.43 2024-02-08 16:22:04 -08:00
wt-status.h
xdiff-interface.c Merge branch 'en/header-cleanup' into maint-2.43 2024-02-08 16:22:10 -08:00
xdiff-interface.h

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 to git+subscribe@vger.kernel.org (see https://subspace.kernel.org/subscribing.html for details). The mailing list archives are available at https://lore.kernel.org/git/, https://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