Raw
1 Git v2.46 Release Notes
2 =======================
3
4 UI, Workflows & Features
5
6 * The "--rfc" option of "git format-patch" learned to take an
7 optional string value to be used in place of "RFC" to tweak the
8 "[PATCH]" on the subject header.
9
10 * The credential helper protocol, together with the HTTP layer, have
11 been enhanced to support authentication schemes different from
12 username & password pair, like Bearer and NTLM.
13
14 * Command line completion script (in contrib/) learned to complete
15 "git symbolic-ref" a bit better (you need to enable plumbing
16 commands to be completed with GIT_COMPLETION_SHOW_ALL_COMMANDS).
17
18 * When the user responds to a prompt given by "git add -p" with an
19 unsupported command, list of available commands were given, which
20 was too much if the user knew what they wanted to type but merely
21 made a typo. Now the user gets a much shorter error message.
22
23 * The color parsing code learned to handle 12-bit RGB colors, spelled
24 as "#RGB" (in addition to "#RRGGBB" that is already supported).
25
26 * The operation mode options (like "--get") the "git config" command
27 uses have been deprecated and replaced with subcommands (like "git
28 config get").
29
30 * "git tag" learned the "--trailer" option to futz with the trailers
31 in the same way as "git commit" does.
32
33 * A new global "--no-advice" option can be used to disable all advice
34 messages, which is meant to be used only in scripts.
35
36 * Updates to symbolic refs can now be made as a part of ref
37 transaction.
38
39 * The trailer API has been reshuffled a bit.
40
41 * Terminology to call various ref-like things are getting
42 straightened out.
43
44 * The command line completion script (in contrib/) has been adjusted
45 to the recent update to "git config" that adopted subcommand based
46 UI.
47
48 * The knobs to tweak how reftable files are written have been made
49 available as configuration variables.
50
51 * When "git push" notices that the commit at the tip of the ref on
52 the other side it is about to overwrite does not exist locally, it
53 used to first try fetching it if the local repository is a partial
54 clone. The command has been taught not to do so and immediately
55 fail instead.
56
57 * The promisor.quiet configuration knob can be set to true to make
58 lazy fetching from promisor remotes silent.
59
60 * The inter/range-diff output has been moved to the end of the patch
61 when format-patch adds it to a single patch, instead of writing it
62 before the patch text, to be consistent with what is done for a
63 cover letter for a multi-patch series.
64
65 * A new command has been added to migrate a repository that uses the
66 files backend for its ref storage to use the reftable backend, with
67 limitations.
68
69 * "git diff --exit-code --ext-diff" learned to take the exit status
70 of the external diff driver into account when deciding the exit
71 status of the overall "git diff" invocation when configured to do
72 so.
73
74 * "git update-ref --stdin" learned to handle transactional updates of
75 symbolic-refs.
76
77 * "git format-patch --interdiff" for multi-patch series learned to
78 turn on cover letters automatically (unless told never to enable
79 cover letter with "--no-cover-letter" and such).
80
81 * The "--heads" option of "ls-remote" and "show-ref" has been
82 deprecated; "--branches" replaces "--heads".
83
84 * For over a year, setting add.interactive.useBuiltin configuration
85 variable did nothing but giving a "this does not do anything"
86 warning. The warning has been removed.
87
88 * The http transport can now be told to send request with
89 authentication material without first getting a 401 response.
90
91 * A handful of entries are added to the GitFAQ document.
92
93 * "git var GIT_SHELL_PATH" should report the path to the shell used
94 to spawn external commands, but it didn't do so on Windows, which
95 has been corrected.
96
97
98 Performance, Internal Implementation, Development Support etc.
99
100 * Advertise "git contacts", a tool for newcomers to find people to
101 ask review for their patches, a bit more in our developer
102 documentation.
103
104 * In addition to building the objects needed, try to link the objects
105 that are used in fuzzer tests, to make sure at least they build
106 without bitrot, in Linux CI runs.
107
108 * Code to write out reftable has seen some optimization and
109 simplification.
110
111 * Tests to ensure interoperability between reftable written by jgit
112 and our code have been added and enabled in CI.
113
114 * The singleton index_state instance "the_index" has been eliminated
115 by always instantiating "the_repository" and replacing references
116 to "the_index" with references to its .index member.
117
118 * Git-GUI has a new maintainer, Johannes Sixt.
119
120 * The "test-tool" has been taught to run testsuite tests in parallel,
121 bypassing the need to use the "prove" tool.
122
123 * The "whitespace check" task that was enabled for GitHub Actions CI
124 has been ported to GitLab CI.
125
126 * The refs API lost functions that implicitly assumes to work on the
127 primary ref_store by forcing the callers to pass a ref_store as an
128 argument.
129
130 * Code clean-up to reduce inter-function communication inside
131 builtin/config.c done via the use of global variables.
132
133 * The pack bitmap code saw some clean-up to prepare for a follow-up topic.
134
135 * Preliminary code clean-up for "git send-email".
136
137 * The default "creation-factor" used by "git format-patch" has been
138 raised to make it more aggressively find matching commits.
139
140 * Before discovering the repository details, We used to assume SHA-1
141 as the "default" hash function, which has been corrected. Hopefully
142 this will smoke out codepaths that rely on such an unwarranted
143 assumptions.
144
145 * The project decision making policy has been documented.
146
147 * The strcmp-offset tests have been rewritten using the unit test
148 framework.
149
150 * "git add -p" learned to complain when an answer with more than one
151 letter is given to a prompt that expects a single letter answer.
152
153 * The alias-expanded command lines are logged to the trace output.
154
155 * A new test was added to ensure git commands that are designed to
156 run outside repositories do work.
157
158 * A few tests in reftable library have been rewritten using the
159 unit test framework.
160
161 * A pair of test helpers that essentially are unit tests on hash
162 algorithms have been rewritten using the unit-tests framework.
163
164 * A test helper that essentially is unit tests on the "decorate"
165 logic has been rewritten using the unit-tests framework.
166
167 * Many memory leaks in the sparse-checkout code paths have been
168 plugged.
169
170 * "make check-docs" noticed problems and reported to its output but
171 failed to signal its findings with its exit status, which has been
172 corrected.
173
174 * Building with "-Werror -Wwrite-strings" is now supported.
175
176 * To help developers, the build procedure now allows builders to use
177 CFLAGS_APPEND to specify additional CFLAGS.
178
179 * "oidtree" tests were rewritten to use the unit test framework.
180
181 * The structure of the document that records longer-term project
182 decisions to deprecate/remove/update various behaviour has been
183 outlined.
184
185 * The pseudo-merge reachability bitmap to help more efficient storage
186 of the reachability bitmap in a repository with too many refs has
187 been added.
188
189 * When "git merge" sees that the index cannot be refreshed (e.g. due
190 to another process doing the same in the background), it died but
191 after writing MERGE_HEAD etc. files, which was useless for the
192 purpose to recover from the failure.
193
194 * The output from "git cat-file --batch-check" and "--batch-command
195 (info)" should not be unbuffered, for which some tests have been
196 added.
197
198 * A CPP macro USE_THE_REPOSITORY_VARIABLE is introduced to help
199 transition the codebase to rely less on the availability of the
200 singleton the_repository instance.
201
202 * "git version --build-options" reports the version information of
203 OpenSSL and other libraries (if used) in the build.
204
205 * Memory ownership rules for the in-core representation of
206 remote.*.url configuration values have been straightened out, which
207 resulted in a few leak fixes and code clarification.
208
209 * When bundleURI interface fetches multiple bundles, Git failed to
210 take full advantage of all bundles and ended up slurping duplicated
211 objects, which has been corrected.
212
213 * The code to deal with modified paths that are out-of-cone in a
214 sparsely checked out working tree has been optimized.
215
216 * An existing test of oidmap API has been rewritten with the
217 unit-test framework.
218
219 * The "ort" merge backend saw one bugfix for a crash that happens
220 when inner merge gets killed, and assorted code clean-ups.
221
222 * A new warning message is issued when a command has to expand a
223 sparse index to handle working tree cruft that are outside of the
224 sparse checkout.
225
226 * The test framework learned to take the test body not as a single
227 string but as a here-document.
228
229 * "git push '' HEAD:there" used to hit a BUG(); it has been corrected
230 to die with "fatal: bad repository ''".
231
232 * What happens when http.cookieFile gets the special value "" has
233 been clarified in the documentation.
234
235
236 Fixes since v2.45
237 -----------------
238
239 * "git rebase --signoff" used to forget that it needs to add a
240 sign-off to the resulting commit when told to continue after a
241 conflict stops its operation.
242
243 * The procedure to build multi-pack-index got confused by the
244 replace-refs mechanism, which has been corrected by disabling the
245 latter.
246
247 * The "-k" and "--rfc" options of "format-patch" will now error out
248 when used together, as one tells us not to add anything to the
249 title of the commit, and the other one tells us to add "RFC" in
250 addition to "PATCH".
251
252 * "git stash -S" did not handle binary files correctly, which has
253 been corrected.
254
255 * A scheduled "git maintenance" job is expected to work on all
256 repositories it knows about, but it stopped at the first one that
257 errored out. Now it keeps going.
258
259 * zsh can pretend to be a normal shell pretty well except for some
260 glitches that we tickle in some of our scripts. Work them around
261 so that "vimdiff" and our test suite works well enough with it.
262
263 * Command line completion support for zsh (in contrib/) has been
264 updated to stop exposing internal state to end-user shell
265 interaction.
266
267 * Tests that try to corrupt in-repository files in chunked format did
268 not work well on macOS due to its broken "mv", which has been
269 worked around.
270
271 * The maximum size of attribute files is enforced more consistently.
272
273 * Unbreak CI jobs so that we do not attempt to use Python 2 that has
274 been removed from the platform.
275
276 * Git 2.43 started using the tree of HEAD as the source of attributes
277 in a bare repository, which has severe performance implications.
278 For now, revert the change, without ripping out a more explicit
279 support for the attr.tree configuration variable.
280
281 * The "--exit-code" option of "git diff" command learned to work with
282 the "--ext-diff" option.
283
284 * Windows CI running in GitHub Actions started complaining about the
285 order of arguments given to calloc(); the imported regex code uses
286 the wrong order almost consistently, which has been corrected.
287
288 * Expose "name conflict" error when a ref creation fails due to D/F
289 conflict in the ref namespace, to improve an error message given by
290 "git fetch".
291 (merge 9339fca23e it/refs-name-conflict later to maint).
292
293 * The SubmittingPatches document now refers folks to manpages
294 translation project.
295
296 * The documentation for "git diff --name-only" has been clarified
297 that it is about showing the names in the post-image tree.
298
299 * The credential helper that talks with osx keychain learned to avoid
300 storing back the authentication material it just got received from
301 the keychain.
302 (merge e1ab45b2da kn/osxkeychain-skip-idempotent-store later to maint).
303
304 * The chainlint script (invoked during "make test") did nothing when
305 it failed to detect the number of available CPUs. It now falls
306 back to 1 CPU to avoid the problem.
307
308 * Revert overly aggressive "layered defence" that went into 2.45.1
309 and friends, which broke "git-lfs", "git-annex", and other use
310 cases, so that we can rebuild necessary counterparts in the open.
311
312 * "git init" in an already created directory, when the user
313 configuration has includeif.onbranch, started to fail recently,
314 which has been corrected.
315
316 * Memory leaks in "git mv" has been plugged.
317
318 * The safe.directory configuration knob has been updated to
319 optionally allow leading path matches.
320
321 * An overly large ".gitignore" files are now rejected silently.
322
323 * Upon expiration event, the credential subsystem forgot to clear
324 in-core authentication material other than password (whose support
325 was added recently), which has been corrected.
326
327 * Fix for an embarrassing typo that prevented Python2 tests from running
328 anywhere.
329
330 * Varargs functions that are unannotated as printf-like or execl-like
331 have been annotated as such.
332
333 * "git am" has a safety feature to prevent it from starting a new
334 session when there already is a session going. It reliably
335 triggers when a mbox is given on the command line, but it has to
336 rely on the tty-ness of the standard input. Add an explicit way to
337 opt out of this safety with a command line option.
338 (merge 62c71ace44 jk/am-retry later to maint).
339
340 * A leak in "git imap-send" that somehow escapes LSan has been
341 plugged.
342
343 * Setting core.abbrev too early before the repository set-up
344 (typically in "git clone") caused segfault, which as been
345 corrected.
346
347 * When the user adds to "git rebase -i" instruction to "pick" a merge
348 commit, the error experience is not pleasant. Such an error is now
349 caught earlier in the process that parses the todo list.
350
351 * We forgot to normalize the result of getcwd() to NFC on macOS where
352 all other paths are normalized, which has been corrected. This still
353 does not address the case where core.precomposeUnicode configuration
354 is not defined globally.
355
356 * Earlier we stopped using the tree of HEAD as the default source of
357 attributes in a bare repository, but failed to document it. This
358 has been corrected.
359
360 * "git update-server-info" and "git commit-graph --write" have been
361 updated to use the tempfile API to avoid leaving cruft after
362 failing.
363
364 * An unused extern declaration for mingw has been removed to prevent
365 it from causing build failure.
366
367 * A helper function shared between two tests had a copy-paste bug,
368 which has been corrected.
369
370 * "git fetch-pack -k -k" without passing "--lock-pack" (which we
371 never do ourselves) did not work at all, which has been corrected.
372
373 * CI job to build minimum fuzzers learned to pass NO_CURL=NoThanks to
374 the build procedure, as its build environment does not offer, or
375 the rest of the build needs, anything cURL.
376 (merge 4e66b5a990 jc/fuzz-sans-curl later to maint).
377
378 * "git diff --no-ext-diff" when diff.external is configured ignored
379 the "--color-moved" option.
380 (merge 0f4b0d4cf0 rs/diff-color-moved-w-no-ext-diff-fix later to maint).
381
382 * "git archive --add-virtual-file=<path>:<contents>" never paid
383 attention to the --prefix=<prefix> option but the documentation
384 said it would. The documentation has been corrected.
385 (merge 72c282098d jc/archive-prefix-with-add-virtual-file later to maint).
386
387 * When GIT_PAGER failed to spawn, depending on the code path taken,
388 we failed immediately (correct) or just spew the payload to the
389 standard output (incorrect). The code now always fail immediately
390 when GIT_PAGER fails.
391 (merge 78f0a5d187 rj/pager-die-upon-exec-failure later to maint).
392
393 * date parser updates to be more careful about underflowing epoch
394 based timestamp.
395 (merge 9d69789770 db/date-underflow-fix later to maint).
396
397 * The Bloom filter used for path limited history traversal was broken
398 on systems whose "char" is unsigned; update the implementation and
399 bump the format version to 2.
400 (merge 9c8a9ec787 tb/path-filter-fix later to maint).
401
402 * Typofix.
403 (merge 231cf7370e as/pathspec-h-typofix later to maint).
404
405 * Code clean-up.
406 (merge 4b837f821e rs/simplify-submodule-helper-super-prefix-invocation later to maint).
407
408 * "git describe --dirty --broken" forgot to refresh the index before
409 seeing if there is any chang, ("git describe --dirty" correctly did
410 so), which has been corrected.
411 (merge b8ae42e292 as/describe-broken-refresh-index-fix later to maint).
412
413 * Test suite has been taught not to unnecessarily rely on DNS failing
414 a bogus external name.
415 (merge 407cdbd271 jk/tests-without-dns later to maint).
416
417 * GitWeb update to use committer date consistently in rss/atom feeds.
418 (merge cf6ead095b am/gitweb-feed-use-committer-date later to maint).
419
420 * Custom control structures we invented more recently have been
421 taught to the clang-format file.
422 (merge 1457dff9be rs/clang-format-updates later to maint).
423
424 * Developer build procedure fix.
425 (merge df32729866 tb/dev-build-pedantic-fix later to maint).
426
427 * "git push" that pushes only deletion gave an unnecessary and
428 harmless error message when push negotiation is configured, which
429 has been corrected.
430 (merge 4d8ee0317f jc/disable-push-nego-for-deletion later to maint).
431
432 * Address-looking strings found on the trailer are now placed on the
433 Cc: list after running through sanitize_address by "git send-email".
434 (merge c852531f45 cb/send-email-sanitize-trailer-addresses later to maint).
435
436 * Tests that use GIT_TEST_SANITIZE_LEAK_LOG feature got their exit
437 status inverted, which has been corrected.
438 (merge 8c1d6691bc rj/test-sanitize-leak-log-fix later to maint).
439
440 * The http.cookieFile and http.saveCookies configuration variables
441 have a few values that need to be avoided, which are now ignored
442 with warning messages.
443 (merge 4f5822076f jc/http-cookiefile later to maint).
444
445 * Repacking a repository with multi-pack index started making stupid
446 pack selections in Git 2.45, which has been corrected.
447 (merge 8fb6d11fad ds/midx-write-repack-fix later to maint).
448
449 * Fix documentation mark-up regression in 2.45.
450 (merge 6474da0aa4 ja/doc-markup-updates-fix later to maint).
451
452 * Work around asciidoctor's css that renders `monospace` material
453 in the SYNOPSIS section of manual pages as block elements.
454 (merge d44ce6ddd5 js/doc-markup-updates-fix later to maint).
455
456 * Other code cleanup, docfix, build fix, etc.
457 (merge 493fdae046 ew/object-convert-leakfix later to maint).
458 (merge 00f3661a0a ss/doc-eol-attr-fix later to maint).
459 (merge 428c40da61 ri/doc-show-branch-fix later to maint).
460 (merge 58696bfcaa jc/where-is-bash-for-ci later to maint).
461 (merge 616e94ca24 tb/doc-max-tree-depth-fix later to maint).