[ANNOUNCE] Git v2.33.1

Junio C Hamano gitster at pobox.com
Wed Oct 13 01:18:53 BST 2021

The latest maintenance release Git v2.33.1 is now available at the
usual places.  There is nothing spectacular; just backporting
accumulated fixes that already are merged for the next feature

The tarballs are found at:


The following public repositories all have a copy of the 'v2.33.1'
tag and the 'maint' 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


Git 2.33.1 Release Notes

This primarily is to backport various fixes accumulated during the
development towards Git 2.34, the next feature release.

Fixes since v2.33

 * The unicode character width table (used for output alignment) has
   been updated.

 * Input validation of "git pack-objects --stdin-packs" has been

 * Bugfix for common ancestor negotiation recently introduced in "git
   push" codepath.

 * "git pull" had various corner cases that were not well thought out
   around its --rebase backend, e.g. "git pull --ff-only" did not stop
   but went ahead and rebased when the history on other side is not a
   descendant of our history.  The series tries to fix them up.

 * "git apply" miscounted the bytes and failed to read to the end of
   binary hunks.

 * "git range-diff" code clean-up.

 * "git commit --fixup" now works with "--edit" again, after it was
   broken in v2.32.

 * Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the
   new version has a blocker bug for that architecture.

 * Checking out all the paths from HEAD during the last conflicted
   step in "git rebase" and continuing would cause the step to be
   skipped (which is expected), but leaves MERGE_MSG file behind in
   $GIT_DIR and confuses the next "git commit", which has been

 * Various bugs in "git rebase -r" have been fixed.

 * mmap() imitation used to call xmalloc() that dies upon malloc()
   failure, which has been corrected to just return an error to the
   caller to be handled.

 * "git diff --relative" segfaulted and/or produced incorrect result
   when there are unmerged paths.

 * The delayed checkout code path in "git checkout" etc. were chatty
   even when --quiet and/or --no-progress options were given.

 * "git branch -D <branch>" used to refuse to remove a broken branch
   ref that points at a missing commit, which has been corrected.

 * Build update for Apple clang.

 * The parser for the "--nl" option of "git column" has been

 * "git upload-pack" which runs on the other side of "git fetch"
   forgot to take the ref namespaces into account when handling
   want-ref requests.

 * The sparse-index support can corrupt the index structure by storing
   a stale and/or uninitialized data, which has been corrected.

 * Buggy tests could damage repositories outside the throw-away test
   area we created.  We now by default export GIT_CEILING_DIRECTORIES
   to limit the damage from such a stray test.

 * Even when running "git send-email" without its own threaded
   discussion support, a threading related header in one message is
   carried over to the subsequent message to result in an unwanted
   threading, which has been corrected.

 * The output from "git fast-export", when its anonymization feature
   is in use, showed an annotated tag incorrectly.

 * Recent "diff -m" changes broke "gitk", which has been corrected.

 * "git maintenance" scheduler fix for macOS.

 * A pathname in an advice message has been made cut-and-paste ready.

 * The "git apply -3" code path learned not to bother the lower level
   merge machinery when the three-way merge can be trivially resolved
   without the content level merge.

 * The code that optionally creates the *.rev reverse index file has
   been optimized to avoid needless computation when it is not writing
   the file out.

 * "git range-diff -I... <range> <range>" segfaulted, which has been

 * The order in which various files that make up a single (conceptual)
   packfile has been reevaluated and straightened up.  This matters in
   correctness, as an incomplete set of files must not be shown to a
   running Git.

 * The "mode" word is useless in a call to open(2) that does not
   create a new file.  Such a call in the files backend of the ref
   subsystem has been cleaned up.

 * "git update-ref --stdin" failed to flush its output as needed,
   which potentially led the conversation to a deadlock.

 * When "git am --abort" fails to abort correctly, it still exited
   with exit status of 0, which has been corrected.

 * Correct nr and alloc members of strvec struct to be of type size_t.

 * "git stash", where the tentative change involves changing a
   directory to a file (or vice versa), was confused, which has been

 * "git clone" from a repository whose HEAD is unborn into a bare
   repository didn't follow the branch name the other side used, which
   is corrected.

 * "git cvsserver" had a long-standing bug in its authentication code,
   which has finally been corrected (it is unclear and is a separate
   question if anybody is seriously using it, though).

 * "git difftool --dir-diff" mishandled symbolic links.

 * Sensitive data in the HTTP trace were supposed to be redacted, but
   we failed to do so in HTTP/2 requests.

 * "make clean" has been updated to remove leftover .depend/
   directories, even when it is not told to use them to compute header

 * Protocol v0 clients can get stuck parsing a malformed feature line.

