[ANNOUNCE] Git v2.42.0
Linux Kernel
Junio C Hamano
2023-08-21 18:12:24 UTC
The latest feature release Git v2.42.0 is now available at the
usual places.  It is comprised of 453 non-merge commits since
v2.41.0, contributed by 78 people, 17 of which are new faces [*].

The tarballs are found at:


The following public repositories all have a copy of the 'v2.42.0'
tag and the 'master' branch that the tag points at:

  url = https://git.kernel.org/pub/scm/git/git
  url = https://kernel.googlesource.com/pub/scm/git/git
  url = git://repo.or.cz/alt-git.git
  url = https://github.com/gitster/git

New contributors whose contributions weren't in v2.41.0 are as follows.
Welcome to the Git development community!

  Adam Majer, Andreas Herrmann, Greg Alexander, Han Young, Jacob
  Abel, Jan Klötzke, Jim Pryor, Johan Ruokangas, Josh Sref,
  Josip Sokcevic, Louis Strous, Lumynous, Petar Vutov, Premek
  Vysoky, Sebastian Thiel, Tribo Dar, and Vinayak Dev.

Returning contributors who helped this release are as follows.
Thanks for your continued support.

  , Alejandro R. Sedeño, Alex Henrie, Arkadii Yakovets, Bagas
  Sanjaya, Beat Bolli, brian m. carlson, Calvin Wan, Carlo Marcelo
  Arenas Belón, Christian Couder, D. Ben Knoble, Derrick Stolee,
  Dimitriy Ryazantcev, Elijah Newren, Emir SARI, Eric Sunshine,
  Eric Wong, Glen Choo, Hariom Verma, Jacob Keller, Jaydeep Das,
  Jean-Noël Avila, Jeff King, Johannes Schindelin, John Cai,
  Jonathan Nieder, Jonathan Tan, Jordi Mas, Junio C Hamano,
  Kate Golovanova, Kousik Sanagavarapu, Kristoffer Haugsbakk,
  Linus Arver, Martin Ågren, Matthew Hughes, Matthias Aßhauer, M
  Hickford, Michael Haggerty, Mike Hommey, Nsengiyumva Wilberforce,
  Oswald Buddenhagen, Patrick Steinhardt, Peter Krefting,
  Philippe Blain, Phillip Wood, Ralf Thielow, Randall S. Becker,
  René Scharfe, Rubén Justo, Sean Allred, Shuqi Liang, SZEDER
  Gábor, Taylor Blau, Teng Long, Todd Zullinger, Toon Claes,
  Torsten Bögershausen, Victoria Dye, Yi-Jyun Pan, Yuyi Wang,
  and ZheNing Hu.

[*] We are counting not just the authorship contribution but issue
    reporting, mentoring, helping and reviewing that are recorded in
    the commit trailers.


Git v2.42 Release Notes

UI, Workflows & Features

 * "git pack-refs" learns "--include" and "--exclude" to tweak the ref
   hierarchy to be packed using pattern matching.

 * 'git worktree add' learned how to create a worktree based on an
   orphaned branch with `--orphan`.

 * "git pack-objects" learned to invoke a new hook program that
   enumerates extra objects to be used as anchoring points to keep
   otherwise unreachable objects in cruft packs.

 * Add more "git var" for toolsmiths to learn various locations Git is
   configured with either via the configuration or hard-coded defaults.

 * 'git notes append' was taught '--separator' to specify string to insert
   between paragraphs.

 * The "git for-each-ref" family of commands learned placeholders
   related to GPG signature verification.

 * "git diff --no-index" learned to read from named pipes as if they
   were regular files, to allow "git diff <(process) <(substitution)"
   some shells support.

 * Help newbies by suggesting that there are cases where force-pushing
   is a valid and sensible thing to update a branch at a remote
   repository, rather than reconciling with merge/rebase.

 * "git blame --contents=file" has been taught to work in a bare

 * "git branch -f X" to repoint the branch X said that X was "checked
   out" in another worktree, even when branch X was not and instead
   being bisected or rebased.  The message was reworded to say the
   branch was "in use".

 * Tone down the warning on SHA-256 repositories being an experimental
   curiosity.  We do not have support for them to interoperate with
   traditional SHA-1 repositories, but at this point, we do not plan
   to make breaking changes to SHA-256 repositories and there is no
   longer need for such a strongly phrased warning.

