]> git.ipfire.org Git - thirdparty/git.git/blob - Documentation/RelNotes/2.41.0.txt
var: adjust memory allocation for strings
[thirdparty/git.git] / Documentation / RelNotes / 2.41.0.txt
1 Git v2.41 Release Notes
2 =======================
3
4 UI, Workflows & Features
5
6 * Allow information carried on the WWW-Authenticate header to be
7 passed to the credential helpers.
8
9 * A new "fetch.hideRefs" option can be used to exclude specified refs
10 from "rev-list --objects --stdin --not --all" traversal for
11 checking object connectivity, most useful when there are many
12 unrelated histories in a single repository.
13
14 * "git push" has been taught to allow deletion of refs with one-level
15 names to help repairing a repository who acquired such a ref by
16 mistake. In general, we don't encourage use of such a ref, and
17 creation or update to such a ref is rejected as before.
18
19 * Allow "git bisect reset" to check out the original branch when the
20 branch is already checked out in a different worktree linked to the
21 same repository.
22
23 * A few subcommands have been taught to stop users from working on a
24 branch that is being used in another worktree linked to the same
25 repository.
26
27 * "git format-patch" learned to write a log-message only output file
28 for empty commits.
29
30 * "git format-patch" honors the src/dst prefixes set to nonstandard
31 values with configuration variables like "diff.noprefix", causing
32 receiving end of the patch that expects the standard -p1 format to
33 break. "format-patch" has been taught to ignore end-user configuration
34 and always use the standard prefixes.
35
36 This is a backward compatibility breaking change.
37
38 * Lift the limitation that colored prompts can only be used with
39 PROMPT_COMMAND mode.
40
41 * "git blame --contents=<file> <rev> -- <path>" used to be forbidden,
42 but now it finds the origins of lines starting at <file> contents
43 through the history that leads to <rev>.
44
45 * "git pack-redundant" gave a warning when run, as the command has
46 outlived its usefulness long ago and is nominated for future
47 removal. Now we escalate to give an error.
48
49 * "git clone" from an empty repository learned to propagate the
50 choice of the hash algorithm from the source repository to the
51 newly created repository over any one of the v0/v1/v2 protocol.
52
53 * "git mergetool" and "git difftool" learns a new configuration
54 guiDefault to optionally favor configured guitool over non-gui-tool
55 automatically when $DISPLAY is set.
56
57 * "git branch -d origin/master" would say "no such branch", but it is
58 likely a missed "-r" if refs/remotes/origin/master exists. The
59 command has been taught to give such a hint in its error message.
60
61 * Clean-up of the code path that deals with merge strategy option
62 handling in "git rebase".
63
64 * "git clone --local" stops copying from an original repository that
65 has symbolic links inside its $GIT_DIR; an error message when that
66 happens has been updated.
67
68 * The "--format=..." option of "git for-each-ref", "git branch", and
69 "git tag" commands learn "--omit-empty" to hide refs whose
70 formatting results in an empty string from the output.
71
72 * The sendemail-validate validate hook learned to pass the total
73 number of input files and where in the sequence each invocation is
74 via environment variables.
75
76 * When "gc" needs to retain unreachable objects, packing them into
77 cruft packs (instead of exploding them into loose object files) has
78 been offered as a more efficient option for some time. Now the use
79 of cruft packs has been made the default and no longer considered
80 an experimental feature.
81
82 * The output given by "git blame" that attributes a line to contents
83 taken from the file specified by the "--contents" option shows it
84 differently from a line attributed to the working tree file.
85
86 * "git send-email" learned to give the e-mail headers to the validate
87 hook by passing an extra argument from the command line.
88
89 * The credential subsystem learns to help OAuth framework.
90
91 * The titles of manual pages used to be chomped at an unreasonably
92 short limit, which has been removed.
93
94 * Error messages given when working on an unborn branch that is
95 checked out in another worktree have been improved.
96
97 * The documentation was misleading about the interaction between
98 GIT_DEFAULT_HASH and "git clone", which has been clarified to
99 stress that the variable is to be ignored by the command.
100
101 * "git send-email" learned "--header-cmd=<cmd>" that can inject
102 arbitrary e-mail header lines to the outgoing messages.
103
104 * "git fsck" learned to detect bit-flip breakages in the reachability
105 bitmap files.
106
107 * The "--stdin" option of "git name-rev" has been replaced with
108 the "--annotate-stdin" option more than a year ago. We stop
109 advertising it in the "git name-rev -h" output.
110
111 * "git push --all" gained an alias "git push --branches".
112
113 * "git fetch" learned the "--porcelain" option that emits what it did
114 in a machine-parseable format.
115
116 * "git --attr-source=<tree> cmd $args" is a new way to have any
117 command to read attributes not from the working tree but from the
118 given tree object.
119
120
121 Performance, Internal Implementation, Development Support etc.
122
123 * Code clean-up to clarify directory traversal API.
124
125 * Code clean-up to clarify the rule that "git-compat-util.h" must be
126 the first to be included.
127
128 * More work towards -Wunused.
129
130 * Instead of forcing each command to choose to honor GPG related
131 configuration variables, make the subsystem lazily initialize
132 itself.
133
134 * Remove workaround for ancient versions of DocBook to make it work
135 correctly with groff, which has not been necessary since docbook
136 1.76 from 2010.
137
138 * Code clean-up to include and/or uninclude parse-options.h file as
139 needed.
140
141 * The code path that reports what "git fetch" did to each ref has
142 been cleaned up.
143
144 * Assorted config API updates.
145
146 * A few configuration variables to tell the cURL library that
147 different types of ssl-cert and ssl-key are in use have been added.
148
149 * Split key function and data structure definitions out of cache.h to
150 new header files and adjust the users.
151
152 * "git fetch --all" does not have to download and handle the same
153 bundleURI over and over, which has been corrected.
154
155 * "git sparse-checkout" command learns a debugging aid for the sparse
156 rule definitions.
157
158 * "git write-tree" learns to work better with sparse-index.
159
160 * The on-disk reverse index that allows mapping from the pack offset
161 to the object name for the object stored at the offset has been
162 enabled by default.
163
164 * "git fsck" learned to validate the on-disk pack reverse index files.
165
166 * strtok() and strtok_r() are banned in this codebase.
167
168 * The detect-compilers script to help auto-tweaking the build system
169 had trouble working with compilers whose version number has extra
170 suffixes. The script has been taught that certain suffixes (like
171 "-win32" in "gcc 10-win32") can be safely stripped as they share
172 the same features and bugs with the version without the suffix.
173
174 * ctype tests have been taught to test EOF, too.
175
176 * The implementation of credential helpers used fgets() over fixed
177 size buffers to read protocol messages, causing the remainder of
178 the folded long line to trigger unexpected behaviour, which has
179 been corrected.
180
181 * The implementation of the default "negotiator", used to find common
182 ancestor over the network for object tranfer, used to be recursive;
183 it was updated to be iterative to conserve stackspace usage.
184
185 * Our custom callout formatter is no longer used in the documentation
186 formatting toolchain, as the upstream default ones give better
187 output these days.
188
189 * The tracing mechanism learned to notice and report when
190 auto-discovered bare repositories are being used, as allowing so
191 without explicitly stating the user intends to do so (with setting
192 GIT_DIR for example) can be used with social engineering as an
193 attack vector.
194
195 * "git diff-files" learned not to expand sparse-index unless needed.
196
197
198 Fixes since v2.40
199 -----------------
200
201 * "git fsck" learned to check the index files in other worktrees,
202 just like "git gc" honors them as anchoring points.
203 (merge 8d3e7eac52 jk/fsck-indices-in-worktrees later to maint).
204
205 * Fix a segfaulting loop. The function and its caller may need
206 further clean-up.
207 (merge c5773dc078 ew/commit-reach-clean-up-flags-fix later to maint).
208
209 * "git restore" supports options like "--ours" that are only
210 meaningful during a conflicted merge, but these options are only
211 meaningful when updating the working tree files. These options are
212 marked to be incompatible when both "--staged" and "--worktree" are
213 in effect.
214 (merge ee8a88826a ak/restore-both-incompatible-with-conflicts later to maint).
215
216 * Simplify UI to control progress meter given by "git bundle" command.
217 (merge 8b95521edb jk/bundle-progress later to maint).
218
219 * "git bundle" learned that "-" is a common way to say that the input
220 comes from the standard input and/or the output goes to the
221 standard output. It used to work only for output and only from the
222 root level of the working tree.
223 (merge 0bbe10313e jk/bundle-use-dash-for-stdfiles later to maint).
224
225 * Once we start running, we assumed that the list of alternate object
226 databases would never change. Hook into the machinery used to
227 update the list of packfiles during runtime to update this list as
228 well.
229 (merge e2d003dbed ds/reprepare-alternates-when-repreparing-packfiles later to maint).
230
231 * The code to parse "git rebase -X<opt>" was not prepared to see an
232 unparsable option string, which has been corrected.
233 (merge 15a4cc912e ab/fix-strategy-opts-parsing later to maint).
234
235 * "git add -p" while the index is unmerged sometimes failed to parse
236 the diff output it internally produces and died, which has been
237 corrected.
238 (merge 28d1122f9c jk/add-p-unmerged-fix later to maint).
239
240 * Fix for a "ls-files --format="%(path)" that produced nonsense
241 output, which was a bug in 2.38.
242 (merge cfb62dd006 aj/ls-files-format-fix later to maint).
243
244 * "git receive-pack" that responds to "git push" requests failed to
245 clean a stale lockfile when killed in the middle, which has been
246 corrected.
247 (merge c55c30669c ps/receive-pack-unlock-before-die later to maint).
248
249 * "git rev-parse --quiet foo@{u}", or anything that asks @{u} to be
250 parsed with GET_OID_QUIETLY option, did not quietly fail, which has
251 been corrected.
252 (merge dfbfdc521d fc/oid-quietly-parse-upstream later to maint).
253
254 * Transports that do not support protocol v2 did not correctly fall
255 back to protocol v0 under certain conditions, which has been
256 corrected.
257 (merge eaa0fd6584 jk/fix-proto-downgrade-to-v0 later to maint).
258
259 * time(2) on glib 2.31+, especially on Linux, goes out of sync with
260 higher resolution timers used for gettimeofday(2) and by the
261 filesystem. Replace all calls to it with a git_time() wrapper and
262 (merge 370ddcbc89 pe/time-use-gettimeofday later to maint).
263
264 * Code clean-up to use designated initializers in parse-options API.
265 (merge 353e6d4554 sg/parse-options-h-initializers later to maint).
266
267 * A recent-ish change to allow unicode character classes to be used
268 with "grep -P" triggered a JIT bug in older pcre2 libraries.
269 The problematic change in Git built with these older libraries has
270 been disabled to work around the bug.
271 (merge 14b9a04479 mk/workaround-pcre-jit-ucp-bug later to maint).
272
273 * The wildmatch library code unlearns exponential behaviour it
274 acquired some time ago since it was borrowed from rsync.
275 (merge 3dc0b7f0dc pw/wildmatch-fixes later to maint).
276
277 * The index files can become corrupt under certain conditions when
278 the split-index feature is in use, especially together with
279 fsmonitor, which have been corrected.
280 (merge 061dd722dc js/split-index-fixes later to maint).
281
282 * Document what the pathname-looking strings in "rev-list --object"
283 output are for and what they mean.
284 (merge 15364d2a3c jk/document-rev-list-object-name later to maint).
285
286 * Fix unnecessary truncation of generation numbers used in-core.
287 (merge d3af1c193d ps/ahead-behind-truncation-fix later to maint).
288
289 * Code clean-up around the use of the_repository.
290 (merge 4a93b899c1 ab/remove-implicit-use-of-the-repository later to maint).
291
292 * Consistently spell "Message-ID" as such, not "Message-Id".
293 (merge ba4324c4e1 jc/spell-id-in-both-caps-in-message-id later to maint).
294
295 * Correct use of an uninitialized structure member.
296 (merge dc12ee77ab jx/cap-object-info-uninitialized-fix later to maint).
297
298 * Tests had a few places where we ignored PERL_PATH and blindly used
299 /usr/bin/perl, which have been corrected.
300 (merge c1917156a0 jk/use-perl-path-consistently later to maint).
301
302 * Documentation mark-up fix.
303 (merge 78b6369e67 la/mfc-markup-fix later to maint).
304
305 * Doc toolchain update to remove old workaround for AsciiDoc.
306 (merge 8806120de6 fc/remove-header-workarounds-for-asciidoc later to maint).
307
308 * The userdiff regexp patterns for various filetypes that are built
309 into the system have been updated to avoid triggering regexp errors
310 from UTF-8 aware regex engines.
311 (merge be39144954 rs/userdiff-multibyte-regex later to maint).
312
313 * The approxidate() API has been simplified by losing an extra
314 function that did the same thing as another one.
315 (merge 8a7f0b666f rs/remove-approxidate-relative later to maint).
316
317 * Code clean-up to replace a hardcoded constant with a CPP macro.
318 (merge c870de6502 rs/get-tar-commit-id-use-defined-const later to maint).
319
320 * Doc build simplification.
321 (merge 9a09ed3229 fc/doc-stop-using-manversion later to maint).
322
323 * "git archive" run from a subdirectory mishandled attributes and
324 paths outside the current directory.
325 (merge 92b1dd1b9e rs/archive-from-subdirectory-fixes later to maint).
326
327 * The code to parse capability list for v0 on-wire protocol fell into
328 an infinite loop when a capability appears multiple times, which
329 has been corrected.
330
331 * Geometric repacking ("git repack --geometric=<n>") in a repository
332 that borrows from an alternate object database had various corner
333 case bugs, which have been corrected.
334 (merge d85cd18777 ps/fix-geom-repack-with-alternates later to maint).
335
336 * The "%GT" placeholder for the "--format" option of "git log" and
337 friends caused BUG() to trigger on a commit signed with an unknown
338 key, which has been corrected.
339 (merge 7891e46585 jk/gpg-trust-level-fix later to maint).
340
341 * The completion script used to use bare "read" without the "-r"
342 option to read the contents of various state files, which risked
343 getting confused with backslashes in them. This has been
344 corrected.
345 (merge 197152098a ek/completion-use-read-r-to-read-literally later to maint).
346
347 * A small API fix to the ort merge strategy backend.
348 (merge 000c4ceca7 en/ort-finalize-after-0-merges-fix later to maint).
349
350 * The commit object parser has been taught to be a bit more lenient
351 to parse timestamps on the author/committer line with a malformed
352 author/committer ident.
353 (merge 90ef0f14eb jk/parse-commit-with-malformed-ident later to maint).
354
355 * Retitle a test script with an overly narrow name.
356 (merge 8bb19c14fb ob/t3501-retitle later to maint).
357
358 * Doc update to clarify how text and eol attributes interact to
359 specify the end-of-line conversion.
360 (merge 6696077ace ah/doc-attributes-text later to maint).
361
362 * Gitk updates from GfW project.
363 (merge 99e70f3077 js/gitk-fixes-from-gfw later to maint).
364
365 * "git diff --dirstat" leaked memory, which has been plugged.
366 (merge 83973981eb jc/dirstat-plug-leaks later to maint).
367
368 * "git merge-tree" reads the basic configuration, which can be used
369 by git forges to disable replace-refs feature.
370 (merge b6551feadf ds/merge-tree-use-config later to maint).
371
372 * A few bugs in the sequencer machinery that results in miscounting
373 the steps have been corrected.
374 (merge 170eea9750 js/rebase-count-fixes later to maint).
375
376 * Other code cleanup, docfix, build fix, etc.
377 (merge f7111175df as/doc-markup-fix later to maint).
378 (merge 90ff7c9898 fc/test-aggregation-clean-up later to maint).
379 (merge 9b0c7f308a jc/am-doc-refer-to-format-patch later to maint).
380 (merge b10cbdac4c bb/unicode-width-table-15 later to maint).
381 (merge 3457b50e8c ab/retire-scripted-add-p later to maint).
382 (merge d52fcf493b ds/p2000-fix-grep-sparse later to maint).
383 (merge ec063d2591 ss/hashmap-typofix later to maint).
384 (merge 1aaed69d11 rs/archive-mtime later to maint).
385 (merge 2da2cc9b28 ob/rollback-after-commit-lock-failure later to maint).
386 (merge 54dbd0933b ob/sequencer-save-head-simplify later to maint).
387 (merge a93cbe8d78 ar/test-cleanup-unused-file-creation later to maint).
388 (merge cc48ddd937 jk/chainlint-fixes later to maint).
389 (merge 4833b08426 ow/ref-format-remove-unused-member later to maint).
390 (merge d0ea2ca1cf dw/doc-submittingpatches-grammofix later to maint).
391 (merge fd72637423 ar/t2024-checkout-output-fix later to maint).
392 (merge d45cbe3fe0 ob/sequencer-i18n-fix later to maint).
393 (merge b734fe49fd ob/messages-capitalize-exception later to maint).
394 (merge ad353d7e77 ma/gittutorial-fixes later to maint).
395 (merge a5855fd8d4 ar/test-cleanup-unused-file-creation-part2 later to maint).
396 (merge 0c5308af30 sd/doc-gitignore-and-rm-cached later to maint).
397 (merge cbb83daeaf kh/doc-interpret-trailers-updates later to maint).
398 (merge 3d77fbb664 ar/config-count-tests-updates later to maint).
399 (merge b7cf25c8f4 jc/t9800-fix-use-of-show-s-raw later to maint).