Also contains various documentation updates and code clean-ups.


Changes since v2.33.0 are as follows:

Alex Henrie (1):
      pull: abort if --ff-only is given and fast-forwarding is impossible

Andrzej Hunt (1):
      connect: also update offset for features without values

Bagas Sanjaya (1):
      Documentation: fix default directory of git bugreport -o

Carlo Marcelo Arenas Belón (12):
      build: update detect-compiler for newer Xcode version
      builtin/merge: avoid -Wformat-extra-args from ancient Xcode
      ci: run a pedantic build as part of the GitHub workflow
      ci: update freebsd 12 cirrus job
      ci: use upload-artifacts v1 for dockerized jobs
      remote: avoid -Wunused-but-set-variable in gcc with -DNDEBUG
      tree-diff: fix leak when not HAVE_ALLOCA_H
      t0000: avoid masking git exit value through pipes
      git-cvsserver: use crypt correctly to compare password hashes
      git-cvsserver: protect against NULL in crypt(3)
      Documentation: cleanup git-cvsserver
      unicode: update the width tables to Unicode 14

David Aguilar (1):
      difftool: fix symlink-file writing in dir-diff mode

Derrick Stolee (1):
      maintenance: skip bootout/bootstrap when plist is registered

Elijah Newren (25):
      t7601: test interaction of merge/rebase/fast-forward flags and options
      t7601: add tests of interactions with multiple merge heads and config
      pull: since --ff-only overrides, handle it first
      pull: make --rebase and --no-rebase override pull.ff=only
      pull: abort by default when fast-forwarding is not possible
      pull: update docs & code for option compatibility with rebasing
      pull: fix handling of multiple heads
      git-rebase.txt: correct antiquated claims about --rebase-merges
      directory-rename-detection.txt: small updates due to merge-ort optimizations
      Documentation: edit awkward references to `git merge-recursive`
      merge-strategies.txt: update wording for the resolve strategy
      merge-strategies.txt: do not imply using copy detection is desired
      merge-strategies.txt: avoid giving special preference to patience algorithm
      merge-strategies.txt: fix simple capitalization error
      git-rebase.txt: correct out-of-date and misleading text about renames
      merge-strategies.txt: add coverage of the `ort` merge strategy
      Update error message and code comment
      t3903: document a pair of directory/file bugs
      stash: avoid feeding directories to update-index
      stash: restore untracked files AFTER restoring tracked files
      git-am.txt: clarify --abort behavior
      t4151: add a few am --abort tests
      am: fix incorrect exit status on am fail to abort
      trace2.h: fix trivial comment typo
      merge-ort: fix completely wrong comment

Felipe Contreras (4):
      completion: bash: fix prefix detection in branch.*
      completion: bash: fix for suboptions with value
      completion: bash: fix for multiple dash commands
      completion: bash: add correct suffix in variables

Jeff Hostetler (1):
      sparse-index: copy dir_hash in ensure_full_index()

Jeff King (13):
      build: clang version may not be followed by extra words
      range-diff: drop useless "offset" variable from read_patches()
      range-diff: handle unterminated lines in read_patches()
      range-diff: use ssize_t for parsed "len" in read_patches()
      apply: keep buffer/size pair in sync when parsing binary hunks
      t5323: drop mentions of "master"
      logmsg_reencode(): warn when iconv() fails
      docs: use "character encoding" to refer to commit-object encoding
      t5562: use alarm() to interrupt timed child-wait
      strvec: use size_t to store nr and alloc
      t1400: avoid SIGPIPE race condition on fifo
      clone: handle unborn branch in bare repos
      http: match headers case-insensitively when redacting

Joel Klinghed (1):
      commit: restore --edit when combined with --fixup

Johannes Schindelin (1):
      maintenance: create `launchctl` configuration using a lock file

Johannes Sixt (1):
      t9001: PATH must not use Windows-style paths

Jonathan Tan (3):
      send-pack: fix push.negotiate with remote helper
      send-pack: fix push nego. when remote has refs
      fetch: die on invalid --negotiation-tip hash

