| Git v2.47 Release Notes | |
| ======================= | |
| UI, Workflows & Features | |
| ------------------------ | |
| * Many Porcelain commands that internally use the merge machinery | |
| were taught to consistently honor the diff.algorithm configuration. | |
| * A few descriptions in "git show-ref -h" have been clarified. | |
| * A 'P' command to "git add -p" that passes the patch hunk to the | |
| pager has been added. | |
| * "git grep -W" omits blank lines that follow the found function at | |
| the end of the file, just like it omits blank lines before the next | |
| function. | |
| * The value of http.proxy can have "path" at the end for a socks | |
| proxy that listens to a unix-domain socket, but we started to | |
| discard it when we taught proxy auth code path to use the | |
| credential helpers, which has been corrected. | |
| * The code paths to compact multiple reftable files have been updated | |
| to correctly deal with multiple compaction triggering at the same | |
| time. | |
| * Support to specify ref backend for submodules has been enhanced. | |
| * "git svn" has been taught about svn:global-ignores property | |
| recent versions of Subversion has. | |
| * The default object hash and ref backend format used to be settable | |
| only with explicit command line option to "git init" and | |
| environment variables, but now they can be configured in the user's | |
| global and system wide configuration. | |
| * "git send-email" learned "--translate-aliases" option that reads | |
| addresses from the standard input and emits the result of applying | |
| aliases on them to the standard output. | |
| * 'git for-each-ref' learned a new "--format" atom to find the branch | |
| that the history leading to a given commit "%(is-base:<commit>)" is | |
| likely based on. | |
| * The command line prompt support used to be littered with bash-isms, | |
| which has been corrected to work with more shells. | |
| * Support for the RUNTIME_PREFIX feature has been added to z/OS port. | |
| * "git send-email" learned "--mailmap" option to allow rewriting the | |
| recipient addresses. | |
| * "git mergetool" learned to use VSCode as a merge backend. | |
| * "git pack-redundant" has been marked for removal in Git 3.0. | |
| * One-line messages to "die" and other helper functions will get LF | |
| added by these helper functions, but many existing messages had an | |
| unnecessary LF at the end, which have been corrected. | |
| * The "scalar clone" command learned the "--no-tags" option. | |
| * The environment GIT_ADVICE has been intentionally kept undocumented | |
| to discourage its use by interactive users. Add documentation to | |
| help tool writers. | |
| * "git apply --3way" learned to take "--ours" and other options. | |
| Performance, Internal Implementation, Development Support etc. | |
| -------------------------------------------------------------- | |
| * A build tweak knob has been simplified by not setting the value | |
| that is already the default; another unused one has been removed. | |
| * A CI job that use clang-format to check coding style issues in new | |
| code has been added. | |
| * The reviewing guidelines document now explicitly encourages people | |
| to give positive reviews and how. | |
| * Test script linter has been updated to catch an attempt to use | |
| one-shot export construct "VAR=VAL func" for shell functions (which | |
| does not work for some shells) better. | |
| * Some project conventions have been added to CodingGuidelines. | |
| * In the refs subsystem, implicit reliance of the_repository has been | |
| eliminated; the repository associated with the ref store object is | |
| used instead. | |
| * Various tests in reftable library have been rewritten using the unit test | |
| framework. | |
| * A test that fails on an unusually slow machine was found, and made | |
| less likely to cause trouble by lengthening the expiry value it | |
| uses. | |
| * An existing test of hashmap API has been rewritten with the | |
| unit-test framework. | |
| * A policy document that describes platform support levels and | |
| expectation on platform stakeholders has been introduced. | |
| * The refs API has been taught to give symref target information to | |
| the users of ref iterators, allowing for-each-ref and friends to | |
| avoid an extra ref_resolve_* API call per a symbolic ref. | |
| * Unit-test framework has learned a simple control structure to allow | |
| embedding test statements in-line instead of having to create a new | |
| function to contain them. | |
| * Incremental updates of multi-pack index files is getting worked on. | |
| * Use of API functions that implicitly depend on the_repository | |
| object in the config subsystem has been rewritten to pass a | |
| repository object through the callchain. | |
| * Unused parameters have been either marked as UNUSED to squelch | |
| -Wunused warnings or dropped from many functions.. | |
| * The code in the reftable library has been cleaned up by discarding | |
| unused "generic" interface. | |
| * The underlying machinery for "git diff-index" has long been made to | |
| expand the sparse index as needed, but the command fully expanded | |
| the sparse index upfront, which now has been taught not to do. | |
| * More trace2 events at key points on push and fetch code paths have | |
| been added. | |
| * Make our codebase compilable with the -Werror=unused-parameter | |
| option. | |
| * "git cat-file" works well with the sparse-index, and gets marked as | |
| such. | |
| * CI started failing completely for linux32 jobs, as the step to | |
| upload failed test directory uses GitHub actions that is deprecated | |
| and is now disabled. | |
| * Import clar unit tests framework libgit2 folks invented for our | |
| use. | |
| * The error messages from the test script checker have been improved. | |
| * The convention to calling into built-in command implementation has | |
| been updated to pass the repository, if known, together with the | |
| prefix value. | |
| * "git apply" had custom buffer management code that predated before | |
| use of strbuf got widespread, which has been updated to use strbuf, | |
| which also plugged some memory leaks. | |
| * The reftable backend learned to more efficiently handle exclude | |
| patterns while enumerating the refs. | |
| * CI updates. FreeBSD image has been updated to 13.4. | |
| (merge 2eeb29702e cb/ci-freebsd-13-4 later to maint). | |
| * Give timeout to the locking code to write to reftable, instead of | |
| failing on the first failure without retrying. | |
| * The checksum at the tail of files are now computed without | |
| collision detection protection. This is safe as the consumer of | |
| the information to protect itself from replay attacks checks for | |
| hash collisions independently. | |
| Fixes since v2.46 | |
| ----------------- | |
| * "git add -p" by users with diff.suppressBlankEmpty set to true | |
| failed to parse the patch that represents an unmodified empty line | |
| with an empty line (not a line with a single space on it), which | |
| has been corrected. | |
| * "git checkout --ours" (no other arguments) complained that the | |
| option is incompatible with branch switching, which is technically | |
| correct, but found confusing by some users. It now says that the | |
| user needs to give pathspec to specify what paths to checkout. | |
| * It has been documented that we avoid "VAR=VAL shell_func" and why. | |
| * "git rebase --help" referred to "offset" (the difference between | |
| the location a change was taken from and the change gets replaced) | |
| incorrectly and called it "fuzz", which has been corrected. | |
| * "git notes add -m '' --allow-empty" and friends that take prepared | |
| data to create notes should not invoke an editor, but it started | |
| doing so since Git 2.42, which has been corrected. | |
| * An expensive operation to prepare tracing was done in re-encoding | |
| code path even when the tracing was not requested, which has been | |
| corrected. | |
| * More leakfixes. | |
| * The credential helper to talk to OSX keychain sometimes sent | |
| garbage bytes after the username, which has been corrected. | |
| * A recent update broke "git ls-remote" used outside a repository, | |
| which has been corrected. | |
| * The patch parser in 'git apply' has been a bit more lenient against | |
| unexpected mode bits, like 100664, recorded on extended header lines. | |
| * "git config --value=foo --fixed-value section.key newvalue" barfed | |
| when the existing value in the configuration file used the | |
| valueless true syntax, which has been corrected. | |
| * The patch parser in "git patch-id" has been tightened to avoid | |
| getting confused by lines that look like a patch header in the log | |
| message. | |
| * "git reflog expire" failed to honor annotated tags when computing | |
| reachable commits. | |
| * A flakey test and incorrect calls to strtoX() functions have been | |
| fixed. | |
| * Follow-up on 2.45.1 regression fix. | |
| * "git rev-list ... | git diff-tree -p --remerge-diff --stdin" should | |
| behave more or less like "git log -p --remerge-diff" but instead it | |
| crashed, forgetting to prepare a temporary object store needed. | |
| * "git bundle unbundle" outside a repository triggered a BUG() | |
| unnecessarily, which has been corrected. | |
| * Maintenance tasks other than "gc" now properly go background when | |
| "git maintenance" runs them. | |
| * We created a useless pseudo-merge reachability bitmap that is about | |
| 0 commits, and attempted to include commits that are not in packs, | |
| which made no sense. These bugs have been corrected. | |
| (merge a72dfab8b8 tb/pseudo-merge-bitmap-fixes later to maint). | |
| * "git rebase -x --quiet" was not quiet, which was corrected. | |
| * The code path for compacting reftable files saw some bugfixes | |
| against concurrent operation. | |
| * The code forgot to discard unnecessary in-core commit buffer data | |
| for commits that "git log --skip=<number>" traversed but omitted | |
| from the output, which has been corrected. | |
| * "git verify-pack" and "git index-pack" started dying outside a | |
| repository, which has been corrected. | |
| * A data corruption bug when multi-pack-index is used and the same | |
| objects are stored in multiple packfiles has been corrected. | |
| * "git pack-refs --auto" for the files backend was too aggressive, | |
| which has been a bit tamed. | |
| (merge c3459ae9ef ps/pack-refs-auto-heuristics later to maint). | |
| * A file descriptor left open is now properly closed when "git | |
| sparse-checkout" updates the sparse patterns. | |
| * In a few corner cases "git diff --exit-code" failed to report | |
| "changes" (e.g., renamed without any content change), which has | |
| been corrected. | |
| * Cygwin does have /dev/tty support that is needed by things like | |
| single-key input mode. | |
| * The interpret-trailers command failed to recognise the end of the | |
| message when the commit log ends in an incomplete line. | |
| * "git rebase --autostash" failed to resurrect the autostashed | |
| changes when the command gets aborted after giving back control | |
| asking for hlep in conflict resolution. | |
| (merge bf6ab087d1 pw/rebase-autostash-fix later to maint). | |
| * The "imap-send" now allows to be compiled with NO_OPENSSL and | |
| OPENSSL_SHA1 defined together. | |
| (merge 997950a750 jk/no-openssl-with-openssl-sha1 later to maint). | |
| * The support to customize build options to adjust for older versions | |
| and/or older systems for the interop tests has been improved. | |
| (merge 22ef5f02a8 jk/interop-test-build-options later to maint). | |
| * Update the character width table for Unicode 16. | |
| (merge 44dc651132 bb/unicode-width-table-16 later to maint). | |
| * In Git 2.39, Git.pm stopped working in a bare repository, which has | |
| been corrected. | |
| (merge d3edb0bdde jk/git-pm-bare-repo-fix later to maint). | |
| * When a remote-helper dies before Git writes to it, SIGPIPE killed | |
| Git silently. We now explain the situation a bit better to the end | |
| user in our error message. | |
| (merge 6e7fac9bca jk/diag-unexpected-remote-helper-death later to maint). | |
| * A few usability fixes to "git jump" (in contrib/). | |
| (merge 083b82544d jk/jump-quickfix-fixes later to maint). | |
| * "git diff --exit-code" ignored modified binary files, which has | |
| been corrected. | |
| (merge 9a41735af6 rs/diff-exit-code-binary later to maint). | |
| * When a subprocess to work in a submodule spawned by "git submodule" | |
| fails with SIGPIPE, the parent Git process caught the death of it, | |
| but gave a generic "failed to work in that submodule", which was | |
| misleading. We now behave as if the parent got SIGPIPE and die. | |
| (merge 082caf527e pw/submodule-process-sigpipe later to maint). | |
| * "git archive" with pathspec magic that uses the attribute | |
| information did not work well, which has been corrected. | |
| (merge 296743a7ca rs/archive-with-attr-pathspec-fix later to maint). | |
| * Background tasks "git maintenance" runs may need to use credential | |
| information when going over the network, but a credential helper | |
| may work only in an interactive environment, and end up blocking a | |
| scheduled task waiting for UI. Credential helpers can now behave | |
| differently when they are not running interactively. | |
| (merge b9183b0a02 ds/background-maintenance-with-credential later to maint). | |
| * "git --git-dir=nowhere cmd" failed to properly notice that it | |
| wasn't in any repository while processing includeIf.onbranch | |
| configuration and instead crashed. | |
| * When "git sparse-checkout disable" turns a sparse checkout into a | |
| regular checkout, the index is fully expanded. This totally | |
| expected behaviour however had an "oops, we are expanding the | |
| index" advice message, which has been corrected. | |
| (merge 537e516a39 ds/sparse-checkout-expansion-advice later to maint). | |
| * macOS with fsmonitor daemon can hang forever when a submodule is | |
| involved, which has been corrected. | |
| * Other code cleanup, docfix, build fix, etc. | |
| (merge be10ac7037 jc/mailinfo-header-cleanup later to maint). | |
| (merge 4460e052e0 jc/range-diff-lazy-setup later to maint). | |
| (merge 0627c58e7a ak/typofixes later to maint). | |
| (merge 83799f1500 jk/t9001-deflake later to maint). | |
| (merge e02cc08a88 ak/typofix-2.46-maint later to maint). | |
| (merge 5c5d29e1c4 ps/ci-gitlab-upgrade later to maint). | |
| (merge 9c4c840901 jc/doc-discarding-stalled-topics later to maint). | |
| (merge 5e6f359f6b ds/read-cache-mempool-leakfix later to maint). |