Performance, Internal Implementation, Development Support etc.

 * "git diff-tree" has been taught to take advantage of the
   sparse-index feature.

 * Clang's sanitizer implementation seems to work better than GCC's.
   (merge d88d727143 jk/ci-use-clang-for-sanitizer-jobs later to maint).

 * The object traversal using reachability bitmap done by
   "pack-object" has been tweaked to take advantage of the fact that
   using "boundary" commits as representative of all the uninteresting
   ones can save quite a lot of object enumeration.

 * discover_git_directory() no longer touches the_repository.

 * "git worktree" learned to work better with sparse index feature.

 * When the external merge driver is killed by a signal, its output
   should not be trusted as a resolution with conflicts that is
   proposed by the driver, but the code did.

 * The set-up code for the get_revision() API now allows feeding
   options like --all and --not in the --stdin mode.

 * Move functions that are not about pure string manipulation out of

 * "imap-send" codepaths got cleaned up to get rid of unused

 * Enumerating refs in the packed-refs file, while excluding refs that
   match certain patterns, has been optimized.

 * Mark-up unused parameters in the code so that we can eventually
   enable -Wunused-parameter by default.

 * Instead of inventing a custom counter variables for debugging,
   use existing trace2 facility in the fsync customization codepath.

 * "git branch --list --format=<format>" and friends are taught
   a new "%(describe)" placeholder.

 * Clarify how to choose the starting point for a new topic in
   developer guidance document.

 * The implementation of "get_sha1_hex()" that reads a hexadecimal
   string that spells a full object name has been extended to cope
   with any hash function used in the repository, but the "sha1" in
   its name survived.  Rename it to get_hash_hex(), a name that is
   more consistent within its friends like get_hash_hex_algop().

 * Command line parser fix, and a small parse-options API update.