Josh Steadmon (1):
      connect, protocol: log negotiated protocol version

Junio C Hamano (4):
      build: catch clang that identifies itself as "$VENDOR clang"
      apply: resolve trivial merge without hitting ll-merge with "--3way"
      hash-object: prefix_filename() returns allocated memory these days
      Git 2.33.1

Kim Altintop (3):
      t5730: introduce fetch command helper
      upload-pack.c: treat want-ref relative to namespace
      docs: clarify the interaction of transfer.hideRefs and namespaces

Kyle Zhao (1):
      pack-revindex.h: correct the time complexity descriptions

Marvin Häuser (1):
      send-email: avoid incorrect header propagation

Matheus Tavares (1):
      checkout: make delayed checkout respect --quiet and --no-progress

Matthias Aßhauer (1):
      documentation: add documentation for 'git version'

Mickey Endito (1):
      t5582: remove spurious 'cd "$D"' line

Mike Hommey (1):
      credential: fix leak in credential_apply_config()

Patrick Steinhardt (1):
      update-ref: fix streaming of status updates

Philip Oakley (1):
      doc: config, tell readers of `git help --config`

Phillip Wood (7):
      t3403: fix commit authorship
      rebase --apply: restore some tests
      rebase --continue: remove .git/MERGE_MSG
      rebase -r: make 'merge -c' behave like reword
      rebase -i: add another reword test
      rebase -r: don't write .git/MERGE_MSG when fast-forwarding
      rebase -r: fix merge -c with a merge strategy

René Scharfe (10):
      compat: let git_mmap use malloc(3) directly
      xopen: explicitly report creation failures
      use xopen() to handle fatal open(2) failures
      show-branch: simplify rev_is_head()
      archive: convert queue_directory to struct object_id
      branch: allow deleting dangling branches with --force
      range-diff: avoid segfault with -I
      setup: use xopen and xdup in sanitize_stdfds
      refs/files-backend: remove unused open mode parameter
      compression: drop write-only core_compression_* variables

SZEDER Gábor (3):
      Makefile: remove archives before manipulating them with 'ar'
      column: fix parsing of the '--nl' option
      test-lib: set GIT_CEILING_DIRECTORIES to protect the surrounding repository

Sergey Organov (1):
      diff-index: restore -c/--cc options handling

Takashi Iwai (1):
      completion: tcsh: Fix regression by drop of wrapper functions

Tal Kelrich (1):
      fast-export: fix anonymized tag using original length

Taylor Blau (4):
      bulk-checkin.c: store checksum directly
      pack-write.c: rename `.idx` files after `*.rev`
      builtin/repack.c: move `.idx` files into place last
      builtin/index-pack.c: move `.idx` files into place last

Zoker (1):
      doc: fix syntax error and the format of printf

Ævar Arnfjörð Bjarmason (20):
      pack-objects tests: cover blindspots in stdin handling
      pack-objects: fix segfault in --stdin-packs option
      bundle doc: rewrite the "DESCRIPTION" section
      bundle doc: elaborate on object prerequisites
      bundle doc: elaborate on rev<->ref restriction
      bundle doc: replace "basis" with "prerequsite(s)"
      ls-remote: set packet_trace_identity(<name>)
      rebase: emit one "fatal" in "fatal: fatal: <error>"
      protocol-caps.c: fix memory leak in send_info()
      mailmap.c: fix a memory leak in free_mailap_{info,entry}()
      gc: remove trailing dot from "gc.log" line
      send-email: fix a "first config key wins" regression in v2.33.0
      Makefile: remove the check_bindir script
      pack-write: skip *.rev work when not writing *.rev
      pack.h: line-wrap the definition of finish_tmp_packfile()
      pack-write: refactor renaming in finish_tmp_packfile()
      index-pack: refactor renaming in final()
      pack-write: split up finish_tmp_packfile() function
      pack-objects: rename .idx files into place after .bitmap files
      Makefile: clean .depend dirs under COMPUTE_HEADER_DEPENDENCIES != yes

Đoàn Trần Công Danh (3):
      t6300: don't run cat-file on non-existent object
      t6300: check for cat-file exit status code
      diff-lib: ignore paths that are outside $cwd if --relative asked

More information about the git-announce mailing list