1 Git v2.46 Release Notes
2 =======================
4 Backward Compatibility Notes
8 UI, Workflows & Features
10 * The "--rfc" option of "git format-patch" learned to take an
11 optional string value to be used in place of "RFC" to tweak the
12 "[PATCH]" on the subject header.
14 * The credential helper protocol, together with the HTTP layer, have
15 been enhanced to support authentication schemes different from
16 username & password pair, like Bearer and NTLM.
18 * Command line completion script (in contrib/) learned to complete
19 "git symbolic-ref" a bit better (you need to enable plumbing
20 commands to be completed with GIT_COMPLETION_SHOW_ALL_COMMANDS).
22 * When the user responds to a prompt given by "git add -p" with an
23 unsupported command, list of available commands were given, which
24 was too much if the user knew what they wanted to type but merely
25 made a typo. Now the user gets a much shorter error message.
27 * The color parsing code learned to handle 12-bit RGB colors, spelled
28 as "#RGB" (in addition to "#RRGGBB" that is already supported).
30 * The operation mode options (like "--get") the "git config" command
31 uses have been deprecated and replaced with subcommands (like "git
34 * "git tag" learned the "--trailer" option to futz with the trailers
35 in the same way as "git commit" does.
37 * A new global "--no-advice" option can be used to disable all advice
38 messages, which is meant to be used only in scripts.
40 * Updates to symbolic refs can now be made as a part of ref
43 * The trailer API has been reshuffled a bit.
45 * Terminology to call various ref-like things are getting
48 * The command line completion script (in contrib/) has been adjusted
49 to the recent update to "git config" that adopted subcommand based
52 * The knobs to tweak how reftable files are written have been made
53 available as configuration variables.
55 * When "git push" notices that the commit at the tip of the ref on
56 the other side it is about to overwrite does not exist locally, it
57 used to first try fetching it if the local repository is a partial
58 clone. The command has been taught not to do so and immediately
61 * The promisor.quiet configuration knob can be set to true to make
62 lazy fetching from promisor remotes silent.
64 * The inter/range-diff output has been moved to the end of the patch
65 when format-patch adds it to a single patch, instead of writing it
66 before the patch text, to be consistent with what is done for a
67 cover letter for a multi-patch series.
69 * A new command has been added to migrate a repository that uses the
70 files backend for its ref storage to use the reftable backend, with
73 * "git diff --exit-code --ext-diff" learned to take the exit status
74 of the external diff driver into account when deciding the exit
75 status of the overall "git diff" invocation when configured to do
78 * "git update-ref --stdin" learned to handle transactional updates of
81 * "git format-patch --interdiff" for multi-patch series learned to
82 turn on cover letters automatically (unless told never to enable
83 cover letter with "--no-cover-letter" and such).
85 * The "--heads" option of "ls-remote" and "show-ref" has been been
86 deprecated; "--branches" replaces "--heads".
88 * For over a year, setting add.interactive.useBuiltin configuration
89 variable did nothing but giving a "this does not do anything"
90 warning. The warning has been removed.
93 Performance, Internal Implementation, Development Support etc.
95 * Advertise "git contacts", a tool for newcomers to find people to
96 ask review for their patches, a bit more in our developer
99 * In addition to building the objects needed, try to link the objects
100 that are used in fuzzer tests, to make sure at least they build
101 without bitrot, in Linux CI runs.
103 * Code to write out reftable has seen some optimization and
106 * Tests to ensure interoperability between reftable written by jgit
107 and our code have been added and enabled in CI.
109 * The singleton index_state instance "the_index" has been eliminated
110 by always instantiating "the_repository" and replacing references
111 to "the_index" with references to its .index member.
113 * Git-GUI has a new maintainer, Johannes Sixt.
115 * The "test-tool" has been taught to run testsuite tests in parallel,
116 bypassing the need to use the "prove" tool.
118 * The "whitespace check" task that was enabled for GitHub Actions CI
119 has been ported to GitLab CI.
121 * The refs API lost functions that implicitly assumes to work on the
122 primary ref_store by forcing the callers to pass a ref_store as an
125 * Code clean-up to reduce inter-function communication inside
126 builtin/config.c done via the use of global variables.
128 * The pack bitmap code saw some clean-up to prepare for a follow-up topic.
130 * Preliminary code clean-up for "git send-email".
132 * The default "creation-factor" used by "git format-patch" has been
133 raised to make it more aggressively find matching commits.
135 * Before discovering the repository details, We used to assume SHA-1
136 as the "default" hash function, which has been corrected. Hopefully
137 this will smoke out codepaths that rely on such an unwarranted
140 * The project decision making policy has been documented.
142 * The strcmp-offset tests have been rewritten using the unit test
145 * "git add -p" learned to complain when an answer with more than one
146 letter is given to a prompt that expects a single letter answer.
148 * The alias-expanded command lines are logged to the trace output.
150 * A new test was added to ensure git commands that are designed to
151 run outside repositories do work.
153 * Basic unit tests for reftable have been reimplemented under the
156 * A pair of test helpers that essentially are unit tests on hash
157 algorithms have been rewritten using the unit-tests framework.
159 * A test helper that essentially is unit tests on the "decorate"
160 logic has been rewritten using the unit-tests framework.
162 * Many memory leaks in the sparse-checkout code paths have been
165 * "make check-docs" noticed problems and reported to its output but
166 failed to signal its findings with its exit status, which has been
169 * Building with "-Werror -Wwrite-strings" is now supported.
171 * To help developers, the build procedure now allows builders to use
172 CFLAGS_APPEND to specify additional CFLAGS.
174 * "oidtree" tests were rewritten to use the unit test framework.
176 * The structure of the document that records longer-term project
177 decisions to deprecate/remove/update various behaviour has been
180 * The pseudo-merge reachability bitmap to help more efficient storage
181 of the reachability bitmap in a repository with too many refs has
188 * "git rebase --signoff" used to forget that it needs to add a
189 sign-off to the resulting commit when told to continue after a
190 conflict stops its operation.
191 (merge a6c2654f83 pw/rebase-m-signoff-fix later to maint).
193 * The procedure to build multi-pack-index got confused by the
194 replace-refs mechanism, which has been corrected by disabling the
196 (merge 93e2ae1c95 xx/disable-replace-when-building-midx later to maint).
198 * The "-k" and "--rfc" options of "format-patch" will now error out
199 when used together, as one tells us not to add anything to the
200 title of the commit, and the other one tells us to add "RFC" in
202 (merge cadcf58085 ds/format-patch-rfc-and-k later to maint).
204 * "git stash -S" did not handle binary files correctly, which has
206 (merge 5fb7686409 aj/stash-staged-fix later to maint).
208 * A scheduled "git maintenance" job is expected to work on all
209 repositories it knows about, but it stopped at the first one that
210 errored out. Now it keeps going.
211 (merge c75662bfc9 js/for-each-repo-keep-going later to maint).
213 * zsh can pretend to be a normal shell pretty well except for some
214 glitches that we tickle in some of our scripts. Work them around
215 so that "vimdiff" and our test suite works well enough with it.
216 (merge fedd5c79ff bc/zsh-compatibility later to maint).
218 * Command line completion support for zsh (in contrib/) has been
219 updated to stop exposing internal state to end-user shell
221 (merge 3c20acdf46 dk/zsh-git-repo-path-fix later to maint).
223 * Tests that try to corrupt in-repository files in chunked format did
224 not work well on macOS due to its broken "mv", which has been
227 * The maximum size of attribute files is enforced more consistently.
228 (merge c793f9cb08 tb/attr-limits later to maint).
230 * Unbreak CI jobs so that we do not attempt to use Python 2 that has
231 been removed from the platform.
233 * Git 2.43 started using the tree of HEAD as the source of attributes
234 in a bare repository, which has severe performance implications.
235 For now, revert the change, without ripping out a more explicit
236 support for the attr.tree configuration variable.
238 * The "--exit-code" option of "git diff" command learned to work with
239 the "--ext-diff" option.
240 (merge 11be65cfa4 rs/external-diff-with-exit-code later to maint).
242 * Windows CI running in GitHub Actions started complaining about the
243 order of arguments given to calloc(); the imported regex code uses
244 the wrong order almost consistently, which has been corrected.
246 * Expose "name conflict" error when a ref creation fails due to D/F
247 conflict in the ref namespace, to improve an error message given by
249 (merge 9339fca23e it/refs-name-conflict later to maint).
251 * The SubmittingPatches document now refers folks to manpages
254 * The documentation for "git diff --name-only" has been clarified
255 that it is about showing the names in the post-image tree.
256 (merge 4986662cbc jc/doc-diff-name-only later to maint).
258 * The credential helper that talks with osx keychain learned to avoid
259 storing back the authentication material it just got received from
261 (merge e1ab45b2da kn/osxkeychain-skip-idempotent-store later to maint).
263 * The chainlint script (invoked during "make test") did nothing when
264 it failed to detect the number of available CPUs. It now falls
265 back to 1 CPU to avoid the problem.
266 (merge 2e7e9205be es/chainlint-ncores-fix later to maint).
268 * Revert overly aggressive "layered defence" that went into 2.45.1
269 and friends, which broke "git-lfs", "git-annex", and other use
270 cases, so that we can rebuild necessary counterparts in the open.
272 * "git init" in an already created directory, when the user
273 configuration has includeif.onbranch, started to fail recently,
274 which has been corrected.
275 (merge 407997c1dd ps/fix-reinit-includeif-onbranch later to maint).
277 * Memory leaks in "git mv" has been plugged.
279 * The safe.directory configuration knob has been updated to
280 optionally allow leading path matches.
281 (merge 313eec177a jc/safe-directory-leading-path later to maint).
283 * An overly large ".gitignore" files are now rejected silently.
284 (merge e7c3d1ddba jk/cap-exclude-file-size later to maint).
286 * Upon expiration event, the credential subsystem forgot to clear
287 in-core authentication material other than password (whose support
288 was added recently), which has been corrected.
290 * Fix for an embarrassing typo that prevented Python2 tests from running
292 (merge df651330ab ps/ci-fix-detection-of-ubuntu-20 later to maint).
294 * Varargs functions that are unannotated as printf-like or execl-like
295 have been annotated as such.
296 (merge 99c7de732e jc/varargs-attributes later to maint).
298 * "git am" has a safety feature to prevent it from starting a new
299 session when there already is a session going. It reliably
300 triggers when a mbox is given on the command line, but it has to
301 rely on the tty-ness of the standard input. Add an explicit way to
302 opt out of this safety with a command line option.
303 (merge 62c71ace44 jk/am-retry later to maint).
305 * A leak in "git imap-send" that somehow escapes LSan has been
308 * Setting core.abbrev too early before the repository set-up
309 (typically in "git clone") caused segfault, which as been
312 * When the user adds to "git rebase -i" instruction to "pick" a merge
313 commit, the error experience is not pleasant. Such an error is now
314 caught earlier in the process that parses the todo list.
315 (merge 4c063c82e9 pw/rebase-i-error-message later to maint).
317 * We forgot to normalize the result of getcwd() to NFC on macOS where
318 all other paths are normalized, which has been corrected. This still
319 does not address the case where core.precomposeUnicode configuration
320 is not defined globally.
321 (merge 71fa8d2212 tb/precompose-getcwd later to maint).
323 * Earlier we stopped using the tree of HEAD as the default source of
324 attributes in a bare repository, but failed to document it. This
326 (merge 5c71d6b63a jc/no-default-attr-tree-in-bare later to maint).
328 * "git update-server-info" and "git commit-graph --write" have been
329 updated to use the tempfile API to avoid leaving cruft after
332 * Other code cleanup, docfix, build fix, etc.
333 (merge a5a4cb7b27 rs/diff-parseopts-cleanup later to maint).
334 (merge 55702c543e fa/p4-error later to maint).
335 (merge 2566a77774 vd/doc-merge-tree-x-option later to maint).
336 (merge b64b0df9da ds/scalar-reconfigure-all-fix later to maint).
337 (merge c81ffcff83 dm/update-index-doc-fix later to maint).
338 (merge fc0202b0e9 dg/fetch-pack-code-cleanup later to maint).
339 (merge 7150f140f9 mt/t0211-typofix later to maint).
340 (merge d424488901 jc/rev-parse-fatal-doc later to maint).
341 (merge 36d900d2b0 rs/difftool-env-simplify later to maint).
342 (merge e83055ecb0 ds/doc-add-interactive-singlekey later to maint).
343 (merge f1160393c1 ds/ahead-behind-fix later to maint).
344 (merge bf6a86236e jc/worktree-git-path later to maint).