Fixes since v2.41

 * "git tag" learned to leave the "$GIT_DIR/TAG_EDITMSG" file when the
   command failed, so that the user can salvage what they typed.
   (merge 08c12ec1d0 kh/keep-tag-editmsg-upon-failure later to maint).

 * The "-s" (silent, squelch) option of the "diff" family of commands
   did not interact with other options that specify the output format
   well.  This has been cleaned up so that it will clear all the
   formatting options given before.
   (merge 9d484b92ed jc/diff-s-with-other-options later to maint).

 * Update documentation regarding Coccinelle patches.
   (merge 3bd0097cfc gc/doc-cocci-updates later to maint).

 * Some atoms that can be used in "--format=<format>" for "git ls-tree"
   were not supported by "git ls-files", even though they were relevant
   in the context of the latter.
   (merge 4d28c4f75f zh/ls-files-format-atoms later to maint).

 * Document more pseudo-refs and teach the command line completion
   machinery to complete AUTO_MERGE.
   (merge 982ff3a649 pb/complete-and-document-auto-merge-and-friends later to maint).

 * "git submodule" code trusted the data coming from the config (and
   the in-tree .gitmodules file) too much without validating, leading
   to NULL dereference if the user mucks with a repository (e.g.
   submodule.<name>.url is removed).  This has been corrected.
   (merge fbc806acd1 tb/submodule-null-deref-fix later to maint).

 * The value of config.worktree is per-repository, but has been kept
   in a singleton global variable per process. This has been OK as
   most Git operations interacted with a single repository at a time,
   but not right for operations like recursive "grep" that want to
   access multiple repositories from a single process without forking.

   The global variable has been eliminated and made into a member in
   the per-repository data structure.
   (merge 3867f6d650 vd/worktree-config-is-per-repository later to maint).

 * "git [-c log.follow=true] log [--follow] ':(glob)f**'" used to barf.
   (merge 8260bc5902 jk/log-follow-with-non-literal-pathspec later to maint).

 * Introduce a mechanism to disable replace refs globally and per
   (merge 9c7d1b057f ds/disable-replace-refs later to maint).

 * "git cat-file --batch" and friends learned "-Z" that uses NUL
   delimiter for both input and output.
   (merge f79e18849b ps/cat-file-null-output later to maint).

 * The reimplemented "git add -i" did not honor color.ui configuration.
   (merge 6f74648cea ds/add-i-color-configuration-fix later to maint).

 * Compilation fix for platforms without D_TYPE in struct dirent.
   (merge 03bf92b9bf as/dtype-compilation-fix later to maint).

 * Suggest to refrain from using hex literals that are non-portable
   when writing printf(1) format strings.
   (merge f0b68f0546 jt/doc-use-octal-with-printf later to maint).

 * Simplify error message when run-command fails to start a command.
   (merge 6d224ac286 rs/run-command-exec-error-on-noent later to maint).

 * Gracefully deal with a stale MIDX file that lists a packfile that
   no longer exists.
   (merge 06f3867865 tb/open-midx-bitmap-fallback later to maint).

 * Even when diff.ignoreSubmodules tells us to ignore submodule
   changes, "git commit" with an index that already records changes to
   submodules should include the submodule changes in the resulting
   commit, but it did not.
   (merge 5768478edc js/defeat-ignore-submodules-config-with-explicit-addition later to maint).

 * When "git commit --trailer=..." invokes the interpret-trailers
   machinery, it knows what it feeds to interpret-trailers is a full
   log message without any patch, but failed to express that by
   passing the "--no-divider" option, which has been corrected.
   (merge be3d654343 jk/commit-use-no-divider-with-interpret-trailers later to maint).

 * Avoid breakage of "git pack-objects --cruft" due to inconsistency
   between the way the code enumerates packfiles in the repository.
   (merge 73320e49ad tb/collect-pack-filenames-fix later to maint).

 * We create .pack and then .idx, we consider only packfiles that have
   .idx usable (those with only .pack are not ready yet), so we should
   remove .idx before removing .pack for consistency.
   (merge 0dd1324a73 ds/remove-idx-before-pack later to maint).

 * Partially revert a sanity check that the rest of the config code
   was not ready, to avoid triggering it in a corner case.
   (merge a53f43f900 gc/config-partial-submodule-kvi-fix later to maint).

 * "git apply" punts when it is fed too large a patch input; the error
   message it gives when it happens has been clarified.
   (merge 42612e18d2 pw/apply-too-large later to maint).

 * During a cherry-pick or revert session that works on multiple
   commits, "git status" did not give correct information, which has
   been corrected.
   (merge a096a889f4 jk/cherry-pick-revert-status later to maint).

 * A few places failed to differentiate the case where the index is
   truly empty (nothing added) and we haven't yet read from the
   on-disk index file, which have been corrected.
   (merge 2ee045eea1 js/empty-index-fixes later to maint).

 * "git bugreport" tests did not test what it wanted to test, which
   has been corrected.
   (merge 1aa92b8500 ma/t0091-fixup later to maint).

 * Code snippets in a tutorial document no longer compiled after
   recent header shuffling, which have been corrected.
   (merge bbd7c7b7c0 vd/adjust-mfow-doc-to-updated-headers later to maint).

 * "git ls-files '(attr:X)D/'" that triggers the common prefix
   optimization codepath failed to read from "D/.gitattributes",
   which has been corrected.
   (merge f4a8fde057 jc/pathspec-match-with-common-prefix later to maint).

 * "git fsck --no-progress" still spewed noise from the commit-graph
   subsystem, which has been corrected.
   (merge 9281cd07f0 tb/fsck-no-progress later to maint).

 * Various offset computation in the code that accesses the packfiles
   and other data in the object layer has been hardened against
   arithmetic overflow, especially on 32-bit systems.
   (merge 9a25cad7e0 tb/object-access-overflow-protection later to maint).

 * Names of MinGW header files are spelled in mixed case in some
   source files, but the build host can be using case sensitive
   filesystem with header files with their name spelled in all
   (merge 4a53d0d0bc mh/mingw-case-sensitive-build later to maint).

 * Update message mark-up for i18n in "git bundle".
   (merge bbb6acd998 dk/bundle-i18n-more later to maint).

 * "git tag --list --points-at X" showed tags that directly refers to
   object X, but did not list a tag that points at such a tag, which
   has been corrected.

 * "./configure --with-expat=no" did not work as a way to refuse use
   of the expat library on a system with the library installed, which
   has been corrected.
   (merge fb8f7269c2 ah/autoconf-fixes later to maint).

 * When the user edits "rebase -i" todo file so that it starts with a
   "fixup", which would make it invalid, the command truncated the
   rest of the file before giving an error and returning the control
   back to the user.  Stop truncating to make it easier to correct
   such a malformed todo file.
   (merge 9645a087c2 ah/sequencer-rewrite-todo-fix later to maint).

 * Rewrite the description of giving a custom command to the
   submodule.<name>.update configuration variable.
   (merge 7cebc5bd78 pv/doc-submodule-update-settings later to maint).

 * Adjust to OpenSSL 3+, which deprecates its SHA-1 functions based on
   its traditional API, by using its EVP API instead.
   (merge bda9c12073 ew/hash-with-openssl-evp later to maint).

 * Exclude "." from the set of characters to be removed from the
   beginning and the end of the human-readable name.
   (merge 1c04cb0744 bc/ident-dot-is-no-longer-crud-letter later to maint).

 * "git bisect visualize" stopped running "gitk" on Git for Windows
   when the command was reimplemented in C around Git 2.34 timeframe.
   This has been corrected.
   (merge fff1594fa7 ma/locate-in-path-for-windows later to maint).

 * "git rebase -i" with a series of squash/fixup, when one of the
   steps stopped in conflicts and ended up getting skipped, did not
   handle the accumulated commit log messages, which has been
   (merge 6ce7afe163 pw/rebase-skip-commit-message-fix later to maint).

 * Adjust to newer Term::ReadLine to prevent it from breaking
   the interactive prompt code in send-email.
   (merge c016726c2d jk/send-email-with-new-readline later to maint).

 * Windows updates.
   (merge 0050f8e401 ds/maintenance-on-windows-fix later to maint).

 * Correct use of lstat() that assumed a failing call would not
   clobber the statbuf.
   (merge 72695d8214 st/mv-lstat-fix later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 51f9d2e563 sa/doc-ls-remote later to maint).
   (merge c6d26a9dda jk/format-patch-message-id-unleak later to maint).
   (merge f7e063f326 ps/fetch-cleanups later to maint).
   (merge e4cf013468 tl/quote-problematic-arg-for-clarity later to maint).
   (merge 20025fdfc7 tz/test-ssh-verifytime-fix later to maint).
   (merge e48a21df65 tz/test-fix-pthreads-prereq later to maint).
   (merge 68b51172e3 mh/commit-reach-get-reachable-plug-leak later to maint).
   (merge aeee1408ce kh/use-default-notes-doc later to maint).
   (merge 3b8724bce6 jc/test-modernization later to maint).
   (merge 447a3b7331 jc/test-modernization-2 later to maint).
   (merge d57fa7fc73 la/doc-interpret-trailers later to maint).
   (merge 548afb0d9a la/docs-typofixes later to maint).
   (merge 3744ffcbcd rs/doc-ls-tree-hex-literal later to maint).
   (merge 6c26da8404 mh/credential-erase-improvements later to maint).
   (merge 78e56cff69 tz/lib-gpg-prereq-fix later to maint).
   (merge 80d32e84b5 rj/leakfixes later to maint).
   (merge 0a868031ed pb/complete-diff-options later to maint).
   (merge d4f28279ad jc/doc-hash-object-types later to maint).
   (merge 1876a5ae15 ks/t4205-test-describe-with-abbrev-fix later to maint).
   (merge 6e6a529b57 jk/fsck-indices-in-worktrees later to maint).
   (merge 3e81b896f7 rs/packet-length-simplify later to maint).
   (merge 4c9cb51fe7 mh/doc-credential-helpers later to maint).
   (merge 3437f549dd jr/gitignore-doc-example-markup later to maint).
   (merge 947ebd62a0 jc/am-parseopt-fix later to maint).
   (merge e12cb98e1e jc/branch-parseopt-fix later to maint).
   (merge d6f598e443 jc/gitignore-doc-pattern-markup later to maint).
   (merge a2dad4868b jc/transport-parseopt-fix later to maint).
   (merge 68cbb20e73 jc/parse-options-show-branch later to maint).
   (merge 3821eb6c3d jc/parse-options-reset later to maint).
   (merge c48af99a3e bb/trace2-comment-fix later to maint).
   (merge c95ae3ff9c rs/describe-parseopt-fix later to maint).
   (merge 36f76d2a25 rs/pack-objects-parseopt-fix later to maint).
   (merge 30c8c55cbf jc/tree-walk-drop-base-offset later to maint).
   (merge d089a06421 rs/bundle-parseopt-cleanup later to maint).
   (merge 823839bda1 ew/sha256-gcrypt-leak-fixes later to maint).
   (merge a5c01603b3 bc/ignore-clangd-cache later to maint).
   (merge 12009a182b js/allow-t4000-to-be-indented-with-spaces later to maint).
   (merge b3dcd24b8a jc/send-email-pre-process-fix later to maint).


