]> git.ipfire.org Git - thirdparty/git.git/blob - Documentation/RelNotes/2.38.0.txt
Merge branch 'vd/fix-perf-tests'
[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
62 Performance, Internal Implementation, Development Support etc.
63
64 * Collection of what is referenced by objects in promisor packs have
65 been optimized to inspect these objects in the in-pack order.
66
67 * Introduce a helper to see if a branch is already being worked on
68 (hence should not be newly checked out in a working tree), which
69 performs much better than the existing find_shared_symref() to
70 replace many uses of the latter.
71
72 * Teach "git archive" to (optionally and then by default) avoid
73 spawning an external "gzip" process when creating ".tar.gz" (and
74 ".tgz") archives.
75
76 * Allow large objects read from a packstream to be streamed into a
77 loose object file straight, without having to keep it in-core as a
78 whole.
79
80 * Further preparation to turn git-submodule.sh into a builtin
81 continues.
82
83 * Apply Coccinelle rule to turn raw memmove() into MOVE_ARRAY() cpp
84 macro, which would improve maintainability and readability.
85
86 * Teach "make all" to build gitweb as well.
87
88 * Tweak tests so that they still work when the "git init" template
89 did not create .git/info directory.
90
91 * Add Coccinelle rules to detect the pattern of initializing and then
92 finalizing a structure without using it in between at all, which
93 happens after code restructuring and the compilers fail to
94 recognize as an unused variable.
95
96 * The code to convert between GPG trust level strings and internal
97 constants we use to represent them have been cleaned up.
98
99 * Support for libnettle as SHA256 implementation has been added.
100
101 * The way "git multi-pack" uses parse-options API has been improved.
102
103 * A coccinelle rule (in contrib/) to encourage use of COPY_ARRAY
104 macro has been improved.
105
106 * API tweak to make it easier to run fuzz testing on commit-graph parser.
107
108 * Omit fsync-related trace2 entries when their values are all zero.
109
110 * The codepath to write multi-pack index has been taught to release a
111 large chunk of memory that holds an array of objects in the packs,
112 as soon as it is done with the array, to reduce memory consumption.
113
114 * Add a level of redirection to array allocation API in xdiff part,
115 to make it easier to share with the libgit2 project.
116
117 * "git fetch" client logs the partial clone filter used in the trace2
118 output.
119
120 * The "bundle URI" design gets documented.
121
122 * The common ancestor negotiation exchange during a "git fetch"
123 session now leaves trace log.
124
125
126 Fixes since v2.37
127 -----------------
128
129 * Rewrite of "git add -i" in C that appeared in Git 2.25 didn't
130 correctly record a removed file to the index, which was fixed.
131
132 * Certain diff options are currently ignored when combined-diff is
133 shown; mark them as incompatible with the feature.
134
135 * Adjust technical/bitmap-format to be formatted by AsciiDoc, and
136 add some missing information to the documentation.
137
138 * Fixes for tests when the source directory has unusual characters in
139 its path, e.g. whitespaces, double-quotes, etc.
140
141 * "git mktree --missing" lazily fetched objects that are missing from
142 the local object store, which was totally unnecessary for the purpose
143 of creating the tree object(s) from its input.
144
145 * Give _() markings to fatal/warning/usage: labels that are shown in
146 front of these messages.
147
148 * References to commands-to-be-typed-literally in "git rebase"
149 documentation mark-up have been corrected.
150
151 * In a non-bare repository, the behavior of Git when the
152 core.worktree configuration variable points at a directory that has
153 a repository as its subdirectory, regressed in Git 2.27 days.
154
155 * Recent update to vimdiff layout code has been made more robust
156 against different end-user vim settings.
157
158 * Plug various memory leaks.
159 (merge ece3974ba6 ab/leakfix later to maint).
160
161 * Plug various memory leaks in test-tool commands.
162 (merge f40a693450 ab/test-tool-leakfix later to maint).
163
164 * Fixes a long-standing corner case bug around directory renames in
165 the merge-ort strategy.
166
167 * The resolve-undo information in the index was not protected against
168 GC, which has been corrected.
169
170 * A corner case bug where lazily fetching objects from a promisor
171 remote resulted in infinite recursion has been corrected.
172
173 * "git clone" from a repository with some ref whose HEAD is unborn
174 did not set the HEAD in the resulting repository correctly, which
175 has been corrected.
176
177 * An earlier attempt to plug leaks placed a clean-up label to jump to
178 at a bogus place, which as been corrected.
179
180 * Variable quoting fix in the vimdiff driver of "git mergetool"
181
182 * "git shortlog -n" relied on the underlying qsort() to be stable,
183 which shouldn't have. Fixed.
184
185 * A fix for a regression in test framework.
186
187 * mkstemp() emulation on Windows has been improved.
188
189 * Add missing documentation for "include" and "includeIf" features in
190 "git config" file format, which incidentally teaches the command
191 line completion to include them in its offerings.
192
193 * Avoid "white/black-list" in documentation and code comments.
194
195 * Workaround for a compiler warning against use of die() in
196 osx-keychain (in contrib/).
197
198 * Workaround for a false positive compiler warning.
199
200 * "git p4" working on UTF-16 files on Windows did not implement
201 CRLF-to-LF conversion correctly, which has been corrected.
202
203 * "git p4" did not handle non-ASCII client name well, which has been
204 corrected.
205
206 * "rerere-train" script (in contrib/) used to honor commit.gpgSign
207 while recreating the throw-away merges.
208
209 * "git checkout" miscounted the paths it updated, which has been
210 corrected.
211
212 * Fix for a bug that makes write-tree to fail to write out a
213 non-existent index as a tree, introduced in 2.37.
214
215 * There was a bug in the codepath to upgrade generation information
216 in commit-graph from v1 to v2 format, which has been corrected.
217
218 * Gitweb had legacy URL shortener that is specific to the way
219 projects hosted on kernel.org used to (but no longer) work, which
220 has been removed.
221 (merge 75707da4fa jr/gitweb-title-shortening later to maint).
222
223 * Fix build procedure for Windows that uses CMake so that it can pick
224 up the shell interpreter from local installation location.
225 (merge 476e54b1c6 ca/unignore-local-installation-on-windows later to maint).
226
227 * Conditionally allow building Python interpreter on Windows
228 (merge 2f0623aaa7 js/mingw-with-python later to maint).
229
230 * Fix to lstat() emulation on Windows.
231 (merge 82ba1191ff js/lstat-mingw-enotdir-fix later to maint).
232
233 * Older gcc with -Wall complains about the universal zero initializer
234 "struct s = { 0 };" idiom, which makes developers' lives
235 inconvenient (as -Werror is enabled by DEVELOPER=YesPlease). The
236 build procedure has been tweaked to help these compilers.
237 (merge b53a5f2416 jk/struct-zero-init-with-older-gcc later to maint).
238
239 * Plug memory leaks in the failure code path in the "merge-ort" merge
240 strategy backend.
241 (merge 1250dff32b js/ort-clean-up-after-failed-merge later to maint).
242
243 * "git symbolic-ref symref non..sen..se" is now diagnosed as an error.
244 (merge 04ede97211 lt/symbolic-ref-sanity later to maint).
245
246 * A follow-up fix to a fix for a regression in 2.36.
247 (merge 99ddc24672 ab/hooks-regression-fix later to maint).
248
249 * Avoid repeatedly running getconf to ask libc version in the test
250 suite, and instead just as it once per script.
251 (merge a6a58f7801 pw/use-glibc-tunable-for-malloc-optim later to maint).
252
253 * Platform-specific code that determines if a directory is OK to use
254 as a repository has been taught to report more details, especially
255 on Windows.
256 (merge 3f7207e2ea js/safe-directory-plus later to maint).
257
258 * "vimdiff3" regression fix.
259 (merge 34133d9658 fc/vimdiff-layout-vimdiff3-fix later to maint).
260
261 * "git fsck" reads mode from tree objects but canonicalizes the mode
262 before passing it to the logic to check object sanity, which has
263 hid broken tree objects from the checking logic. This has been
264 corrected, but to help exiting projects with broken tree objects
265 that they cannot fix retroactively, the severity of anomalies this
266 code detects has been demoted to "info" for now.
267 (merge 4dd3b045f5 jk/fsck-tree-mode-bits-fix later to maint).
268
269 * Fixes to sparse index compatibility work for "reset" and "checkout"
270 commands.
271 (merge b15207b8cf vd/sparse-reset-checkout-fixes later to maint).
272
273 * An earlier optimization discarded a tree-object buffer that is
274 still in use, which has been corrected.
275 (merge 1490d7d82d jk/is-promisor-object-keep-tree-in-use later to maint).
276
277 * Fix deadlocks between main Git process and subprocess spawned via
278 the pipe_command() API, that can kill "git add -p" that was
279 reimplemented in C recently.
280 (merge 716c1f649e jk/pipe-command-nonblock later to maint).
281
282 * Other code cleanup, docfix, build fix, etc.
283 (merge 94955d576b gc/git-reflog-doc-markup later to maint).
284 (merge efae7ce692 po/doc-add-renormalize later to maint).