1 Git v2.43 Release Notes
2 =======================
4 Backward Compatibility Notes
6 * The "--rfc" option of "git format-patch" used to be a valid way to
7 override an earlier "--subject-prefix=<something>" on the command
8 line and replace it with "[RFC PATCH]", but from this release, it
9 merely prefixes the string "RFC " in front of the given subject
10 prefix. If you are negatively affected by this change, please use
11 "--subject-prefix=PATCH --rfc" as a replacement.
13 * "git rev-list --stdin" learned to take non-revisions (like "--not")
14 recently from the standard input, but the way such a "--not" was
15 handled was quite confusing, which has been rethought. The updated
16 rule is that "--not" given from the command line only affects revs
17 given from the command line that comes but not revs read from the
18 standard input, and "--not" read from the standard input affects
19 revs given from the standard input and not revs given from the
22 UI, Workflows & Features
24 * A message written in olden time prevented a branch from getting
25 checked out saying it is already checked out elsewhere, but these
26 days, we treat a branch that is being bisected or rebased just like
27 a branch that is checked out and protect it. Rephrase the message
28 to say that the branch is in use.
30 * Hourly and other schedule of "git maintenance" jobs are randomly
33 * "git cmd -h" learned to signal which options can be negated by
34 listing such options like "--[no-]opt".
36 * The way authentication related data other than passwords (e.g.
37 oath token and password expiration data) are stored in libsecret
38 keyrings has been rethought.
40 * Update two credential helpers to correctly match which credential
41 to erase; they dropped not the ones with stale password.
45 * "git format-patch" learns a way to feed cover letter description,
46 that (1) can be used on detached HEAD where there is no branch
47 description available, and (2) also can override the branch
48 description if there is one.
50 * Use of --max-pack-size to allow multiple packfiles to be created is
51 now supported even when we are sending unreachable objects to cruft
54 * "git format-patch --rfc --subject-prefix=<foo>" used to ignore the
55 "--subject-prefix" option and used "[RFC PATCH]"; now we will add
56 "RFC" prefix to whatever subject prefix is specified.
58 * "git log --format" has been taught the %(decorate) placeholder.
60 * The default log message created by "git revert", when reverting a
61 commit that records a revert, has been tweaked, to encourage people
62 describe complex "revert of revert of revert" situation better in
65 * The command-line completion support (in contrib/) learned to
66 complete "git commit --trailer=" for possible trailer keys.
68 * "git update-index" learns "--show-index-version" to inspect
69 the index format version used by the on-disk index file.
71 * "git diff" learned diff.statNameWidth configuration variable, to
72 give the default width for the name part in the "--stat" output.
74 * "git range-diff --notes=foo" compared "log --notes=foo --notes" of
75 the two ranges, instead of using just the specified notes tree.
77 * The command line completion script (in contrib/) can be told to
78 complete aliases by including ": git <cmd> ;" in the alias to tell
79 it that the alias should be completed similar to how "git <cmd>" is
80 completed. The parsing code for the alias as been loosened to
81 allow ';' without an extra space before it.
83 * "git for-each-ref" and friends learned to apply mailmap to
84 authorname and other fields.
86 * "git repack" machinery learns to pay attention to the "--filter="
89 * "git repack" learned "--max-cruft-size" to prevent cruft packs from
90 growing without bounds.
92 * "git merge-tree" learned to take strategy backend specific options
93 via the "-X" option, like "git merge" does.
95 * "git log" and friends learned "--dd" that is a short-hand for
96 "--diff-merges=first-parent -p".
98 * The attribute subsystem learned to honor `attr.tree` configuration
99 that specifies which tree to read the .gitattributes files from.
102 Performance, Internal Implementation, Development Support etc.
104 * "git check-attr" has been taught to work better with sparse-index.
106 * It may be tempting to leave the help text NULL for a command line
107 option that is either hidden or too obvious, but "git subcmd -h"
108 and "git subcmd --help-all" would have segfaulted if done so. Now
109 the help text is optional.
111 * Tests that are known to pass with LSan are now marked as such.
113 * Flaky "git p4" tests, as well as "git svn" tests, are now skipped
114 in the (rather expensive) sanitizer CI job.
116 * Tests with LSan from time to time seem to emit harmless message
117 that makes our tests unnecessarily flaky; we work it around by
118 filtering the uninteresting output.
120 * Unused parameters to functions are marked as such, and/or removed,
121 in order to bring us closer to -Wunused-parameter clean.
123 * The code to keep track of existing packs in the repository while
124 repacking has been refactored.
126 * The "streaming" interface used for bulk-checkin codepath has been
127 narrowed to take only blob objects for now, with no real loss of
130 * GitHub CI workflow has learned to trigger Coverity check.
132 * Test coverage for trailers has been improved.
134 * The code to iterate over loose references have been optimized to
135 reduce the number of lstat() system calls.
136 (merge 2cdb796101 vd/loose-ref-iteration-optimization later to maint).
138 * The codepaths that read "chunk" formatted files have been corrected
139 to pay attention to the chunk size and notice broken files.
145 * Overly long label names used in the sequencer machinery are now
146 chopped to fit under filesystem limitation.
150 * Tweak GitHub Actions CI so that pushing the same commit to multiple
151 branch tips at the same time will not waste building and testing
152 the same thing twice.
154 * The commit-graph verification code that detects mixture of zero and
155 non-zero generation numbers has been updated.
157 * "git diff -w --exit-code" with various options did not work
158 correctly, which is being addressed.
160 * transfer.unpackLimit ought to be used as a fallback, but overrode
161 fetch.unpackLimit and receive.unpackLimit instead.
163 * The use of API between two calls to require_clean_work_tree() from
164 the sequencer code has been cleaned up for consistency.
166 * "git diff --no-such-option" and other corner cases around the exit
167 status of the "diff" command has been corrected.
169 * "git for-each-ref --sort='contents:size'" sorts the refs according
170 to size numerically, giving a ref that points at a blob twelve-byte
171 (12) long before showing a blob hundred-byte (100) long.
173 * We now limit depth of the tree objects and maximum length of
174 pathnames recorded in tree objects.
175 (merge 4d5693ba05 jk/tree-name-and-depth-limit later to maint).
177 * Various fixes to the behavior of "rebase -i" when the command got
178 interrupted by conflicting changes.
180 * References from description of the `--patch` option in various
181 manual pages have been simplified and improved.
183 * "git grep -e A --no-or -e B" is accepted, even though the negation
184 of "or" did not mean anything, which has been tightened.
186 * The completion script (in contrib/) has been taught to treat the
187 "-t" option to "git checkout" and "git switch" just like the
188 "--track" option, to complete remote-tracking branches.
190 * "git diff --no-index -R <(one) <(two)" did not work correctly,
191 which has been corrected.
193 * Update "git maintenance" timers' implementation based on systemd
194 timers to work with WSL.
196 * "git diff --cached" codepath did not fill the necessary stat
197 information for a file when fsmonitor knows it is clean and ended
198 up behaving as if it is not clean, which has been corrected.
200 * Clarify how "alias.foo = : git cmd ; aliased-command-string" should
201 be spelled with necessary whitespaces around punctuation marks to
204 * HTTP Header redaction code has been adjusted for a newer version of
205 cURL library that shows its traces differently from earlier
208 * An error message given by "git send-email" when given a malformed
209 address did not give correct information, which has been corrected.
211 * UBSan options were not propagated through the test framework to git
212 run via the httpd, unlike ASan options, which has been corrected.
214 * "checkout --merge -- path" and "update-index --unresolve path" did
215 not resurrect conflicted state that was resolved to remove path,
217 (merge 5bdedac3c7 jc/unresolve-removal later to maint).
219 * The display width table for unicode characters has been updated for
221 (merge 872976c37e bb/unicode-width-table-15 later to maint).
223 * Update mailmap entry for Derrick.
224 (merge 6e5457d8c7 ds/mailmap-entry-update later to maint).
226 * In .gitmodules files, submodules are keyed by their names, and the
227 path to the submodule whose name is $name is specified by the
228 submodule.$name.path variable. There were a few codepaths that
229 mixed the name and path up when consulting the submodule database,
230 which have been corrected. It took long for these bugs to be found
231 as the name of a submodule initially is the same as its path, and
232 the problem does not surface until it is moved to a different path,
233 which apparently happens very rarely.
235 * "git diff --merge-base X other args..." insisted that X must be a
236 commit and errored out when given an annotated tag that peels to a
237 commit, but we only need it to be a committish. This has been
239 (merge 4adceb5a29 ar/diff-index-merge-base-fix later to maint).
241 * Fix "git merge-tree" to stop segfaulting when the --attr-source
243 (merge e95bafc52f jc/merge-ort-attr-index-fix later to maint).
245 * Unlike "git log --pretty=%D", "git log --pretty="%(decorate)" did
246 not auto-initialize the decoration subsystem, which has been
249 * Feeding "git stash store" with a random commit that was not created
250 by "git stash create" now errors out.
251 (merge d9b6634589 jc/fail-stash-to-store-non-stash later to maint).
253 * The index file has room only for lower 32-bit of the file size in
254 the cached stat information, which means cached stat information
255 will have 0 in its sd_size member for a file whose size is multiple
256 of 4GiB. This is mistaken for a racily clean path. Avoid it by
257 storing a bogus sd_size value instead for such files.
258 (merge 5143ac07b1 bc/racy-4gb-files later to maint).
260 * "git p4" tried to store symlinks to LFS when told, but has been
261 fixed not to do so, because it does not make sense.
262 (merge 10c89a02b0 mm/p4-symlink-with-lfs later to maint).
264 * The codepath to handle recipient addresses `git send-email
265 --compose` learns from the user was completely broken, which has
267 (merge 3ec6167567 jk/send-email-fix-addresses-from-composed-messages later to maint).
269 * "cd sub && git grep -f patterns" tried to read "patterns" file at
270 the top level of the working tree; it has been corrected to read
271 "sub/patterns" instead.
274 * "git reflog expire --single-worktree" has been broken for the past
275 20 months or so, which has been corrected.
277 * "git send-email" did not have certain pieces of data computed yet
278 when it tried to validate the outging messages and its recipient
279 addresses, which has been sorted out.
281 * "git bugreport" learned to complain when it received a command line
282 argument that it will not use.
284 * Other code cleanup, docfix, build fix, etc.
285 (merge c2c349a15c xz/commit-title-soft-limit-doc later to maint).