Changes since v2.41.0 are as follows:

Adam Majer (1):
      doc: sha256 is no longer experimental

Alejandro R. Sedeño (1):
      statinfo.h: move DTYPE defines from dir.h

Alex Henrie (4):
      wt-status: don't show divergence advice when committing
      remote: don't imply that integration is always required before pushing
      push: don't imply that integration is always required before pushing
      sequencer: finish parsing the todo list despite an invalid first line

Andreas Herrmann (3):
      configure.ac: don't overwrite NO_EXPAT option
      configure.ac: don't overwrite NO_CURL option
      configure.ac: always save NO_ICONV to config.status

Arkadii Yakovets (1):
      l10n: uk: update translation (2.42.0)

Bagas Sanjaya (1):
      l10n: po-id for 2.42 (round 1)

Beat Bolli (2):
      trace2: fix a comment
      wrapper: use trace2 counters to collect fsync stats

Calvin Wan (13):
      strbuf: clarify API boundary
      strbuf: clarify dependency
      abspath: move related functions to abspath
      credential-store: move related functions to credential-store file
      object-name: move related functions to object-name
      path: move related function to path
      strbuf: remove global variable
      git-compat-util: move strbuf.c funcs to its header
      git-compat-util: move wrapper.c funcs to its header
      sane-ctype.h: create header for sane-ctype macros
      kwset: move translation table from ctype
      treewide: remove unnecessary includes for wrapper.h
      git-compat-util: move alloc macros to git-compat-util.h

D. Ben Knoble (2):
      i18n: mark more bundle.c strings for translation
      t4002: fix "diff can read from stdin" syntax

Derrick Stolee (7):
      add: check color.ui for interactive add
      add: test use of brackets when color is disabled
      repository: create disable_replace_refs()
      replace-objects: create wrapper around setting
      repository: create read_replace_refs setting
      packfile: delete .idx files before .pack files
      builtin/repack.c: only repack `.pack`s that exist

Dimitriy Ryazantcev (1):
      l10n: ru.po: update Russian translation

Elijah Newren (28):
      init-db: document existing bug with core.bare in template config
      init-db: remove unnecessary global variable
      init-db, clone: change unnecessary global into passed parameter
      setup: adopt shared init-db & clone code
      read-cache: move shared commit and ls-files code
      add: modify add_files_to_cache() to avoid globals
      read-cache: move shared add/checkout/commit code
      statinfo: move stat_{data,validity} functions from cache/read-cache
      run-command.h: move declarations for run-command.c from cache.h
      name-hash.h: move declarations for name-hash.c from cache.h
      sparse-index.h: move declarations for sparse-index.c from cache.h
      preload-index.h: move declarations for preload-index.c from elsewhere
      diff.h: move declaration for global in diff.c from cache.h
      merge.h: move declarations for merge.c from cache.h
      repository.h: move declaration of the_index from cache.h
      read-cache*.h: move declarations for read-cache.c functions from cache.h
      cache.h: remove this no-longer-used header
      log-tree: replace include of revision.h with simple forward declaration
      repository: remove unnecessary include of path.h
      diff.h: remove unnecessary include of oidset.h
      list-objects-filter-options.h: remove unneccessary include
      builtin.h: remove unneccessary includes
      git-compat-util.h: remove unneccessary include of wildmatch.h
      merge-ll: rename from ll-merge
      khash: name the structs that khash declares
      object-store-ll.h: split this header out of object-store.h
      hash-ll, hashmap: move oidhash() to hash-ll
      fsmonitor-ll.h: split this header out of fsmonitor.h

