Git 2.32 Release Notes ====================== Backward compatibility notes ---------------------------- * ".gitattributes", ".gitignore", and ".mailmap" files that are symbolic links are ignored. Updates since v2.31 ------------------- UI, Workflows & Features * It does not make sense to make ".gitattributes", ".gitignore" and ".mailmap" symlinks, as they are supposed to be usable from the object store (think: bare repositories where HEAD:.mailmap etc. are used). When these files are symbolic links, we used to read the contents of the files pointed by them by mistake, which has been corrected. * "git stash show" learned to optionally show untracked part of the stash. * "git log --format='...'" learned "%(describe)" placeholder. * "git repack" so far has been only capable of repacking everything under the sun into a single pack (or split by size). A cleverer strategy to reduce the cost of repacking a repository has been introduced. * The http codepath learned to let the credential layer to cache the password used to unlock a certificate that has successfully been used. * "git commit --fixup=", which was to tweak the changes made to the contents while keeping the original log message intact, learned "--fixup=(amend|reword):", that can be used to tweak both the message and the contents, and only the message, respectively. * When accessing a server with a URL like https://user:pass@site/, we did not to fall back to the basic authentication with the credential material embedded in the URL after the "Negotiate" authentication failed. Now we do. * "git send-email" learned to honor the core.hooksPath configuration. Performance, Internal Implementation, Development Support etc. * Rename detection rework continues. * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with prerequisites to catch broken tests that depend on the side effects of optional pieces, but did not work at all when negative prerequisites were involved. (merge 27d578d904 jk/fail-prereq-testfix later to maint). * "git diff-index" codepath has been taught to trust fsmonitor status to reduce number of lstat() calls. (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint). * Reorganize Makefile to allow building git.o and other essential objects without extra stuff needed only for testing. Fixes since v2.31 ----------------- * The fsmonitor interface read from its input without making sure there is something to read from. This bug is new in 2.31 timeframe. * The data structure used by fsmonitor interface was not properly duplicated during an in-core merge, leading to use-after-free etc. * "git bisect" reimplemented more in C during 2.30 timeframe did not take an annotated tag as a good/bad endpoint well. This regression has been corrected. * Fix macros that can silently inject unintended null-statements. * CALLOC_ARRAY() macro replaces many uses of xcalloc(). * Update insn in Makefile comments to run fuzz-all target. * Fix a corner case bug in "git mv" on case insensitive systems, which was introduced in 2.29 timeframe. * We had a code to diagnose and die cleanly when a required clean/smudge filter is missing, but an assert before that unnecessarily fired, hiding the end-user facing die() message. (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint). * Update C code that sets a few configuration variables when a remote is configured so that it spells configuration variable names in the canonical camelCase. (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint). * A new configuration variable has been introduced to allow choosing which version of the generation number gets used in the commit-graph file. (merge 702110aac6 ds/commit-graph-generation-config later to maint). * Perf test update to work better in secondary worktrees. (merge 36e834abc1 jk/perf-in-worktrees later to maint). * Updates to memory allocation code around the use of pcre2 library. (merge c1760352e0 ab/grep-pcre2-allocfix later to maint). * "git -c core.bare=false clone --bare ..." would have segfaulted, which has been corrected. (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint). * When "git checkout" removes a path that does not exist in the commit it is checking out, it wasn't careful enough not to follow symbolic links, which has been corrected. (merge fab78a0c3d mt/checkout-remove-nofollow later to maint). * Other code cleanup, docfix, build fix, etc. (merge f451960708 dl/cat-file-doc-cleanup later to maint). (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint). (merge ea7e63921c jr/doc-ignore-typofix later to maint). (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint). (merge 42efa1231a jk/filter-branch-sha256 later to maint). (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint). (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint). (merge 47957485b3 ab/read-tree later to maint). (merge 2be927f3d1 ab/diff-no-index-tests later to maint). (merge 76593c09bb ab/detox-gettext-tests later to maint). (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).