Raw
1 Git v2.39 Release Notes
2 =======================
3
4 UI, Workflows & Features
5 ------------------------
6
7 * "git grep" learned to expand the sparse-index more lazily and on
8 demand in a sparse checkout.
9
10 * By default, use of fsmonitor on a repository on networked
11 filesystem is disabled. Add knobs to make it workable on macOS.
12
13 * After checking out a "branch" that is a symbolic-ref that points at
14 another branch, "git symbolic-ref HEAD" reports the underlying
15 branch, not the symbolic-ref the user gave checkout as argument.
16 The command learned the "--no-recurse" option to stop after
17 dereferencing a symbolic-ref only once.
18
19 * "git branch --edit-description @{-1}" is now a way to edit branch
20 description of the branch you were on before switching to the
21 current branch.
22
23 * "git merge-tree --stdin" is a new way to request a series of merges
24 and report the merge results.
25
26 * "git shortlog" learned to group by the "format" string.
27
28 * A new "--include-whitespace" option is added to "git patch-id", and
29 existing bugs in the internal patch-id logic that did not match
30 what "git patch-id" produces have been corrected.
31
32 * Enable gc.cruftpacks by default for those who opt into
33 feature.experimental setting.
34
35 * "git repack" learns to send cruft objects out of the way into
36 packfiles outside the repository.
37
38 * 'scalar reconfigure -a' is taught to automatically remove
39 scalar.repo entires which no longer exist.
40
41 * Redact headers from cURL's h2h3 module in GIT_CURL_VERBOSE and
42 others.
43
44 * 'git maintenance register' is taught to write configuration to an
45 arbitrary path, and 'git for-each-repo' is taught to expand tilde
46 characters in paths.
47
48 * When creating new notes, the template used to get a stray empty
49 newline, which has been removed.
50
51 * "git receive-pack" used to use all the local refs as the boundary for
52 checking connectivity of the data "git push" sent, but now it uses
53 only the refs that it advertised to the pusher. In a repository with
54 the .hideRefs configuration, this reduces the resources needed to
55 perform the check.
56
57 * With '--recurse-submodules=on-demand', all submodules are
58 recursively pushed.
59
60
61 Performance, Internal Implementation, Development Support etc.
62 --------------------------------------------------------------
63
64 * With a bit of header twiddling, use the native regexp library on
65 macOS instead of the compat/ one.
66
67 * Prepare for GNU [ef]grep that throw warning of their uses.
68
69 * Sources related to fuzz testing have been moved down to their own
70 directory.
71
72 * Most credential helpers ignored unknown entries in a credential
73 description, but a few died upon seeing them. The latter were
74 taught to ignore them, too
75
76 * "scalar unregister" in a repository that is already been
77 unregistered reported an error.
78
79 * Remove error detection from a function that fetches from promisor
80 remotes, and make it die when such a fetch fails to bring all the
81 requested objects, to give an early failure to various operations.
82
83 * Update CodingGuidelines to clarify what features to use and avoid
84 in C99.
85
86 * Avoid false-positive from LSan whose assumption may be broken with
87 higher optimization levels.
88
89 * Enable address and undefined sanitizer tasks at GitHub Actions CI.
90
91 * More UNUSED annotation to help using -Wunused option with the
92 compiler.
93 (merge 4b992f0a24 jk/unused-anno-more later to maint).
94
95 * Rewrite a deep recursion in the skipping negotiator to use a loop
96 with on-heap prio queue to avoid stack wastage.
97
98 * Add documentation for message IDs in fsck error messages.
99
100 * Define the logical elements of a "bundle list", data structure to
101 store them in-core, format to transfer them, and code to parse
102 them.
103
104 * The role the security mailing list plays in an embargoed release
105 has been documented.
106
107 * Two new facilities, "timer" and "counter", are introduced to the
108 trace2 API.
109
110 * Code simplification by using strvec_pushf() instead of building an
111 argument in a separate strbuf.
112
113 * Make sure generated dependency file is stably sorted to help
114 developers debugging their build issues.
115
116 * The glossary entries for "commit-graph file" and "reachability
117 bitmap" have been added.
118
119 * Various tests exercising the transfer.credentialsInUrl
120 configuration are taught to avoid making requests which require
121 resolving localhost to reduce CI-flakiness.
122
123 * A redundant diagnostic message is dropped from test_path_is_missing().
124
125 * Simplify the run-command API.
126
127 * Update the actions/github-script dependency in CI to avoid a
128 deprecation warning.
129
130 * Progress on being able to initialize a rev_info struct with a
131 macro.
132
133 * Add trace2 counters to the region to clear skip worktree bits in a
134 sparse checkout.
135
136 * Modernize test script to avoid "test -f" and friends.
137
138 * Avoid calling 'cache_tree_update()' when doing so would be
139 redundant.
140
141 * Update the credential-cache documentation to provide a more
142 realistic example.
143
144 * Makefile comments updates and reordering to clarify knobs used to
145 choose SHA implementations.
146
147 * A design document for sparse-checkout's future directions has been
148 added.
149
150 * Teach chainlint.pl to annotate the original test definition instead
151 of the token stream.
152
153 * "make coccicheck" is time consuming. It has been made to run more
154 incrementally.
155
156 * `parse_object()` has been hardened to check for the existence of a
157 suspected blob object.
158
159 * The build procedure has been adjusted to GNUmake version 4.4, which
160 made some changes to how pattern rule with multiple targets are
161 handled.
162
163
164 Fixes since v2.38
165 -----------------
166
167 * The codepath that reads from the index v4 had unaligned memory
168 accesses, which has been corrected.
169
170 * Fix messages incorrectly marked for translation.
171
172 * "git fsck" failed to release contents of tree objects already used
173 from the memory, which has been fixed.
174
175 * "git clone" did not like to see the "--bare" and the "--origin"
176 options used together without a good reason.
177
178 * "git remote rename" failed to rename a remote without fetch
179 refspec, which has been corrected.
180
181 * Documentation on various Boolean GIT_* environment variables have
182 been clarified.
183
184 * "git rebase -i" can mistakenly attempt to apply a fixup to a commit
185 itself, which has been corrected.
186
187 * "git multi-pack-index repack/expire" used to repack unreachable
188 cruft into a new pack, which have been corrected.
189
190 * In read-only repositories, "git merge-tree" tried to come up with a
191 merge result tree object, which it failed (which is not wrong) and
192 led to a segfault (which is bad), which has been corrected.
193
194 * Force C locale while running tests around httpd to make sure we can
195 find expected error messages in the log.
196
197 * Fix a logic in "mailinfo -b" that miscomputed the length of a
198 substring, which lead to an out-of-bounds access.
199
200 * The codepath to sign learned to report errors when it fails to read
201 from "ssh-keygen".
202
203 * Code clean-up that results in plugging a leak.
204
205 * "GIT_EDITOR=: git branch --edit-description" resulted in failure,
206 which has been corrected.
207
208 * The code to clean temporary object directories (used for
209 quarantine) tried to remove them inside its signal handler, which
210 was a no-no.
211
212 * Update comment in the Makefile about the RUNTIME_PREFIX config knob.
213
214 * Clarify that "the sentence after <area>: prefix does not begin with
215 a capital letter" rule applies only to the commit title.
216
217 * "git branch --edit-description" on an unborn branch misleadingly
218 said that no such branch exists, which has been corrected.
219
220 * Work around older clang that warns against C99 zero initialization
221 syntax for struct.
222
223 * Giving "--invert-grep" and "--all-match" without "--grep" to the
224 "git log" command resulted in an attempt to access grep pattern
225 expression structure that has not been allocated, which has been
226 corrected.
227 (merge db84376f98 ab/grep-simplify-extended-expression later to maint).
228
229 * "git diff rev^!" did not show combined diff to go to the rev from
230 its parents.
231 (merge a79c6b6081 rs/diff-caret-bang-with-parents later to maint).
232
233 * Allow configuration files in "protected" scopes to include other
234 configuration files.
235 (merge ecec57b3c9 gc/bare-repo-discovery later to maint).
236
237 * Give a bit more diversity to macOS CI by using sha1dc in one of the
238 jobs (the other one tests Apple Common Crypto).
239 (merge 1ad5c3df35 jc/ci-osx-with-sha1dc later to maint).
240
241 * A bugfix with tracing support in midx codepath
242 (merge e9c3839944 tb/midx-bitmap-selection-fix later to maint).
243
244 * When geometric repacking feature is in use together with the
245 --pack-kept-objects option, we lost packs marked with .keep files.
246 (merge 197443e80a tb/save-keep-pack-during-geometric-repack later to maint).
247
248 * Move a global variable added as a hack during regression fixes to
249 its proper place in the API.
250 (merge 0b0ab95f17 ab/run-hook-api-cleanup later to maint).
251
252 * Update to build procedure with VS using CMake/CTest.
253 (merge c858750b41 js/cmake-updates later to maint).
254
255 * The short-help text shown by "git cmd -h" and the synopsis text
256 shown at the beginning of "git help cmd" have been made more
257 consistent.
258
259 * When creating a multi-pack bitmap, remove per-pack bitmap files
260 unconditionally as they will never be consulted.
261 (merge 55d902cd61 tb/remove-unused-pack-bitmap later to maint).
262
263 * Fix a longstanding syntax error in Git.pm error codepath.
264
265 * "git diff --stat" etc. were invented back when everything was ASCII
266 and strlen() was a way to measure the display width of a string;
267 adjust them to compute the display width assuming UTF-8 pathnames.
268 (merge ce8529b2bb tb/diffstat-with-utf8-strwidth later to maint).
269
270 * "git branch --edit-description" can exit with status -1 which is
271 not a good practice; it learned to use 1 as everybody else instead.
272
273 * "git apply" limits its input to a bit less than 1 GiB.
274
275 * Merging a branch with directory renames into a branch that changes
276 the directory to a symlink was mishandled by the ort merge
277 strategy, which has been corrected.
278
279 * A bugfix to "git subtree" in its split and merge features.
280
281 * Fix some bugs in the reflog messages when rebasing and changes the
282 reflog messages of "rebase --apply" to match "rebase --merge" with
283 the aim of making the reflog easier to parse.
284
285 * "git rebase --keep-base" used to discard the commits that are
286 already cherry-picked to the upstream, even when "keep-base" meant
287 that the base, on top of which the history is being rebuilt, does
288 not yet include these cherry-picked commits. The --keep-base
289 option now implies --reapply-cherry-picks and --no-fork-point
290 options.
291
292 * The way "git repack" created temporary files when it received a
293 signal was prone to deadlocking, which has been corrected.
294
295 * Various tests exercising the transfer.credentialsInUrl
296 configuration are taught to avoid making requests which require
297 resolving localhost to reduce CI-flakiness.
298
299 * The adjust_shared_perm() helper function learned to refrain from
300 setting the "g+s" bit on directories when it is not necessary.
301
302 * "git archive" mistakenly complained twice about a missing
303 executable, which has been corrected.
304
305 * Fix a bug where `git branch -d` did not work on an orphaned HEAD.
306
307 * `git rebase --update-refs` would delete references when all
308 `update-ref` commands in the sequencer were removed, which has been
309 corrected.
310
311 * Fix a regression in the bisect-helper which mistakenly treats
312 arguments to the command given to 'git bisect run' as arguments to
313 the helper.
314
315 * Correct an error where `git rebase` would mistakenly use a branch or
316 tag named "refs/rewritten/xyz" when missing a rebase label.
317
318 * Assorted fixes of parsing end-user input as integers.
319 (merge 14770cf0de pw/config-int-parse-fixes later to maint).
320
321 * "git prune" may try to iterate over .git/objects/pack for trash
322 files to remove in it, and loudly fail when the directory is
323 missing, which is not necessary. The command has been taught to
324 ignore such a failure.
325 (merge 6974765352 ew/prune-with-missing-objects-pack later to maint).
326
327 * Add one more candidate directory that may house httpd modules while
328 running tests.
329 (merge 1c7dc23d41 es/locate-httpd-module-location-in-test later to maint).
330
331 * A handful of leaks in the line-log machinery have been plugged.
332
333 * The format of a line in /proc/cpuinfo that describes a CPU on s390x
334 looked different from everybody else, and the code in chainlint.pl
335 failed to parse it.
336 (merge 1f51b77f4f ah/chainlint-cpuinfo-parse-fix later to maint).
337
338 * Adjust the GitHub CI to newer ubuntu release.
339 (merge 0d3507f3e7 jx/ci-ubuntu-fix later to maint).
340
341 * Other code cleanup, docfix, build fix, etc.
342 (merge 413bc6d20a ds/cmd-main-reorder later to maint).
343 (merge 8d2863e4ed nw/t1002-cleanup later to maint).
344 (merge 7c2dc122f9 rs/list-objects-filter-leakfix later to maint).
345 (merge 288fcb1c94 zk/push-use-bitmaps later to maint).
346 (merge 42db324c0f km/merge-recursive-typofix later to maint).