Emir SARI (1):
      l10n: tr: git 2.42.0

Eric Sunshine (1):
      fsck: avoid misleading variable name

Eric Wong (5):
      sha256/gcrypt: fix build with SANITIZE=leak
      sha256/gcrypt: fix memory leak with SHA-256 repos
      sha256/gcrypt: die on gcry_md_open failures
      sha256: avoid functions deprecated in OpenSSL 3+
      avoid SHA-1 functions deprecated in OpenSSL 3+

Glen Choo (16):
      cocci: add headings to and reword README
      cocci: codify authoring and reviewing practices
      setup.c: don't setup in discover_git_directory()
      config: don't BUG when both kvi and source are set
      config: inline git_color_default_config
      urlmatch.h: use config_fn_t type
      config: add ctx arg to config_fn_t
      config.c: pass ctx in configsets
      config: pass ctx with config files
      config.c: pass ctx with CLI config
      trace2: plumb config kvi
      config: pass kvi to die_bad_number()
      config.c: remove config_reader from configsets
      config: add kvi.path, use it to evaluate includes
      config: pass source to config_parser_event_fn_t
      mailmap: change primary address for Glen Choo

Han Young (1):
      blame: allow --contents to work with bare repo

Jacob Abel (11):
      worktree add: include -B in usage docs
      t2400: cleanup created worktree in test
      t2400: refactor "worktree add" opt exclusion tests
      t2400: add tests to verify --quiet
      worktree add: add --orphan flag
      worktree add: introduce "try --orphan" hint
      worktree add: extend DWIM to infer --orphan
      worktree add: emit warn when there is a bad HEAD
      t2400: drop no-op `--sq` from rev-parse call
      builtin/worktree.c: convert tab in advice to space
      t2400: rewrite regex to avoid unintentional PCRE

Jacob Keller (1):
      fix cherry-pick/revert status when doing multiple commits

Jan Klötzke (1):
      ref-filter: handle nested tags in --points-at option

Jean-Noël Avila (2):
      l10n: fr v2.42.0 rnd 1
      l10n: fr v2.42.0 rnd 2

Jeff King (41):
      format-patch: free rev.message_id when exiting
      format-patch: free elements of rev.ref_message_ids list
      pathspec: factor out magic-to-name function
      diff: factor out --follow pathspec check
      diff: detect pathspec magic not supported by --follow
      ci: use clang for ASan/UBSan checks
      ci: run ASan/UBSan in a single job
      ci: drop linux-clang job
      commit: pass --no-divider to interpret-trailers
      http: handle both "h2" and "h2h3" in curl info lines
      var: mark unused parameters in git_var callbacks
      imap-send: use server conf argument in setup_curl()
      imap-send: drop unused parameter from imap_cmd_cb callback
      imap-send: drop unused fields from imap_cmd_cb
      refs.c: rename `ref_filter`
      ref-filter.h: provide `REF_FILTER_INIT`
      ref-filter: clear reachable list pointers after freeing
      ref-filter: add `ref_filter_clear()`
      ref-filter.c: parameterize match functions over patterns
      test-ref-store: drop unimplemented reflog-expire command
      do_for_each_ref_helper(): mark unused repository parameter
      http: mark unused parameters in curl callbacks
      http-push: mark unused parameter in xml callback
      am: mark unused keep_cr parameters
      count-objects: mark unused parameter in alternates callback
      revisions: drop unused "opt" parameter in "tweak" callbacks
      fsck: mark unused parameters in various fsck callbacks
      merge-tree: mark unused parameter in traverse callback
      replace: mark unused parameter in ref callback
      replace: mark unused parameter in each_mergetag_fn callback
      rev-parse: mark unused parameter in for_each_abbrev callback
      tag: mark unused parameters in each_tag_name_fn callbacks
      t/helper: mark unused callback void data parameters
      ref-filter: avoid parsing tagged objects in match_points_at()
      ref-filter: avoid parsing non-tags in match_points_at()
      ref-filter: simplify return type of match_points_at
      send-email: drop FakeTerm hack
      send-email: avoid creating more than one Term::ReadLine object
      repack: free geometry struct
      t4053: avoid writing to unopened pipe
      fsck: use enum object_type for fsck_walk callback

Johan Ruokangas (1):
      gitignore.txt: use backticks instead of double quotes

Johannes Schindelin (6):
      do_read_index(): always mark index as initialized unless erroring out
      split-index: accept that a base index can be empty
      commit -a -m: allow the top-level tree to become empty again
      t0040: declare non-tab indentation to be okay in this script
      win32: add a helper to run `git.exe` without a foreground window
      git maintenance: avoid console window in scheduled tasks on Windows

