Git fork
1Git v2.50 Release Notes
2=======================
3
4UI, Workflows & Features
5------------------------
6
7 * A post-processing filter for "diff --raw" output has been
8 introduced.
9
10 * "git repack" learned "--combine-cruft-below-size" option that
11 controls how cruft-packs are combined.
12
13 * TCP keepalive behaviour on http transports can now be configured by
14 calling cURL library.
15
16 * Incrementally updating multi-pack index files.
17
18 * "git reflog" learns "drop" subcommand, that discards the entire
19 reflog data for a ref.
20
21 * A new userdiff driver for ".ini" format configuration files has
22 been added.
23
24 * The job to coalesce loose objects into packfiles in "git
25 maintenance" now has configurable batch size.
26
27 * "git clone" still gave the message about the default branch name;
28 this message has been turned into an advice message that can be
29 turned off.
30
31 * "git rev-list" learns machine-parsable output format that delimits
32 each field with NUL.
33
34 * "git maintenance" learns a new task to expire reflog entries.
35
36 * Auth-related (and unrelated) error handling in send-email has been
37 made more robust.
38
39 * Updating multiple references have only been possible in an all-or-nothing
40 fashion with transactions, but it can be more efficient to batch
41 multiple updates even when some of them are allowed to fail in a
42 best-effort manner. A new "best effort batches of updates" mode
43 has been introduced.
44
45 * "git help --build-options" reports SHA-1 and SHA-256 backends used
46 in the build.
47
48 * "git cat-file --batch" and friends learned to allow "--filter=" to
49 omit certain objects, just like the transport layer does.
50
51 * "git blame --porcelain" mode now talks about unblamable lines and
52 lines that are blamed to an ignored commit.
53
54 * The build procedure installs bash (but not zsh) completion script.
55
56 * send-email has been updated to work better with Outlook's SMTP server.
57
58 * "git diff --minimal" used to give non-minimal output when its
59 optimization kicked in, which has been disabled.
60
61 * "git index-pack --fix-thin" used to abort to prevent a cycle in
62 delta chains from forming in a corner case even when there is no
63 such cycle.
64
65 * Make repository clean-up tasks that "gc" can do available to "git
66 maintenance" front-end.
67
68 * Bundle-URI feature did not use refs recorded in the bundle other
69 than normal branches as anchoring points to optimize the follow-up
70 fetch during "git clone"; now it is told to utilize all.
71
72 * The `send-email` documentation has been updated with OAuth2.0
73 related examples.
74
75 * Two of the "scalar" subcommands that add a repository that hasn't
76 been under "scalar"'s control are taught an option not to enable the
77 scheduled maintenance on it.
78
79 * The userdiff pattern for shell scripts has been updated to cope
80 with more bash-isms.
81
82 * "git merge-tree" learned an option to see if it resolves cleanly
83 without actually creating a result.
84
85 * The commit title in the "rebase -i" todo file are now prefixed with
86 '#', just like a merge commit being replayed.
87
88 * "git receive-pack" optionally learns not to care about connectivity
89 check, which can be useful when the repository arranges to ensure
90 connectivity by some other means.
91
92 * "git notes --help" documentation updates.
93
94
95Performance, Internal Implementation, Development Support etc.
96--------------------------------------------------------------
97
98 * A handful of built-in command implementations have been rewritten
99 to use the repository instance supplied by git.c:run_builtin(), its
100 caller.
101
102 * "git fsck" becomes more careful when checking the refs.
103
104 * "git fast-export | git fast-import" learns to deal with commit and
105 tag objects with embedded signatures a bit better. This is highly
106 experimental and the format of the data stream may change in the
107 future without compatibility guarantees.
108
109 * The code paths to check whether a refname X is available (by seeing
110 if another ref X/Y exists, etc.) have been optimized.
111
112 * First step of deprecating and removing merge-recursive.
113
114 * In protocol v2 where the refs advertisement is constrained, we try
115 to tell the server side not to limit the advertisement when there
116 is no specific need to, which has been the source of confusion and
117 recent bugs. Revamp the logic to simplify.
118
119 * Update meson based build procedure for breaking changes support.
120
121 * Enable -Wunreachable-code for developer builds.
122
123 * Ensure what we write in assert() does not have side effects,
124 and introduce ASSERT() macro to mark those that cannot be
125 mechanically checked for lack of side effects.
126
127 * Give more meaningful error return values from block writer layer of
128 the reftable ref-API backend.
129
130 * Make the code in reftable library less reliant on the service
131 routines it used to borrow from Git proper, to make it easier to
132 use by external users of the library.
133
134 * CI update.
135
136 * The object layer has been updated to take an explicit repository
137 instance as a parameter in more code paths.
138
139 * Some warnings from "-Wsign-compare" for builtin/rm.c have been
140 squelched.
141
142 * A few traditional unit tests have been rewritten to use the clar
143 framework.
144
145 * Some warnings from "-Wsign-compare" for pathspec.c have been
146 squelched.
147
148 * "make test" used to have a hard dependency on (basic) Perl; tests
149 have been rewritten help environment with NO_PERL test the build as
150 much as possible.
151
152 * Remove remnants of the recursive merge strategy backend, which was
153 superseded by the ort merge strategy.
154
155 * Optimize the code to dedup references recorded in a bundle file.
156
157 * Update parse-options API to catch mistakes to pass address of an
158 integral variable of a wrong type/size.
159
160 * Since a call to repo_config() can be called with repo set to NULL
161 these days, a command that is marked as RUN_SETUP in the builtin
162 command table does not have to check repo with NULL before making
163 the call.
164
165 * Overhaul of the reftable API.
166
167 * Reduce requirement for Perl in our documentation build and a few
168 scripts.
169
170 * The build procedure based on Meson learned to drive the
171 benchmarking tests.
172
173 * Code clean-up for meson-based build infrastructure.
174
175 * Add an equivalent to "make hdr-check" target to meson based builds.
176
177 * Further code clean-up in the object-store layer.
178
179 * Build performance fix.
180
181 * Teach "git send-email" to also consult `hostname -f` for mail
182 domain to compute the identity given to SMTP servers.
183
184 * The dependency on the_repository variable has been reduced from the
185 code paths in "git replay".
186
187 * Support to create a loose object file with unknown object type has
188 been dropped.
189
190 * The code path to access the "packed-refs" file while "fsck" is
191 taught to mmap the file, instead of reading the whole file into
192 memory.
193
194 * Assorted fixes for issues found with CodeQL.
195
196 * Remove the leftover hints to the test framework to mark tests that
197 do not pass the leak checker tests, as they should no longer be
198 needed.
199
200 * When a stale .midx file refers to .pack files that no longer exist,
201 we ended up checking for these non-existent files repeatedly, which
202 has been optimized by memoizing the non-existence.
203
204 * Build settings have been improved for BSD based systems.
205
206 * Newer version of libcURL detected curl_easy_setopt() calls we made
207 with platform-natural "int" when we should have used "long", which
208 all have been corrected.
209
210 * Tests that compare $HOME and $(pwd), which should be the same
211 directory unless the tests chdir's around, would fail when the user
212 enters the test directory via symbolic links, which has been
213 corrected.
214
215
216Fixes since v2.49
217-----------------
218
219 * The refname exclusion logic in the packed-ref backend has been
220 broken for some time, which confused upload-pack to advertise
221 different set of refs. This has been corrected.
222 (merge 10e8a9352b tb/refs-exclude-fixes later to maint).
223
224 * The merge-recursive and merge-ort machinery crashed in corner cases
225 when certain renames are involved.
226 (merge 3adba40858 en/merge-process-renames-crash-fix later to maint).
227
228 * Certain "cruft" objects would have never been refreshed when there
229 are multiple cruft packs in the repository, which has been
230 corrected.
231 (merge 08f612ba70 tb/multi-cruft-pack-refresh-fix later to maint).
232
233 * The xdiff code on 32-bit platform misbehaved when an insanely large
234 context size is given, which has been corrected.
235 (merge d39e28e68c rs/xdiff-context-length-fix later to maint).
236
237 * GitHub Actions CI switched on a CI/CD variable that does not exist
238 when choosing what packages to install etc., which has been
239 corrected.
240 (merge ee89f7c79d kn/ci-meson-check-build-docs-fix later to maint).
241
242 * Using "git name-rev --stdin" as an example, improve the framework to
243 prepare tests to pretend to be in the future where the breaking
244 changes have already happened.
245 (merge de3dec1187 jc/name-rev-stdin later to maint).
246
247 * An earlier code refactoring of the hash machinery missed a few
248 required calls to init_fn.
249 (merge d39f04b638 jh/hash-init-fixes later to maint).
250
251 * A documentation page was left out from formatting and installation,
252 which has been corrected.
253 (merge ae85116f18 pw/build-breaking-changes-doc later to maint).
254
255 * The bash command line completion script (in contrib/) has been
256 updated to cope with remote repository nicknames with slashes in
257 them.
258 (merge 778d2f1760 dm/completion-remote-names-fix later to maint).
259
260 * "Dubious ownership" checks on Windows has been tightened up.
261 (merge 5bb88e89ef js/mingw-admins-are-special later to maint).
262
263 * Layout configuration in vimdiff backend didn't work as advertised,
264 which has been corrected.
265 (merge 93bab2d04b fr/vimdiff-layout-fixes later to maint).
266
267 * Fix our use of zlib corner cases.
268 (merge 1cb2f293f5 jk/zlib-inflate-fixes later to maint).
269
270 * Fix lockfile contention in reftable code on Windows.
271 (merge 0a3dceabf1 ps/mingw-creat-excl-fix later to maint).
272
273 * "git-merge-file" documentation source, which has lines that look
274 like conflict markers, lacked custom conflict marker size defined,
275 which has been corrected..
276 (merge d3b5832381 pw/custom-conflict-marker-size-for-merge-related-docs later to maint).
277
278 * Squelch false-positive from sparse.
279 (merge da87b58014 dd/sparse-glibc-workaround later to maint).
280
281 * Adjust to the deprecation of use of Ubuntu 20.04 GitHub Actions CI.
282 (merge 832d9f6d0b js/ci-github-update-ubuntu later to maint).
283
284 * Work around CI breakage due to fedora base image getting updated.
285 (merge 8a471a663b js/ci-fedora-gawk later to maint).
286
287 * A ref transaction corner case fix.
288 (merge b9fadeead7 jt/ref-transaction-abort-fix later to maint).
289
290 * Random build fixes.
291 (merge 85e1d6819f ps/misc-build-fixes later to maint).
292
293 * "git fetch [<remote>]" with only the configured fetch refspec
294 should be the only thing to update refs/remotes/<remote>/HEAD,
295 but the code was overly eager to do so in other cases.
296
297 * Incorrect sorting of refs with bytes with high-bit set on platforms
298 with signed char led to a BUG, which has been corrected.
299
300 * "make perf" fixes.
301 (merge 1665f12fa0 pb/perf-test-fixes later to maint).
302
303 * Doc mark-up updates.
304 (merge 5a5565ec44 ja/doc-reset-mv-rm-markup-updates later to maint).
305
306 * Work around false positive from CodeQL checker.
307 (merge 0f558141ed js/range-check-codeql-workaround later to maint).
308
309 * "git log --{left,right}-only A...B", when A and B does not share
310 any common ancestor, now behaves as expected.
311 (merge e7ef4be7c2 mh/left-right-limited later to maint).
312
313 * Document the convention to disable hooks altogether by setting the
314 hooksPath configuration variable to /dev/null.
315 (merge 1b2eee94f1 ds/doc-disable-hooks later to maint).
316
317 * Make sure outage of third-party sites that supply P4, Git-LFS, and
318 JGit we use for testing would not prevent our CI jobs from running
319 at all.
320
321 * Various build tweaks, including CSPRNG selection on some platforms.
322 (merge cdda67de03 rj/build-tweaks later to maint).
323
324 * Developer support fix..
325 (merge 32b74b9809 js/git-perf-env-override later to maint).
326
327 * Fix for scheduled maintenance tasks on platforms using launchctl.
328 (merge eb2d7beb0e jh/gc-launchctl-schedule-fix later to maint).
329
330 * Update to arm64 Windows port (part of which had been reverted as it
331 broke builds for existing platforms, which may need to be redone in
332 future releases).
333
334 * hashmap API clean-up to ensure hashmap_clear() leaves a cleared map
335 in a reusable state.
336 (merge 9481877de3 en/hashmap-clear-fix later to maint).
337
338 * "git mv a a/b dst" would ask to move the directory 'a' itself, as
339 well as its contents, in a single destination directory, which is
340 a contradicting request that is impossible to satisfy. This case is
341 now detected and the command errors out.
342 (merge 974f0d4664 ps/mv-contradiction-fix later to maint).
343
344 * Further refinement on CI messages when an optional external
345 software is unavailable (e.g. due to third-party service outage).
346 (merge 956acbefbd jc/ci-skip-unavailable-external-software later to maint).
347
348 * Test result aggregation did not work in Meson based CI jobs.
349 (merge bd38ed5be1 ps/ci-test-aggreg-fix-for-meson later to maint).
350
351 * Code clean-up around stale CI elements and building with Visual Studio.
352 (merge a7b060f67f js/ci-buildsystems-cleanup later to maint).
353
354 * "git add 'f?o'" did not add 'foo' if 'f?o', an unusual pathname,
355 also existed on the working tree, which has been corrected.
356 (merge ec727e189c kj/glob-path-with-special-char later to maint).
357
358 * The fallback implementation of open_nofollow() depended on
359 open("symlink", O_NOFOLLOW) to set errno to ELOOP, but a few BSD
360 derived systems use different errno, which has been worked around.
361 (merge f47bcc3413 cf/wrapper-bsd-eloop later to maint).
362
363 * Use-after-free fix in the sequencer.
364 (merge 5dbaec628d pw/sequencer-reflog-use-after-free later to maint).
365
366 * win+Meson CI pipeline, unlike other pipelines for Windows,
367 used to build artifacts in developer mode, which has been changed to
368 build them in release mode for consistency.
369 (merge 184abdcf05 js/ci-build-win-in-release-mode later to maint).
370
371 * CI settings at GitLab has been updated to run MSVC based Meson job
372 automatically (as opposed to be done only upon manual request).
373 (merge 6389579b2f ps/ci-gitlab-enable-msvc-meson-job later to maint).
374
375 * "git apply" and "git add -i/-p" code paths no longer unnecessarily
376 expand sparse-index while working.
377 (merge ecf9ba20e3 ds/sparse-apply-add-p later to maint).
378
379 * Avoid adding directory path to a sparse-index tree entries to the
380 name-hash, since they would bloat the hashtable without anybody
381 querying for them. This was done already for a single threaded
382 part of the code, but now the multi-threaded code also does the
383 same.
384 (merge 2e60aabc75 am/sparse-index-name-hash-fix later to maint).
385
386 * Recent versions of Perl started warning against "! A =~ /pattern/"
387 which does not negate the result of the matching. As it turns out
388 that the problematic function is not even called, it was removed.
389 (merge 67cae845d2 op/cvsserver-perl-warning later to maint).
390
391 * "git apply --index/--cached" when applying a deletion patch in
392 reverse failed to give the mode bits of the path "removed" by the
393 patch to the file it creates, which has been corrected.
394
395 * "git verify-refs" errored out in a repository in which
396 linked worktrees were prepared with Git 2.43 or lower.
397 (merge d5b3c38b8a sj/ref-contents-check-fix later to maint).
398
399 * Update total_ram() function on BSD variants.
400
401 * Update online_cpus() function on BSD variants.
402
403 * Revert a botched bswap.h change that broke ntohll() functions on
404 big-endian systems with __builtin_bswap32/64().
405
406 * Fixes for GitHub Actions Coverity job.
407 (merge 3cc4fc1ebd js/github-ci-win-coverity-fix later to maint).
408
409 * Other code cleanup, docfix, build fix, etc.
410 (merge 227c4f33a0 ja/doc-block-delimiter-markup-fix later to maint).
411 (merge 2bfd3b3685 ab/decorate-code-cleanup later to maint).
412 (merge 5337daddc7 am/dir-dedup-decl-of-repository later to maint).
413 (merge 554051d691 en/diff-rename-follow-fix later to maint).
414 (merge a18c18b470 en/random-cleanups later to maint).
415 (merge 5af21c9acb hj/doc-rev-list-ancestry-fix later to maint).
416 (merge 26d76ca284 aj/doc-restore-p-update later to maint).
417 (merge 2c0dcb9754 cc/lop-remote later to maint).
418 (merge 7b399322a2 ja/doc-branch-markup later to maint).
419 (merge ee434e1807 pw/doc-pack-refs-markup-fix later to maint).
420 (merge c000918eb7 tb/bitamp-typofix later to maint).
421 (merge fa8cd29676 js/imap-send-peer-cert-verify later to maint).
422 (merge 98b423bc1c rs/clear-commit-marks-simplify later to maint).
423 (merge 133d065dd6 ta/bulk-checkin-signed-compare-false-warning-fix later to maint).
424 (merge d2827dc31e es/meson-build-skip-coccinelle later to maint).
425 (merge ee8edb7156 dk/vimdiff-doc-fix later to maint).
426 (merge 107d889303 md/t1403-path-is-file later to maint).
427 (merge abd4192b07 js/comma-semicolon-confusion later to maint).
428 (merge 27b7264206 ab/environment-clean-header later to maint).
429 (merge ff4a749354 as/typofix-in-env-h-header later to maint).
430 (merge 86eef3541e az/tighten-string-array-constness later to maint).
431 (merge 25292c301d lo/remove-log-reencode-from-rev-info later to maint).
432 (merge 1aa50636fd jk/p5332-testfix later to maint).
433 (merge 42cf4ac552 ps/ci-resurrect-p4-on-github later to maint).
434 (merge 104add8368 js/diff-codeql-false-positive-workaround later to maint).
435 (merge f62977b93c en/get-tree-entry-doc later to maint).
436 (merge e5dd0a05ed ly/am-split-stgit-leakfix later to maint).
437 (merge bac220e154 rc/t1001-test-path-is-file later to maint).
438 (merge 91db6c735d ly/reftable-writer-leakfix later to maint).
439 (merge 20e4e9ad0b jc/doc-synopsis-option-markup later to maint).
440 (merge cddcee7f64 es/meson-configure-build-options-fix later to maint).
441 (merge cea9f55f00 wk/sparse-checkout-doc-fix later to maint).