]> git.ipfire.org Git - thirdparty/git.git/blob - Documentation/RelNotes/2.36.0.txt
Merge branch 'ns/core-fsyncmethod'
[thirdparty/git.git] / Documentation / RelNotes / 2.36.0.txt
1 Git 2.36 Release Notes
2 ======================
3
4 Updates since Git 2.35
5 ----------------------
6
7 Backward compatibility warts
8
9 * "git name-rev --stdin" has been deprecated and issues a warning
10 when used; use "git name-rev --annotate-stdin" instead.
11
12 * "git clone --filter=... --recurse-submodules" only makes the
13 top-level a partial clone, while submodules are fully cloned. This
14 behaviour is changed to pass the same filter down to the submodules.
15
16
17 Note to those who build from the source
18
19 * Since Git 2.31, our source assumed that the compiler you use to
20 build Git supports variadic macros, with an easy-to-use escape
21 hatch to allow compilation without variadic macros with an request
22 to report that you had to use the escape hatch to the list.
23 Because we haven't heard from anybody who actually needed to use
24 the escape hatch, it has been removed, making support of variadic
25 macros a hard requirement.
26
27
28 UI, Workflows & Features
29
30 * Assorted updates to "git cat-file", especially "-h".
31
32 * The command line completion (in contrib/) learns to complete
33 arguments to give to "git sparse-checkout" command.
34
35 * "git log --remerge-diff" shows the difference from mechanical merge
36 result and the result that is actually recorded in a merge commit.
37
38 * "git log" and friends learned an option --exclude-first-parent-only
39 to propagate UNINTERESTING bit down only along the first-parent
40 chain, just like --first-parent option shows commits that lack the
41 UNINTERESTING bit only along the first-parent chain.
42
43 * The command line completion script (in contrib/) learned to
44 complete all Git subcommands, including the ones that are normally
45 hidden, when GIT_COMPLETION_SHOW_ALL_COMMANDS is used.
46
47 * "git branch" learned the "--recurse-submodules" option.
48
49 * A not-so-common mistake is to write a script to feed "git bisect
50 run" without making it executable, in which case all tests will
51 exit with 126 or 127 error codes, even on revisions that are marked
52 as good. Try to recognize this situation and stop iteration early.
53
54 * When "index-pack" dies due to incoming data exceeding the maximum
55 allowed input size, include the value of the limit in the error
56 message.
57
58 * The error message given by "git switch HEAD~4" has been clarified
59 to suggest the "--detach" option that is required.
60
61 * In sparse-checkouts, files mis-marked as missing from the working tree
62 could lead to later problems. Such files were hard to discover, and
63 harder to correct. Automatically detecting and correcting the marking
64 of such files has been added to avoid these problems.
65
66 * "git cat-file" learns "--batch-command" mode, which is a more
67 flexible interface than the existing "--batch" or "--batch-check"
68 modes, to allow different kinds of inquiries made.
69
70 * The level of verbose output from the ort backend during inner merge
71 has been aligned to that of the recursive backend.
72
73 * "git remote rename A B", depending on the number of remote-tracking
74 refs involved, takes long time renaming them. The command has been
75 taught to show progress bar while making the user wait.
76
77 * Bundle file format gets extended to allow a partial bundle,
78 filtered by similar criteria you would give when making a
79 partial/lazy clone.
80
81 * A new built-in userdiff driver for kotlin has been added.
82
83 * "git repack" learned a new configuration to disable triggering of
84 age-old "update-server-info" command, which is rarely useful these
85 days.
86
87
88 Performance, Internal Implementation, Development Support etc.
89
90 * "git apply" (ab)used the util pointer of the string-list to keep
91 track of how each symbolic link needs to be handled, which has been
92 simplified by using strset.
93
94 * Fix a hand-rolled alloca() imitation that may have violated
95 alignment requirement of data being sorted in compatibility
96 implementation of qsort_s() and stable qsort().
97
98 * Use the parse-options API in "git reflog" command.
99
100 * The conditional inclusion mechanism of configuration files using
101 "[includeIf <condition>]" learns to base its decision on the
102 URL of the remote repository the repository interacts with.
103 (merge 399b198489 jt/conditional-config-on-remote-url later to maint).
104
105 * "git name-rev --stdin" does not behave like usual "--stdin" at
106 all. Start the process of renaming it to "--annotate-stdin".
107 (merge a2585719b3 jc/name-rev-stdin later to maint).
108
109 * "git update-index", "git checkout-index", and "git clean" are
110 taught to work better with the sparse checkout feature.
111
112 * Use an internal call to reset_head() helper function instead of
113 spawning "git checkout" in "rebase", and update code paths that are
114 involved in the change.
115
116 * Messages "ort" merge backend prepares while dealing with conflicted
117 paths were unnecessarily confusing since it did not differentiate
118 inner merges and outer merges.
119
120 * Small modernization of the rerere-train script (in contrib/).
121
122 * Use designated initializers we started using in mid 2017 in more
123 parts of the codebase that are relatively quiescent.
124
125 * Improve failure case behaviour of xdiff library when memory
126 allocation fails.
127
128 * General clean-up in reftable implementation, including
129 clarification of the API documentation, tightening the code to
130 honor documented length limit, etc.
131
132 * Remove the escape hatch we added when we introduced the weather
133 balloon to use variadic macros unconditionally, to make it official
134 that we now have a hard dependency on the feature.
135
136 * Makefile refactoring with a bit of suffixes rule stripping to
137 optimize the runtime overhead.
138
139 * "git stash drop" is reimplemented as an internal call to
140 reflog_delete() function, instead of invoking "git reflog delete"
141 via run_command() API.
142
143 * Count string_list items in size_t, not "unsigned int".
144
145 * The single-key interactive operation used by "git add -p" has been
146 made more robust.
147
148 * Remove unneeded <meta http-equiv=content-type...> from gitweb
149 output.
150
151 * "git name-rev" learned to use the generation numbers when setting
152 the lower bound of searching commits used to explain the revision,
153 when available, instead of committer time.
154
155
156 Fixes since v2.35
157 -----------------
158
159 * "rebase" and "stash" in secondary worktrees are broken in
160 Git 2.35.0, which has been corrected.
161
162 * "git pull --rebase" ignored the rebase.autostash configuration
163 variable when the remote history is a descendant of our history,
164 which has been corrected.
165 (merge 3013d98d7a pb/pull-rebase-autostash-fix later to maint).
166
167 * "git update-index --refresh" has been taught to deal better with
168 racy timestamps (just like "git status" already does).
169 (merge 2ede073fd2 ms/update-index-racy later to maint).
170
171 * Avoid tests that are run under GIT_TRACE2 set from failing
172 unnecessarily.
173 (merge 944d808e42 js/test-unset-trace2-parents later to maint).
174
175 * The merge-ort misbehaved when merge.renameLimit configuration is
176 set too low and failed to find all renames.
177 (merge 9ae39fef7f en/merge-ort-restart-optim-fix later to maint).
178
179 * We explain that revs come first before the pathspec among command
180 line arguments, but did not spell out that dashed options come
181 before other args, which has been corrected.
182 (merge c11f95010c tl/doc-cli-options-first later to maint).
183
184 * "git add -p" rewritten in C regressed hunk splitting in some cases,
185 which has been corrected.
186 (merge 7008ddc645 pw/add-p-hunk-split-fix later to maint).
187
188 * "git fetch --negotiate-only" is an internal command used by "git
189 push" to figure out which part of our history is missing from the
190 other side. It should never recurse into submodules even when
191 fetch.recursesubmodules configuration variable is set, nor it
192 should trigger "gc". The code has been tightened up to ensure it
193 only does common ancestry discovery and nothing else.
194 (merge de4eaae63a gc/fetch-negotiate-only-early-return later to maint).
195
196 * The code path that verifies signatures made with ssh were made to
197 work better on a system with CRLF line endings.
198 (merge caeef01ea7 fs/ssh-signing-crlf later to maint).
199
200 * "git sparse-checkout init" failed to write into $GIT_DIR/info
201 directory when the repository was created without one, which has
202 been corrected to auto-create it.
203 (merge 7f44842ac1 jt/sparse-checkout-leading-dir-fix later to maint).
204
205 * Cloning from a repository that does not yet have any branches or
206 tags but has other refs resulted in a "remote transport reported
207 error", which has been corrected.
208 (merge dccea605b6 jt/clone-not-quite-empty later to maint).
209
210 * Mark in various places in the code that the sparse index and the
211 split index features are mutually incompatible.
212 (merge 451b66c533 js/sparse-vs-split-index later to maint).
213
214 * Update the logic to compute alignment requirement for our mem-pool.
215 (merge e38bcc66d8 jc/mem-pool-alignment later to maint).
216
217 * Pick a better random number generator and use it when we prepare
218 temporary filenames.
219 (merge 47efda967c bc/csprng-mktemps later to maint).
220
221 * Update the contributor-facing documents on proposed log messages.
222 (merge cdba0295b0 jc/doc-log-messages later to maint).
223
224 * When "git fetch --prune" failed to prune the refs it wanted to
225 prune, the command issued error messages but exited with exit
226 status 0, which has been corrected.
227 (merge c9e04d905e tg/fetch-prune-exit-code-fix later to maint).
228
229 * Problems identified by Coverity in the reftable code have been
230 corrected.
231 (merge 01033de49f hn/reftable-coverity-fixes later to maint).
232
233 * A bug that made multi-pack bitmap and the object order out-of-sync,
234 making the .midx data corrupt, has been fixed.
235 (merge f8b60cf99b tb/midx-bitmap-corruption-fix later to maint).
236
237 * The build procedure has been taught to notice older version of zlib
238 and enable our replacement uncompress2() automatically.
239 (merge 07564773c2 ab/auto-detect-zlib-compress2 later to maint).
240
241 * Interaction between fetch.negotiationAlgorithm and
242 feature.experimental configuration variables has been corrected.
243 (merge 714edc620c en/fetch-negotiation-default-fix later to maint).
244
245 * "git diff --diff-filter=aR" is now parsed correctly.
246 (merge 75408ca949 js/diff-filter-negation-fix later to maint).
247
248 * When "git subtree" wants to create a merge, it used "git merge" and
249 let it be affected by end-user's "merge.ff" configuration, which
250 has been corrected.
251 (merge 9158a3564a tk/subtree-merge-not-ff-only later to maint).
252
253 * Unlike "git apply", "git patch-id" did not handle patches with
254 hunks that has only 1 line in either preimage or postimage, which
255 has been corrected.
256 (merge 757e75c81e jz/patch-id-hunk-header-parsing-fix later to maint).
257
258 * "receive-pack" checks if it will do any ref updates (various
259 conditions could reject a push) before received objects are taken
260 out of the temporary directory used for quarantine purposes, so
261 that a push that is known-to-fail will not leave crufts that a
262 future "gc" needs to clean up.
263 (merge 5407764069 cb/clear-quarantine-early-on-all-ref-update-errors later to maint).
264
265 * Because a deletion of ref would need to remove it from both the
266 loose ref store and the packed ref store, a delete-ref operation
267 that logically removes one ref may end up invoking ref-transaction
268 hook twice, which has been corrected.
269 (merge 2ed1b64ebd ps/avoid-unnecessary-hook-invocation-with-packed-refs later to maint).
270
271 * When there is no object to write .bitmap file for, "git
272 multi-pack-index" triggered an error, instead of just skipping,
273 which has been corrected.
274 (merge eb57277ba3 tb/midx-no-bitmap-for-no-objects later to maint).
275
276 * "git cmd -h" outside a repository should error out cleanly for many
277 commands, but instead it hit a BUG(), which has been corrected.
278 (merge 87ad07d735 js/short-help-outside-repo-fix later to maint).
279
280 * "working tree" and "per-worktree ref" were in glossary, but
281 "worktree" itself wasn't, which has been corrected.
282 (merge 2df5387ed0 jc/glossary-worktree later to maint).
283
284 * L10n support for a few error messages.
285 (merge 3d3c23b3a7 bs/forbid-i18n-of-protocol-token-in-fetch-pack later to maint).
286
287 * Test modernization.
288 (merge d4fe066e4b sy/t0001-use-path-is-helper later to maint).
289
290 * "git log --graph --graph" used to leak a graph structure, and there
291 was no way to countermand "--graph" that appear earlier on the
292 command line. A "--no-graph" option has been added and resource
293 leakage has been plugged.
294
295 * Error output given in response to an ambiguous object name has been
296 improved.
297 (merge 3a73c1dfaf ab/ambiguous-object-name later to maint).
298
299 * "git sparse-checkout" wants to work with per-worktree configuration,
300 but did not work well in a worktree attached to a bare repository.
301 (merge 3ce1138272 ds/sparse-checkout-requires-per-worktree-config later to maint).
302
303 * Setting core.untrackedCache to true failed to add the untracked
304 cache extension to the index.
305
306 * Workaround we have for versions of PCRE2 before their version 10.36
307 were in effect only for their versions newer than 10.36 by mistake,
308 which has been corrected.
309 (merge 97169fc361 rs/pcre-invalid-utf8-fix-fix later to maint).
310
311 * Document Taylor as a new member of Git PLC at SFC. Welcome.
312 (merge e8d56ca863 tb/coc-plc-update later to maint).
313
314 * "git checkout -b branch/with/multi/level/name && git stash" only
315 recorded the last level component of the branch name, which has
316 been corrected.
317
318 * "git fetch" can make two separate fetches, but ref updates coming
319 from them were in two separate ref transactions under "--atomic",
320 which has been corrected.
321
322 * Check the return value from parse_tree_indirect() to turn segfaults
323 into calls to die().
324 (merge 8d2eaf649a gc/parse-tree-indirect-errors later to maint).
325
326 * Newer version of GPGSM changed its output in a backward
327 incompatible way to break our code that parses its output. It also
328 added more processes our tests need to kill when cleaning up.
329 Adjustments have been made to accommodate these changes.
330 (merge b0b70d54c4 fs/gpgsm-update later to maint).
331
332 * The untracked cache newly computed weren't written back to the
333 on-disk index file when there is no other change to the index,
334 which has been corrected.
335
336 * "git config -h" did not describe the "--type" option correctly.
337 (merge 5445124fad mf/fix-type-in-config-h later to maint).
338
339 * The way generation number v2 in the commit-graph files are
340 (not) handled has been corrected.
341 (merge 6dbf4b8172 ds/commit-graph-gen-v2-fixes later to maint).
342
343 * The method to trigger malloc check used in our tests no longer work
344 with newer versions of glibc.
345 (merge baedc59543 ep/test-malloc-check-with-glibc-2.34 later to maint).
346
347 * Other code cleanup, docfix, build fix, etc.
348 (merge cfc5cf428b jc/find-header later to maint).
349 (merge 40e7cfdd46 jh/p4-fix-use-of-process-error-exception later to maint).
350 (merge 727e6ea350 jh/p4-spawning-external-commands-cleanup later to maint).
351 (merge 0a6adc26e2 rs/grep-expr-cleanup later to maint).
352 (merge 4ed7dfa713 po/readme-mention-contributor-hints later to maint).
353 (merge 6046f7a91c en/plug-leaks-in-merge later to maint).
354 (merge 8c591dbfce bc/clarify-eol-attr later to maint).
355 (merge 518e15db74 rs/parse-options-lithelp-help later to maint).
356 (merge cbac0076ef gh/doc-typos later to maint).
357 (merge ce14de03db ab/no-errno-from-resolve-ref-unsafe later to maint).
358 (merge 2826ffad8c rc/negotiate-only-typofix later to maint).
359 (merge 0f03f04c5c en/sparse-checkout-leakfix later to maint).
360 (merge 74f3390dde sy/diff-usage-typofix later to maint).
361 (merge 45d0212a71 ll/doc-mktree-typofix later to maint).
362 (merge e9b272e4c1 js/no-more-legacy-stash later to maint).
363 (merge 6798b08e84 ab/do-not-hide-failures-in-git-dot-pm later to maint).
364 (merge 9325285df4 po/doc-check-ignore-markup-fix later to maint).
365 (merge cd26cd6c7c sy/modernize-t-lib-read-tree-m-3way later to maint).
366 (merge d17294a05e ab/hash-object-leakfix later to maint).
367 (merge b8403129d3 jd/t0015-modernize later to maint).
368 (merge 332acc248d ds/mailmap later to maint).
369 (merge 04bf052eef ab/grep-patterntype later to maint).
370 (merge 6ee36364eb ab/diff-free-more later to maint).
371 (merge 63a36017fe nj/read-tree-doc-reffix later to maint).
372 (merge eed36fce38 sm/no-git-in-upstream-of-pipe-in-tests later to maint).
373 (merge c614beb933 ep/t6423-modernize later to maint).
374 (merge 57be9c6dee ab/reflog-prep-fix later to maint).
375 (merge 5327d8982a js/in-place-reverse-in-sequencer later to maint).