John Cai (34):
      docs: clarify git-pack-refs --all will pack all refs
      pack-refs: teach --exclude option to exclude refs from being packed
      pack-refs: teach pack-refs --include option
      t0000-basic: modernize test format
      t0030-stripspace: modernize test format
      t3210-pack-refs: modernize test format
      t1001-read-tree-m-2way: modernize test format
      t1002-read-tree-m-u-2way: modernize test format
      t1006-cat-file: modernize test format
      t3500-cherry: modernize test format
      t3700-add: modernize test format
      t3903-stash: modernize test format
      t4002-diff-basic: modernize test format
      t4003-diff-rename-1: modernize test format
      t4004-diff-rename-symlink: modernize test format
      t4202-log: modernize test format
      t4206-log-follow-harder-copies: modernize test format
      t5300-pack-object: modernize test format
      t5301-sliding-window: modernize test format
      t5303-pack-corruption-resilience: modernize test format
      t5306-pack-nobase: modernize test format
      t6050-replace: modernize test format
      t7101-reset-empty-subdirs: modernize test format
      t7110-reset-merge: modernize test format
      t7111-reset-table: modernize test format
      t7201-co: modernize test format
      t7508-status: modernize test format
      t7600-merge: modernize test format
      t7700-repack: modernize test format
      t9100-git-svn-basic: modernize test format
      t9104-git-svn-follow-parent: modernize test format
      t9200-git-cvsexportcommit: modernize test format
      t9400-git-cvsserver-server: modernize test format
      docs: add git hash-object -t option's possible values

Jonathan Tan (1):
      CodingGuidelines: use octal escapes, not hex

Jordi Mas (1):
      l10n: Update Catalan translation

Josip Sokcevic (1):
      diff-lib: honor override_submodule_config flag bit

Junio C Hamano (48):
      diff: fix interaction between the "-s" option and other options
      show-branch doc: say <ref>, not <reference>
      Start the 2.42 cycle
      The second batch for 2.42
      The third batch
      ll-merge: killing the external merge driver aborts the merge
      The fourth batch
      t6406: skip "external merge driver getting killed by a signal" test on Windows
      The fifth batch
      The sixth batch
      The seventh batch
      The eighth batch
      t6135: attr magic with path pattern
      tree-walk: lose base_offset that is never used in tree_entry_interesting
      tree-walk: drop unused base_offset from do_match()
      The ninth batch
      dir: match "attr" pathspec magic with correct paths
      The tenth batch
      The eleventh batch
      The twelfth batch
      gitignore.txt: mark up explanation of patterns consistently
      am: simplify parsing of "--[no-]keep-cr"
      branch: reject "--no-all" and "--no-remotes" early
      parse-options: introduce OPT_IPVERSION()
      fetch: reject --no-ipv[46]
      show-branch: --no-sparse should give dense output
      short help: allow multi-line opthelp
      remote: simplify "remote add --tags" help text
      short help: allow a gap smaller than USAGE_GAP
      show-branch: reject --[no-](topo|date)-order
      reset: reject --no-(mixed|soft|hard|merge|keep) option
      The thirteenth batch
      branch: update the message to refuse touching a branch in-use
      hex: retire get_sha1_hex()
      The fourteenth batch
      SubmittingPatches: choice of base for fixing an older maintenance track
      The fifteenth batch
      SubmittingPatches: explain why 'next' and above are inappropriate base
      SubmittingPatches: use of older maintenance tracks is an exception
      The sixteenth batch
      MyFirstContribution: refrain from self-iterating too much
      The seventeenth batch
      The eighteenth batch
      Git 2.42-rc0
      A few more topics before -rc1
      Git 2.42-rc1
      Git 2.42-rc2
      Git 2.42

Kousik Sanagavarapu (5):
      t/lib-gpg: introduce new prereq GPG2
      ref-filter: add new "signature" atom
      t4205: correctly test %(describe:abbrev=...)
      ref-filter: add multiple-option parsing functions
      ref-filter: add new "describe" atom

Kristoffer Haugsbakk (5):
      doc: tag: document `TAG_EDITMSG`
      t/t7004-tag: add regression test for successful tag creation
      tag: keep the message file in case ref transaction fails
      notes: update documentation for `use_default_notes`
      notes: move the documentation to the struct

Linus Arver (15):
      docs: typofixes
      doc: trailer: fix grammar
      doc: trailer: swap verb order
      doc: trailer: drop "commit message part" phrasing
      doc: trailer: examples: avoid the word "message" by itself
      doc: trailer: remove redundant phrasing
      doc: trailer: use angle brackets for <token> and <value>
      doc: trailer.<token>.command: emphasize deprecation
      doc: trailer: mention 'key' in DESCRIPTION
      doc: trailer: add more examples in DESCRIPTION
      SubmittingPatches: reword awkward phrasing
      SubmittingPatches: discuss subsystems separately from git.git
      SubmittingPatches: de-emphasize branches as starting points
      SubmittingPatches: emphasize need to communicate non-default starting points
      SubmittingPatches: simplify guidance for choosing a starting point

M Hickford (3):
      credential: avoid erasing distinct password
      credential: erase all matching credentials
      doc: gitcredentials: link to helper list

Martin Ågren (5):
      t0091-bugreport.sh: actually verify some content of report
      notes doc: split up run-on sentences
      notes doc: tidy up `--no-stripspace` paragraph
      show-ref doc: fix carets in monospace
      rev-list-options: fix typo in `--stdin` documentation

