]> git.ipfire.org Git - thirdparty/git.git/blob - Documentation/RelNotes/2.35.0.txt
Merge branch 'hn/test-ref-store-show-hash-algo'
[thirdparty/git.git] / Documentation / RelNotes / 2.35.0.txt
1 Git 2.35 Release Notes
2 ======================
3
4 Updates since Git 2.34
5 ----------------------
6
7 Backward compatibility warts
8
9 * "_" is now treated as any other URL-valid characters in an URL when
10 matching the per-URL configuration variable names.
11
12
13 UI, Workflows & Features
14
15 * "git status --porcelain=v2" now show the number of stash entries
16 with --show-stash like the normal output does.
17
18 * "git stash" learned the "--staged" option to stash away what has
19 been added to the index (and nothing else).
20
21 * "git var GIT_DEFAULT_BRANCH" is a way to see what name is used for
22 the newly created branch if "git init" is run.
23
24 * Various operating modes of "git reset" have been made to work
25 better with the sparse index.
26
27 * "git submodule deinit" for a submodule whose .git metadata
28 directory is embedded in its working tree refused to work, until
29 the submodule gets converted to use the "absorbed" form where the
30 metadata directory is stored in superproject, and a gitfile at the
31 top-level of the working tree of the submodule points at it. The
32 command is taught to convert such submodules to the absorbed form
33 as needed.
34
35 * The completion script (in contrib/) learns that the "--date"
36 option of commands from the "git log" family takes "human" and
37 "auto" as valid values.
38
39 * "Zealous diff3" style of merge conflict presentation has been added.
40
41 * The "git log --format=%(describe)" placeholder has been extended to
42 allow passing selected command-line options to the underlying "git
43 describe" command.
44
45 * "default" and "reset" have been added to our color palette.
46
47 * The cryptographic signing using ssh keys can specify literal keys
48 for keytypes whose name do not begin with the "ssh-" prefix by
49 using the "key::" prefix mechanism (e.g. "key::ecdsa-sha2-nistp256").
50
51 * "git fetch" without the "--update-head-ok" option ought to protect
52 a checked out branch from getting updated, to prevent the working
53 tree that checks it out to go out of sync. The code was written
54 before the use of "git worktree" got widespread, and only checked
55 the branch that was checked out in the current worktree, which has
56 been updated.
57
58 * "git name-rev" has been tweaked to give output that is shorter and
59 easier to understand.
60
61 * "git apply" has been taught to ignore a message without a patch
62 with the "--allow-empty" option. It also learned to honor the
63 "--quiet" option given from the command line.
64
65 * The "init" and "set" subcommands in "git sparse-checkout" have been
66 unified for a better user experience and performance.
67
68 * Many git commands that deal with working tree files try to remove a
69 directory that becomes empty (i.e. "git switch" from a branch that
70 has the directory to another branch that does not would attempt
71 remove all files in the directory and the directory itself). This
72 drops users into an unfamiliar situation if the command was run in
73 a subdirectory that becomes subject to removal due to the command.
74 The commands have been taught to keep an empty directory if it is
75 the directory they were started in to avoid surprising users.
76
77 * "git am" learns "--empty=(stop|drop|keep)" option to tweak what is
78 done to a piece of e-mail without a patch in it.
79
80 * The default merge message prepared by "git merge" records the name
81 of the current branch; the name can be overridden with a new option
82 to allow users to pretend a merge is made on a different branch.
83
84 Performance, Internal Implementation, Development Support etc.
85
86 * The use of errno as a means to carry the nature of error in the ref
87 API implementation has been reworked and reduced.
88
89 * Teach and encourage first-time contributors to this project to
90 state the base commit when they submit their topic.
91
92 * The command line complation for "git send-email" options have been
93 tweaked to make it easier to keep it in sync with the command itself.
94
95 * Ensure that the sparseness of the in-core index matches the
96 index.sparse configuration specified by the repository immediately
97 after the on-disk index file is read.
98
99 * Code clean-up to eventually allow information on remotes defined
100 for an arbitrary repository to be read.
101
102 * Build optimization.
103
104 * Tighten code for testing pack-bitmap.
105
106 * Weather balloon to break people with compilers that do not support
107 C99.
108
109 * The "reftable" backend for the refs API, without integrating into
110 the refs subsystem, has been added.
111
112 * More tests are marked as leak-free.
113
114 * The test framework learns to list unsatisfied test prerequisites,
115 and optionally error out when prerequisites that are expected to be
116 satisfied are not.
117
118 * The default setting for trace2 event nesting was too low to cause
119 test failures, which is worked around by bumping it up in the test
120 framework.
121
122 * Drop support for TravisCI and update test workflows at GitHub.
123
124 * Many tests that used to need GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
125 mechanism to force "git" to use 'master' as the default name for
126 the initial branch no longer need it; the use of the mechanism from
127 them have been removed.
128
129 * Allow running our tests while disabling fsync.
130
131 * Document the parameters given to the reflog entry iterator callback
132 functions.
133 (merge e6e94f34b2 jc/reflog-iterator-callback-doc later to maint).
134
135 * The test helper for refs subsystem learned to write bogus and/or
136 nonexistent object name to refs to simulate error situations we
137 want to test Git in.
138
139 * "diff --histogram" optimization.
140
141 * Weather balloon to find compilers that do not grok variable
142 declaration in the for() loop.
143
144 * diff and blame commands have been taught to work better with sparse
145 index.
146
147 * The chainlint test script linter in the test suite has been updated.
148
149 * The DEVELOPER=yes build uses -std=gnu99 now.
150
151 * "git format-patch" uses a single rev_info instance and then exits.
152 Mark the structure with UNLEAK() macro to squelch leak sanitizer.
153
154 * New interface into the tmp-objdir API to help in-core use of the
155 quarantine feature.
156
157 * Broken &&-chains in the test scripts have been corrected.
158
159 * The RCS keyword substitution in "git p4" used to be done assuming
160 that the contents are UTF-8 text, which can trigger decoding
161 errors. We now treat the contents as a bytestring for robustness
162 and correctness.
163
164 * The conditions to choose different definitions of the FLEX_ARRAY
165 macro for vendor compilers has been simplified to make it easier to
166 maintain.
167
168 * Correctness and performance update to "diff --color-moved" feature.
169
170 * "git upload-pack" (the other side of "git fetch") used a 8kB buffer
171 but most of its payload came on 64kB "packets". The buffer size
172 has been enlarged so that such a packet fits.
173
174
175 Fixes since v2.34
176 -----------------
177
178 * "git grep" looking in a blob that has non-UTF8 payload was
179 completely broken when linked with certain versions of PCREv2
180 library in the latest release.
181
182 * Other code cleanup, docfix, build fix, etc.
183
184 * "git pull" with any strategy when the other side is behind us
185 should succeed as it is a no-op, but doesn't.
186
187 * An earlier change in 2.34.0 caused JGit application (that abused
188 GIT_EDITOR mechanism when invoking "git config") to get stuck with
189 a SIGTTOU signal; it has been reverted.
190
191 * An earlier change that broke .gitignore matching has been reverted.
192
193 * Things like "git -c branch.sort=bogus branch new HEAD", i.e. the
194 operation modes of the "git branch" command that do not need the
195 sort key information, no longer errors out by seeing a bogus sort
196 key.
197 (merge 98e7ab6d42 jc/fix-ref-sorting-parse later to maint).
198
199 * The compatibility implementation for unsetenv(3) were written to
200 mimic ancient, non-POSIX, variant seen in an old glibc; it has been
201 changed to return an integer to match the more modern era.
202 (merge a38989bd5b jc/unsetenv-returns-an-int later to maint).
203
204 * The clean/smudge conversion code path has been prepared to better
205 work on platforms where ulong is narrower than size_t.
206 (merge 596b5e77c9 mc/clean-smudge-with-llp64 later to maint).
207
208 * Redact the path part of packfile URI that appears in the trace output.
209 (merge 0ba558ffb1 if/redact-packfile-uri later to maint).
210
211 * CI has been taught to catch some Unicode directional formatting
212 sequence that can be used in certain mischief.
213 (merge 0e7696c64d js/ci-no-directional-formatting later to maint).
214
215 * The "--date=format:<strftime>" gained a workaround for the lack of
216 system support for a non-local timezone to handle "%s" placeholder.
217 (merge 9b591b9403 jk/strbuf-addftime-seconds-since-epoch later to maint).
218
219 * The "merge" subcommand of "git jump" (in contrib/) silently ignored
220 pathspec and other parameters.
221 (merge 67ba13e5a4 jk/jump-merge-with-pathspec later to maint).
222
223 * The code to decode the length of packed object size has been
224 corrected.
225 (merge 34de5b8eac jt/pack-header-lshift-overflow later to maint).
226
227 * The advice message given by "git pull" when the user hasn't made a
228 choice between merge and rebase still said that the merge is the
229 default, which no longer is the case. This has been corrected.
230 (merge 71076d0edd ah/advice-pull-has-no-preference-between-rebase-and-merge later to maint).
231
232 * "git fetch", when received a bad packfile, can fail with SIGPIPE.
233 This wasn't wrong per-se, but we now detect the situation and fail
234 in a more predictable way.
235 (merge 2a4aed42ec jk/fetch-pack-avoid-sigpipe-to-index-pack later to maint).
236
237 * The function to cull a child process and determine the exit status
238 had two separate code paths for normal callers and callers in a
239 signal handler, and the latter did not yield correct value when the
240 child has caught a signal. The handling of the exit status has
241 been unified for these two code paths. An existing test with
242 flakiness has also been corrected.
243 (merge 5263e22cba jk/t7006-sigpipe-tests-fix later to maint).
244
245 * When a non-existent program is given as the pager, we tried to
246 reuse an uninitialized child_process structure and crashed, which
247 has been fixed.
248 (merge f917f57f40 em/missing-pager later to maint).
249
250 * The single-key-input mode in "git add -p" had some code to handle
251 keys that generate a sequence of input via ReadKey(), which did not
252 handle end-of-file correctly, which has been fixed.
253 (merge fc8a8126df cb/add-p-single-key-fix later to maint).
254
255 * "git rebase -x" added an unnecessary 'exec' instructions before
256 'noop', which has been corrected.
257 (merge cc9dcdee61 en/rebase-x-fix later to maint).
258
259 * When the "git push" command is killed while the receiving end is
260 trying to report what happened to the ref update proposals, the
261 latter used to die, due to SIGPIPE. The code now ignores SIGPIPE
262 to increase our chances to run the post-receive hook after it
263 happens.
264 (merge d34182b9e3 rj/receive-pack-avoid-sigpipe-during-status-reporting later to maint).
265
266 * "git worktree add" showed "Preparing worktree" message to the
267 standard output stream, but when it failed, the message from die()
268 went to the standard error stream. Depending on the order the
269 stdio streams are flushed at the program end, this resulted in
270 confusing output. It has been corrected by sending all the chatty
271 messages to the standard error stream.
272 (merge b50252484f es/worktree-chatty-to-stderr later to maint).
273
274 * Coding guideline document has been updated to clarify what goes to
275 standard error in our system.
276 (merge e258eb4800 es/doc-stdout-vs-stderr later to maint).
277
278 * The sparse-index/sparse-checkout feature had a bug in its use of
279 the matching code to determine which path is in or outside the
280 sparse checkout patterns.
281 (merge 8c5de0d265 ds/sparse-deep-pattern-checkout-fix later to maint).
282
283 * "git rebase -x" by mistake started exporting the GIT_DIR and
284 GIT_WORK_TREE environment variables when the command was rewritten
285 in C, which has been corrected.
286 (merge 434e0636db en/rebase-x-wo-git-dir-env later to maint).
287
288 * When "git log" implicitly enabled the "decoration" processing
289 without being explicitly asked with "--decorate" option, it failed
290 to read and honor the settings given by the "--decorate-refs"
291 option.
292
293 * "git fetch --set-upstream" did not check if there is a current
294 branch, leading to a segfault when it is run on a detached HEAD,
295 which has been corrected.
296 (merge 17baeaf82d ab/fetch-set-upstream-while-detached later to maint).
297
298 * Among some code paths that ask an yes/no question, only one place
299 gave a prompt that looked different from the others, which has been
300 updated to match what the others create.
301 (merge 0fc8ed154c km/help-prompt-fix later to maint).
302
303 * "git log --invert-grep --author=<name>" used to exclude commits
304 written by the given author, but now "--invert-grep" only affects
305 the matches made by the "--grep=<pattern>" option.
306 (merge 794c000267 rs/log-invert-grep-with-headers later to maint).
307
308 * "git grep --perl-regexp" failed to match UTF-8 characters with
309 wildcard when the pattern consists only of ASCII letters, which has
310 been corrected.
311 (merge 32e3e8bc55 rs/pcre2-utf later to maint).
312
313 * Other code cleanup, docfix, build fix, etc.
314 (merge 74db416c9c cw/protocol-v2-doc-fix later to maint).
315 (merge f9b2b6684d ja/doc-cleanup later to maint).
316 (merge 7d1b866778 jc/fix-first-object-walk later to maint).
317 (merge 538ac74604 js/trace2-avoid-recursive-errors later to maint).
318 (merge 152923b132 jk/t5319-midx-corruption-test-deflake later to maint).
319 (merge 9081a421a6 ab/checkout-branch-info-leakfix later to maint).
320 (merge 42c456ff81 rs/mergesort later to maint).
321 (merge ad506e6780 tl/midx-docfix later to maint).
322 (merge bf5b83fd8a hk/ci-checkwhitespace-commentfix later to maint).
323 (merge 49f1eb3b34 jk/refs-g11-workaround later to maint).
324 (merge 7d3fc7df70 jt/midx-doc-fix later to maint).
325 (merge 7b089120d9 hn/create-reflog-simplify later to maint).
326 (merge 9e12400da8 cb/mingw-gmtime-r later to maint).
327 (merge 0bf0de6cc7 tb/pack-revindex-on-disk-cleanup later to maint).
328 (merge 2c68f577fc ew/cbtree-remove-unused-and-broken-cb-unlink later to maint).
329 (merge eafd6e7e55 ab/die-with-bug later to maint).
330 (merge 91028f7659 jc/grep-patterntype-default-doc later to maint).
331 (merge 47ca93d071 ds/repack-fixlets later to maint).
332 (merge e6a9bc0c60 rs/t4202-invert-grep-test-fix later to maint).
333 (merge deb5407a42 gh/gpg-doc-markup-fix later to maint).
334 (merge 999bba3e0b rs/daemon-plug-leak later to maint).