]> git.ipfire.org Git - thirdparty/git.git/blob - Documentation/RelNotes/2.38.0.txt
refs: unify parse_worktree_ref() and ref_type()
[thirdparty/git.git] / Documentation / RelNotes / 2.38.0.txt
1 Git v2.38 Release Notes
2 =======================
3
4 UI, Workflows & Features
5
6 * "git remote show [-n] frotz" now pays attention to negative
7 pathspec.
8
9 * "git push" sometimes perform poorly when reachability bitmaps are
10 used, even in a repository where other operations are helped by
11 bitmaps. The push.useBitmaps configuration variable is introduced
12 to allow disabling use of reachability bitmaps only for "git push".
13
14 * "git grep -m<max-hits>" is a way to limit the hits shown per file.
15
16 * "git merge-tree" learned a new mode where it takes two commits and
17 computes a tree that would result in the merge commit, if the
18 histories leading to these two commits were to be merged.
19
20 * "git mv A B" in a sparsely populated working tree can be asked to
21 move a path between directories that are "in cone" (i.e. expected
22 to be materialized in the working tree) and "out of cone"
23 (i.e. expected to be hidden). The handling of such cases has been
24 improved.
25
26 * Earlier, HTTP transport clients learned to tell the server side
27 what locale they are in by sending Accept-Language HTTP header, but
28 this was done only for some requests but not others.
29
30 * Introduce a discovery.barerepository configuration variable that
31 allows users to forbid discovery of bare repositories.
32
33 * Various messages that come from the pack-bitmap codepaths have been
34 tweaked.
35
36 * "git rebase -i" learns to update branches whose tip appear in the
37 rebased range with "--update-refs" option.
38
39 * "git ls-files" learns the "--format" option to tweak its output.
40
41 * "git cat-file" learned an option to use the mailmap when showing
42 commit and tag objects.
43
44 * When "git merge" finds that it cannot perform a merge, it should
45 restore the working tree to the state before the command was
46 initiated, but in some corner cases it didn't.
47
48 * Operating modes like "--batch" of "git cat-file" command learned to
49 take NUL-terminated input, instead of one-item-per-line.
50
51 * "git rm" has become more aware of the sparse-index feature.
52
53 * "git rev-list --disk-usage" learned to take an optional value
54 "human" to show the reported value in human-readable format, like
55 "3.40MiB".
56
57 * The "diagnose" feature to create a zip archive for diagnostic
58 material has been lifted from "scalar" and made into a feature of
59 "git bugreport".
60
61 * The namespaces used by "log --decorate" from "refs/" hierarchy by
62 default has been tightened.
63
64 * "git rev-list --ancestry-path=C A..B" is a natural extension of
65 "git rev-list A..B"; instead of choosing a subset of A..B to those
66 that have ancestry relationship with A, it lets a subset with
67 ancestry relationship with C.
68
69 * "scalar" now enables built-in fsmonitor on enlisted repositories,
70 when able.
71
72 * The bash prompt (in contrib/) learned to optionally indicate when
73 the index is unmerged.
74
75 * "git clone" command learned the "--bundle-uri" option to coordinate
76 with hosting sites the use of pre-prepared bundle files.
77
78 * "git range-diff" learned to honor pathspec argument if given.
79
80 * "git format-patch --from=<ident>" can be told to add an in-body
81 "From:" line even for commits that are authored by the given
82 <ident> with "--force-in-body-from"option.
83
84 * The built-in fsmonitor refuses to work on a network mounted
85 repositories; a configuration knob for users to override this has
86 been introduced.
87
88
89 Performance, Internal Implementation, Development Support etc.
90
91 * Collection of what is referenced by objects in promisor packs have
92 been optimized to inspect these objects in the in-pack order.
93
94 * Introduce a helper to see if a branch is already being worked on
95 (hence should not be newly checked out in a working tree), which
96 performs much better than the existing find_shared_symref() to
97 replace many uses of the latter.
98
99 * Teach "git archive" to (optionally and then by default) avoid
100 spawning an external "gzip" process when creating ".tar.gz" (and
101 ".tgz") archives.
102
103 * Allow large objects read from a packstream to be streamed into a
104 loose object file straight, without having to keep it in-core as a
105 whole.
106
107 * Further preparation to turn git-submodule.sh into a builtin
108 continues.
109
110 * Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
111 macro, which would improve maintainability and readability.
112
113 * Teach "make all" to build gitweb as well.
114
115 * Tweak tests so that they still work when the "git init" template
116 did not create .git/info directory.
117
118 * Add Coccinelle rules to detect the pattern of initializing and then
119 finalizing a structure without using it in between at all, which
120 happens after code restructuring and the compilers fail to
121 recognize as an unused variable.
122
123 * The code to convert between GPG trust level strings and internal
124 constants we use to represent them have been cleaned up.
125
126 * Support for libnettle as SHA256 implementation has been added.
127
128 * The way "git multi-pack" uses parse-options API has been improved.
129
130 * A coccinelle rule (in contrib/) to encourage use of COPY_ARRAY
131 macro has been improved.
132
133 * API tweak to make it easier to run fuzz testing on commit-graph parser.
134
135 * Omit fsync-related trace2 entries when their values are all zero.
136
137 * The codepath to write multi-pack index has been taught to release a
138 large chunk of memory that holds an array of objects in the packs,
139 as soon as it is done with the array, to reduce memory consumption.
140
141 * Add a level of redirection to array allocation API in xdiff part,
142 to make it easier to share with the libgit2 project.
143
144 * "git fetch" client logs the partial clone filter used in the trace2
145 output.
146
147 * The "bundle URI" design gets documented.
148
149 * The common ancestor negotiation exchange during a "git fetch"
150 session now leaves trace log.
151
152 * Test portability improvements.
153 (merge 4d1d843be7 mt/rot13-in-c later to maint).
154
155 * The "subcommand" mode is introduced to parse-options API and update
156 the command line parser of Git commands with subcommands.
157
158 * The pack bitmap file gained a bitmap-lookup table to speed up
159 locating the necessary bitmap for a given commit.
160
161 * The assembly version of SHA-1 implementation for PPC has been
162 removed.
163
164 * The server side that responds to "git fetch" and "git clone"
165 request has been optimized by allowing it to send objects in its
166 object store without recomputing and validating the object names.
167
168 * Annotate function parameters that are not used (but cannot be
169 removed for structural reasons), to prepare us to later compile
170 with -Wunused warning turned on.
171
172 * Share the text used to explain configuration variables used by "git
173 <subcmd>" in "git help <subcmd>" with the text from "git help config".
174
175
176 Fixes since v2.37
177 -----------------
178
179 * Rewrite of "git add -i" in C that appeared in Git 2.25 didn't
180 correctly record a removed file to the index, which was fixed.
181
182 * Certain diff options are currently ignored when combined-diff is
183 shown; mark them as incompatible with the feature.
184
185 * Adjust technical/bitmap-format to be formatted by AsciiDoc, and
186 add some missing information to the documentation.
187
188 * Fixes for tests when the source directory has unusual characters in
189 its path, e.g. whitespaces, double-quotes, etc.
190
191 * "git mktree --missing" lazily fetched objects that are missing from
192 the local object store, which was totally unnecessary for the purpose
193 of creating the tree object(s) from its input.
194
195 * Give _() markings to fatal/warning/usage: labels that are shown in
196 front of these messages.
197
198 * References to commands-to-be-typed-literally in "git rebase"
199 documentation mark-up have been corrected.
200
201 * In a non-bare repository, the behavior of Git when the
202 core.worktree configuration variable points at a directory that has
203 a repository as its subdirectory, regressed in Git 2.27 days.
204
205 * Recent update to vimdiff layout code has been made more robust
206 against different end-user vim settings.
207
208 * Plug various memory leaks, both in the main code and in test-tool
209 commands.
210
211 * Fixes a long-standing corner case bug around directory renames in
212 the merge-ort strategy.
213
214 * The resolve-undo information in the index was not protected against
215 GC, which has been corrected.
216
217 * A corner case bug where lazily fetching objects from a promisor
218 remote resulted in infinite recursion has been corrected.
219
220 * "git clone" from a repository with some ref whose HEAD is unborn
221 did not set the HEAD in the resulting repository correctly, which
222 has been corrected.
223
224 * An earlier attempt to plug leaks placed a clean-up label to jump to
225 at a bogus place, which as been corrected.
226
227 * Variable quoting fix in the vimdiff driver of "git mergetool"
228
229 * "git shortlog -n" relied on the underlying qsort() to be stable,
230 which shouldn't have. Fixed.
231
232 * A fix for a regression in test framework.
233
234 * mkstemp() emulation on Windows has been improved.
235
236 * Add missing documentation for "include" and "includeIf" features in
237 "git config" file format, which incidentally teaches the command
238 line completion to include them in its offerings.
239
240 * Avoid "white/black-list" in documentation and code comments.
241
242 * Workaround for a compiler warning against use of die() in
243 osx-keychain (in contrib/).
244
245 * Workaround for a false positive compiler warning.
246
247 * "git p4" working on UTF-16 files on Windows did not implement
248 CRLF-to-LF conversion correctly, which has been corrected.
249
250 * "git p4" did not handle non-ASCII client name well, which has been
251 corrected.
252
253 * "rerere-train" script (in contrib/) used to honor commit.gpgSign
254 while recreating the throw-away merges.
255
256 * "git checkout" miscounted the paths it updated, which has been
257 corrected.
258
259 * Fix for a bug that makes write-tree to fail to write out a
260 non-existent index as a tree, introduced in 2.37.
261
262 * There was a bug in the codepath to upgrade generation information
263 in commit-graph from v1 to v2 format, which has been corrected.
264
265 * Gitweb had legacy URL shortener that is specific to the way
266 projects hosted on kernel.org used to (but no longer) work, which
267 has been removed.
268
269 * Fix build procedure for Windows that uses CMake so that it can pick
270 up the shell interpreter from local installation location.
271
272 * Conditionally allow building Python interpreter on Windows
273
274 * Fix to lstat() emulation on Windows.
275
276 * Older gcc with -Wall complains about the universal zero initializer
277 "struct s = { 0 };" idiom, which makes developers' lives
278 inconvenient (as -Werror is enabled by DEVELOPER=YesPlease). The
279 build procedure has been tweaked to help these compilers.
280
281 * Plug memory leaks in the failure code path in the "merge-ort" merge
282 strategy backend.
283
284 * "git symbolic-ref symref non..sen..se" is now diagnosed as an error.
285
286 * A follow-up fix to a fix for a regression in 2.36 around hooks.
287
288 * Avoid repeatedly running getconf to ask libc version in the test
289 suite, and instead just as it once per script.
290
291 * Platform-specific code that determines if a directory is OK to use
292 as a repository has been taught to report more details, especially
293 on Windows.
294
295 * "vimdiff3" regression fix.
296
297 * "git fsck" reads mode from tree objects but canonicalizes the mode
298 before passing it to the logic to check object sanity, which has
299 hid broken tree objects from the checking logic. This has been
300 corrected, but to help exiting projects with broken tree objects
301 that they cannot fix retroactively, the severity of anomalies this
302 code detects has been demoted to "info" for now.
303
304 * Fixes to sparse index compatibility work for "reset" and "checkout"
305 commands.
306
307 * An earlier optimization discarded a tree-object buffer that is
308 still in use, which has been corrected.
309 (merge 1490d7d82d jk/is-promisor-object-keep-tree-in-use later to maint).
310
311 * Fix deadlocks between main Git process and subprocess spawned via
312 the pipe_command() API, that can kill "git add -p" that was
313 reimplemented in C recently.
314 (merge 716c1f649e jk/pipe-command-nonblock later to maint).
315
316 * The sequencer machinery translated messages left in the reflog by
317 mistake, which has been corrected.
318
319 * xcalloc(), imitating calloc(), takes "number of elements of the
320 array", and "size of a single element", in this order. A call that
321 does not follow this ordering has been corrected.
322 (merge c4bbd9bb8f sg/xcalloc-cocci-fix later to maint).
323
324 * The preload-index codepath made copies of pathspec to give to
325 multiple threads, which were left leaked.
326 (merge 23578904da ad/preload-plug-memleak later to maint).
327
328 * Update the version of Ubuntu used for GitHub Actions CI from 18.04
329 to 22.04.
330 (merge ef46584831 ds/github-actions-use-newer-ubuntu later to maint).
331
332 * The auto-stashed local changes created by "git merge --autostash"
333 was mixed into a conflicted state left in the working tree, which
334 has been corrected.
335 (merge d3a9295ada en/merge-unstash-only-on-clean-merge later to maint).
336
337 * Multi-pack index got corrupted when preferred pack changed from one
338 pack to another in a certain way, which has been corrected.
339 (merge 99e4d084ff tb/midx-with-changing-preferred-pack-fix later to maint).
340
341 * The clean-up of temporary files created via mks_tempfile_dt() was
342 racy and attempted to unlink() the leading directory when signals
343 are involved, which has been corrected.
344 (merge babe2e0559 rs/tempfile-cleanup-race-fix later to maint).
345
346 * FreeBSD portability fix for "git maintenance" that spawns "crontab"
347 to schedule tasks.
348 (merge ee69e7884e bc/gc-crontab-fix later to maint).
349
350 * Those who use diff-so-fancy as the diff-filter noticed a regression
351 or two in the code that parses the diff output in the built-in
352 version of "add -p", which has been corrected.
353 (merge 0a101676e5 js/add-p-diff-parsing-fix later to maint).
354
355 * Segfault fix-up to an earlier fix to the topic to teach "git reset"
356 and "git checkout" work better in a sparse checkout.
357 (merge 037f8ea6d9 vd/sparse-reset-checkout-fixes later to maint).
358
359 * "git diff --no-index A B" managed its the pathnames of its two
360 input files rather haphazardly, sometimes leaking them. The
361 command line argument processing has been straightened out to clean
362 it up.
363 (merge 2b43dd0eb5 rs/diff-no-index-cleanup later to maint).
364
365 * "git rev-list --verify-objects" ought to inspect the contents of
366 objects and notice corrupted ones, but it didn't when the commit
367 graph is in use, which has been corrected.
368 (merge b27ccae34b jk/rev-list-verify-objects-fix later to maint).
369
370 * More fixes to "add -p"
371 (merge 64ec8efb83 js/builtin-add-p-portability-fix later to maint).
372
373 * The parser in the script interface to parse-options in "git
374 rev-parse" has been updated to diagnose a bogus input correctly.
375 (merge f20b9c36d0 ow/rev-parse-parseopt-fix later to maint).
376
377 * The code that manages list-object-filter structure, used in partial
378 clones, leaked the instances, which has been plugged.
379 (merge 66eede4a37 jk/plug-list-object-filter-leaks later to maint).
380
381 * Fix another UI regression in the reimplemented "add -p".
382 (merge f6f0ee247f rs/add-p-worktree-mode-prompt-fix later to maint).
383
384 * "git fetch" over protocol v2 sent an incorrect ref prefix request
385 to the server and made "git pull" with configured fetch refspec
386 that does not cover the remote branch to merge with fail, which has
387 been corrected.
388 (merge 49ca2fba39 jk/proto-v2-ref-prefix-fix later to maint).
389
390 * Other code cleanup, docfix, build fix, etc.
391 (merge 77b9e85c0f vd/fix-perf-tests later to maint).
392 (merge 0682bc43f5 jk/test-crontab-fixes later to maint).
393 (merge b46dd1726c cc/doc-trailer-whitespace-rules later to maint).