Matthias Aßhauer (3):
      run-command: conditionally define locate_in_PATH()
      compat/mingw: implement a native locate_in_PATH()
      docs: update when `git bisect visualize` uses `gitk`

Mike Hommey (2):
      commit-reach: fix memory leak in get_reachable_subset()
      mingw: use lowercase includes for some Windows headers

Oswald Buddenhagen (2):
      advice: handle "rebase" in error_resolve_conflict()
      t9001: remove excessive GIT_SEND_EMAIL_NOTTY=1

Patrick Steinhardt (17):
      fetch: drop unused DISPLAY_FORMAT_UNKNOWN enum value
      fetch: drop unneeded NULL-check for `remote_ref`
      fetch: pass through `fetch_config` directly
      fetch: use `fetch_config` to store "fetch.prune" value
      fetch: use `fetch_config` to store "fetch.pruneTags" value
      fetch: use `fetch_config` to store "fetch.showForcedUpdates" value
      fetch: use `fetch_config` to store "fetch.recurseSubmodules" value
      fetch: use `fetch_config` to store "fetch.parallel" value
      fetch: use `fetch_config` to store "submodule.fetchJobs" value
      t1006: don't strip timestamps from expected results
      t1006: modernize test style to use `test_cmp`
      strbuf: provide CRLF-aware helper to read until a specified delimiter
      cat-file: simplify reading from standard input
      cat-file: add option '-Z' that delimits input and output with NUL
      revision: reorder `read_revisions_from_stdin()`
      revision: small readability improvement for reading from stdin
      revision: handle pseudo-opts in `--stdin` mode

Petar Vutov (1):
      doc: highlight that .gitmodules does not support !command

Peter Krefting (1):
      l10n: sv.po: Update Swedish translation 5549t0f0u

Philippe Blain (30):
      revisions.txt: use description list for special refs
      revisions.txt: document more special refs
      completion: complete REVERT_HEAD and BISECT_HEAD
      git-merge.txt: modernize word choice in "True merge" section
      Documentation: document AUTO_MERGE
      completion: complete AUTO_MERGE
      completion: add comments describing __git_diff_* globals
      completion: complete --break-rewrites
      completion: complete --cc
      completion: complete --combined-all-paths
      completion: complete --compact-summary
      completion: complete --default-prefix
      completion: complete --find-copies
      completion: complete --find-object
      completion: complete --find-renames
      completion: complete --function-context
      completion: complete --ignore-matching-lines
      completion: complete --irreversible-delete
      completion: complete --ita-invisible-in-index and --ita-visible-in-index
      completion: complete --line-prefix
      completion: complete --no-relative
      completion: complete --no-stat
      completion: complete --output
      completion: complete --output-indicator-{context,new,old}
      completion: complete --unified
      completion: complete --ws-error-highlight
      completion: move --pickaxe-{all,regex} to __git_diff_common_options
      completion: complete --diff-merges, its options and --no-diff-merges
      completion: complete --remerge-diff
      diff.c: mention completion above add_diff_options

Phillip Wood (7):
      apply: improve error messages when reading patch
      diff --no-index: refuse to compare stdin to a directory
      diff --no-index: die on error reading stdin
      t4054: test diff --no-index with stdin
      diff --no-index: support reading from named pipes
      rebase --skip: fix commit message clean up when skipping squash
      t4053: avoid race when killing background processes

Ralf Thielow (1):
      l10n: Update German translation

René Scharfe (20):
      t1800: loosen matching of error message for bad shebang
      run-command: report exec error even on ENOENT
      ls-tree: fix documentation of %x format placeholder
      pretty: factor out expand_separator()
      strbuf: factor out strbuf_expand_step()
      replace strbuf_expand_dict_cb() with strbuf_expand_step()
      replace strbuf_expand() with strbuf_expand_step()
      strbuf: simplify strbuf_expand_literal_cb()
      ls-tree: simplify prefix handling
      pretty: avoid double negative in format_commit_item()
      pkt-line: add size parameter to packet_length()
      pretty: use strchr(3) in userformat_find_requirements()
      t6300: fix setup with GPGSSH but without GPG
      strbuf: use skip_prefix() in strbuf_addftime()
      ls-tree: fix --no-full-name
      describe: fix --no-exact-match
      pack-objects: fix --no-keep-true-parents
      pack-objects: fix --no-quiet
      bundle: use OPT_PASSTHRU_ARGV
      parse-options: disallow negating OPTION_SET_INT 0

Rubén Justo (11):
      config: fix a leak in git_config_copy_or_rename_section_in_file
      remote: fix a leak in query_matches_negative_refspec
      branch: fix a leak in dwim_and_setup_tracking
      branch: fix a leak in inherit_tracking
      branch: fix a leak in check_tracking_branch
      branch: fix a leak in setup_tracking
      rev-parse: fix a leak with --abbrev-ref
      branch: fix a leak in setup_tracking
      branch: fix a leak in cmd_branch
      config: fix a leak in git_config_copy_or_rename_section_in_file
      tests: mark as passing with SANITIZE=leak

Sean Allred (5):
      show-ref doc: update for internal consistency
      ls-remote doc: remove redundant --tags example
      ls-remote doc: show peeled tags in examples
      ls-remote doc: explain what each example does
      ls-remote doc: document the output format

Sebastian Thiel (1):
      mv: handle lstat() failure correctly

Shuqi Liang (2):
      diff-tree: integrate with sparse index
      worktree: integrate with sparse-index

Taylor Blau (53):
      object: add object_array initializer helper function
      pack-bitmap.c: extract `fill_in_bitmap()`
      pack-bitmap.c: use commit boundary during bitmap traversal
      builtin/submodule--helper.c: handle missing submodule URLs
      builtin/repack.c: only collect fully-formed packs
      reachable.c: extract `obj_is_recent()`
      gc: introduce `gc.recentObjectsHook`
      pack-bitmap.c: gracefully degrade on failure to load MIDX'd pack
      t7701: make annotated tag unreachable
      fsck: suppress commit-graph output with `--no-progress`
      fsck: suppress MIDX output with `--no-progress`
      commit-graph.c: extract `verify_one_commit_graph()`
      commit-graph.c: iteratively verify commit-graph chains
      commit-graph.c: pass progress to `verify_one_commit_graph()`
      commit-graph.c: avoid duplicated progress output during `verify`
      builtin/for-each-ref.c: add `--exclude` option
      refs: plumb `exclude_patterns` argument throughout
      refs/packed-backend.c: refactor `find_reference_location()`
      refs/packed-backend.c: implement jump lists to avoid excluded pattern(s)
      refs/packed-backend.c: add trace2 counters for jump list
      revision.h: store hidden refs in a `strvec`
      refs.h: let `for_each_namespaced_ref()` take excluded patterns
      refs.h: implement `hidden_refs_to_excludes()`
      builtin/receive-pack.c: avoid enumerating hidden references
      upload-pack.c: avoid enumerating hidden refs where possible
      ls-refs.c: avoid enumerating hidden refs where possible
      builtin/repack.c: avoid dir traversal in `collect_pack_filenames()`
      packfile.c: prevent overflow in `nth_packed_object_id()`
      packfile.c: prevent overflow in `load_idx()`
      packfile.c: use checked arithmetic in `nth_packed_object_offset()`
      midx.c: use `size_t`'s for fanout nr and alloc
      midx.c: prevent overflow in `nth_midxed_object_oid()`
      midx.c: prevent overflow in `nth_midxed_offset()`
      midx.c: store `nr`, `alloc` variables as `size_t`'s
      midx.c: prevent overflow in `write_midx_internal()`
      midx.c: prevent overflow in `fill_included_packs_batch()`
      pack-bitmap.c: ensure that eindex lookups don't overflow
      commit-graph.c: prevent overflow in `write_commit_graph_file()`
      commit-graph.c: prevent overflow in add_graph_to_chain()
      commit-graph.c: prevent overflow in `load_oid_from_graph()`
      commit-graph.c: prevent overflow in `fill_commit_graph_info()`
      commit-graph.c: prevent overflow in `fill_commit_in_graph()`
      commit-graph.c: prevent overflow in `load_tree_for_commit()`
      commit-graph.c: prevent overflow in `split_graph_merge_strategy()`
      commit-graph.c: prevent overflow in `merge_commit_graph()`
      commit-graph.c: prevent overflow in `write_commit_graph()`
      commit-graph.c: prevent overflow in `verify_commit_graph()`
      t/lib-commit-graph.sh: allow `graph_read_expect()` in sub-directories
      t/lib-commit-graph.sh: avoid directory change in `graph_git_behavior()`
      t5318: avoid top-level directory changes
      t5328: avoid top-level directory changes
      t/lib-commit-graph.sh: avoid sub-shell in `graph_git_behavior()`
      Documentation/RelNotes/2.42.0.txt: typofix

Teng Long (10):
      surround %s with quotes when failed to lookup commit
      notes.c: cleanup 'strbuf_grow' call in 'append_edit'
      notes.c: use designated initializers for clarity
      t3321: add test cases about the notes stripspace behavior
      notes.c: introduce '--separator=<paragraph-break>' option
      notes.c: append separator instead of insert by pos
      notes.c: introduce "--[no-]stripspace" option
      notes: introduce "--no-separator" option
      l10n: zh_CN: v2.42.0 round 1
      l10n: zh_CN: 2.42.0 round 2

Todd Zullinger (3):
      trace2 tests: fix PTHREADS prereq
      t/lib-gpg: fix ssh-keygen -Y check-novalidate with openssh-9.0
      t/lib-gpg: require GPGSSH for GPGSSH_VERIFYTIME prereq

Victoria Dye (3):
      config: use gitdir to get worktree config
      config: pass 'repo' directly to 'config_with_options()'
      repository: move 'repository_format_worktree_config' to repo scope

Vinayak Dev (1):
      docs: add necessary headers to Documentation/MFOW.txt

Yi-Jyun Pan (1):
      l10n: zh_TW.po: Git 2.42

ZheNing Hu (1):
      ls-files: align format atoms with ls-tree

brian m. carlson (9):
      t: add a function to check executable bit
      var: add support for listing the shell
      var: format variable structure with C99 initializers
      var: adjust memory allocation for strings
      attr: expose and rename accessor functions
      var: add attributes files locations
      var: add config file locations
      ident: don't consider '.' a crud
      gitignore: ignore clangd .cache directory