]> git.ipfire.org Git - thirdparty/git.git/blob - Documentation/RelNotes/2.27.0.txt
t5411: add basic test cases for proc-receive hook
[thirdparty/git.git] / Documentation / RelNotes / 2.27.0.txt
1 Git 2.27 Release Notes
2 ======================
3
4 Updates since v2.26
5 -------------------
6
7 Backward compatibility notes
8
9 * When "git describe C" finds that commit C is pointed by a signed or
10 annotated tag, which records T as its tagname in the object, the
11 command gives T as its answer. Even if the user renames or moves
12 such a tag from its natural location in the "refs/tags/" hierarchy,
13 "git describe C" would still give T as the answer, but in such a
14 case "git show T^0" would no longer work as expected. There may be
15 nothing at "refs/tags/T" or even worse there may be a different tag
16 instead.
17
18 Starting from this version, "git describe" will always use the
19 "long" version, as if the "--long" option were given, when giving
20 its output based on such a misplaced tag to work around the problem.
21
22 * "git pull" issues a warning message until the pull.rebase
23 configuration variable is explicitly given, which some existing
24 users may find annoying---those who prefer not to rebase need to
25 set the variable to false to squelch the warning.
26
27
28 UI, Workflows & Features
29
30 * A handful of options to configure SSL when talking to proxies have
31 been added.
32
33 * Smudge/clean conversion filters are now given more information
34 (e.g. the object of the tree-ish in which the blob being converted
35 appears, in addition to its path, which has already been given).
36
37 * When "git describe C" finds an annotated tag with tagname A to be
38 the best name to explain commit C, and the tag is stored in a
39 "wrong" place in the refs/tags hierarchy, e.g. refs/tags/B, the
40 command gave a warning message but used A (not B) to describe C.
41 If C is exactly at the tag, the describe output would be "A", but
42 "git rev-parse A^0" would not be equal as "git rev-parse C^0". The
43 behavior of the command has been changed to use the "long" form
44 i.e. A-0-gOBJECTNAME, which is correctly interpreted by rev-parse.
45
46 * "git pull" learned to warn when no pull.rebase configuration
47 exists, and neither --[no-]rebase nor --ff-only is given (which
48 would result a merge).
49
50 * "git p4" learned four new hooks and also "--no-verify" option to
51 bypass them (and the existing "p4-pre-submit" hook).
52
53 * "git pull" shares many options with underlying "git fetch", but
54 some of them were not documented and some of those that would make
55 sense to pass down were not passed down.
56
57 * "git rebase" learned the "--no-gpg-sign" option to countermand
58 commit.gpgSign the user may have.
59
60 * The output from "git format-patch" uses RFC 2047 encoding for
61 non-ASCII letters on From: and Subject: headers, so that it can
62 directly be fed to e-mail programs. A new option has been added
63 to produce these headers in raw.
64
65 * "git log" learned "--show-pulls" that helps pathspec limited
66 history views; a merge commit that takes the whole change from a
67 side branch, which is normally omitted from the output, is shown
68 in addition to the commits that introduce real changes.
69
70 * The interactive input from various codepaths are consolidated and
71 any prompt possibly issued earlier are fflush()ed before we read.
72
73 * Allow "git rebase" to reapply all local commits, even if the may be
74 already in the upstream, without checking first.
75
76 * The 'pack.useSparse' configuration variable now defaults to 'true',
77 enabling an optimization that has been experimental since Git 2.21.
78
79 * "git rebase" happens to call some hooks meant for "checkout" and
80 "commit" by this was not a designed behaviour than historical
81 accident. This has been documented.
82
83 * "git merge" learns the "--autostash" option.
84
85 * "sparse-checkout" UI improvements.
86
87 * "git update-ref --stdin" learned a handful of new verbs to let the
88 user control ref update transactions more explicitly, which helps
89 as an ingredient to implement two-phase commit-style atomic
90 ref-updates across multiple repositories.
91
92 * "git commit-graph write" learned different ways to write out split
93 files.
94
95 * Introduce an extension to the commit-graph to make it efficient to
96 check for the paths that were modified at each commit using Bloom
97 filters.
98
99
100 Performance, Internal Implementation, Development Support etc.
101
102 * The advise API has been revamped to allow more systematic enumeration of
103 advice knobs in the future.
104
105 * SHA-256 transition continues.
106
107 * The code to interface with GnuPG has been refactored.
108
109 * "git stash" has kept an escape hatch to use the scripted version
110 for a few releases, which got stale. It has been removed.
111
112 * Enable tests that require GnuPG on Windows.
113
114 * Minor test usability improvement.
115
116 * Trace2 enhancement to allow logging of the environment variables.
117
118 * Test clean-up continues.
119
120 * Perf-test update.
121
122 * A Windows-specific test element has been made more robust against
123 misuse from both user's environment and programmer's errors.
124
125 * Various tests have been updated to work around issues found with
126 shell utilities that come with busybox etc.
127
128 * The config API made mixed uses of int and size_t types to represent
129 length of various pieces of text it parsed, which has been updated
130 to use the correct type (i.e. size_t) throughout.
131
132 * The "--decorate-refs" and "--decorate-refs-exclude" options "git
133 log" takes have learned a companion configuration variable
134 log.excludeDecoration that sits at the lowest priority in the
135 family.
136
137 * A new CI job to build and run test suite on linux with musl libc
138 has been added.
139
140 * Update the CI configuration to use GitHub Actions, retiring the one
141 based on Azure Pipelines.
142
143 * The directory traversal code had redundant recursive calls which
144 made its performance characteristics exponential with respect to
145 the depth of the tree, which was corrected.
146
147 * "git blame" learns to take advantage of the "changed-paths" Bloom
148 filter stored in the commit-graph file.
149
150 * The "bugreport" tool has been added.
151
152
153 Fixes since v2.26
154 -----------------
155
156 * The real_path() convenience function can easily be misused; with a
157 bit of code refactoring in the callers' side, its use has been
158 eliminated.
159 (merge 49d3c4b481 am/real-path-fix later to maint).
160
161 * Update "git p4" to work with Python 3.
162 (merge 6bb40ed20a yz/p4-py3 later to maint).
163
164 * The mechanism to prevent "git commit" from making an empty commit
165 or amending during an interrupted cherry-pick was broken during the
166 rewrite of "git rebase" in C, which has been corrected.
167 (merge 430b75f720 pw/advise-rebase-skip later to maint).
168
169 * Fix "git checkout --recurse-submodules" of a nested submodule
170 hierarchy.
171 (merge 846f34d351 pb/recurse-submodules-fix later to maint).
172
173 * The "--fork-point" mode of "git rebase" regressed when the command
174 was rewritten in C back in 2.20 era, which has been corrected.
175 (merge f08132f889 at/rebase-fork-point-regression-fix later to maint).
176
177 * The import-tars importer (in contrib/fast-import/) used to create
178 phony files at the top-level of the repository when the archive
179 contains global PAX headers, which made its own logic to detect and
180 omit the common leading directory ineffective, which has been
181 corrected.
182 (merge c839fcff65 js/import-tars-do-not-make-phony-files-from-pax-headers later to maint).
183
184 * Simplify the commit ancestry connectedness check in a partial clone
185 repository in which "promised" objects are assumed to be obtainable
186 lazily on-demand from promisor remote repositories.
187 (merge 2b98478c6f jt/connectivity-check-optim-in-partial-clone later to maint).
188
189 * The server-end of the v2 protocol to serve "git clone" and "git
190 fetch" was not prepared to see a delim packets at unexpected
191 places, which led to a crash.
192 (merge cacae4329f jk/harden-protocol-v2-delim-handling later to maint).
193
194 * When fed a midx that records no objects, some codepaths tried to
195 loop from 0 through (num_objects-1), which, due to integer
196 arithmetic wrapping around, made it nonsense operation with out of
197 bounds array accesses. The code has been corrected to reject such
198 an midx file.
199 (merge 796d61cdc0 dr/midx-avoid-int-underflow later to maint).
200
201 * Utitiles run via the run_command() API were not spawned correctly
202 on Cygwin, when the paths to them are given as a full path with
203 backslashes.
204 (merge 05ac8582bc ak/run-command-on-cygwin-fix later to maint).
205
206 * "git pull --rebase" tried to run a rebase even after noticing that
207 the pull results in a fast-forward and no rebase is needed nor
208 sensible, for the past few years due to a mistake nobody noticed.
209 (merge fbae70ddc6 en/pull-do-not-rebase-after-fast-forwarding later to maint).
210
211 * "git rebase" with the merge backend did not work well when the
212 rebase.abbreviateCommands configuration was set.
213 (merge de9f1d3ef4 ag/rebase-merge-allow-ff-under-abbrev-command later to maint).
214
215 * The logic to auto-follow tags by "git clone --single-branch" was
216 not careful to avoid lazy-fetching unnecessary tags, which has been
217 corrected.
218 (merge 167a575e2d jk/use-quick-lookup-in-clone-for-tag-following later to maint).
219
220 * "git rebase -i" did not leave the reflog entries correctly.
221 (merge 1f6965f994 en/sequencer-reflog-action later to maint).
222
223 * The more aggressive updates to remote-tracking branches we had for
224 the past 7 years or so were not reflected in the documentation,
225 which has been corrected.
226 (merge a44088435c pb/pull-fetch-doc later to maint).
227
228 * We've left the command line parsing of "git log :/a/b/" broken for
229 about a full year without anybody noticing, which has been
230 corrected.
231 (merge 0220461071 jc/missing-ref-store-fix later to maint).
232
233 * Misc fixes for Windows.
234 (merge 3efc128cd5 js/mingw-fixes later to maint).
235
236 * "git rebase" (again) learns to honor "--no-keep-empty", which lets
237 the user to discard commits that are empty from the beginning (as
238 opposed to the ones that become empty because of rebasing). The
239 interactive rebase also marks commits that are empty in the todo.
240 (merge 50ed76148a en/rebase-no-keep-empty later to maint).
241
242 * Parsing the host part out of URL for the credential helper has been corrected.
243 (merge 4c5971e18a jk/credential-parsing-end-of-host-in-URL later to maint).
244
245 * Document the recommended way to abort a failing test early (e.g. by
246 exiting a loop), which is to say "return 1".
247 (merge 7cc112dc95 jc/doc-test-leaving-early later to maint).
248
249 * The code that refreshes the last access and modified time of
250 on-disk packfiles and loose object files have been updated.
251 (merge 312cd76130 lr/freshen-file-fix later to maint).
252
253 * Validation of push certificate has been made more robust against
254 timing attacks.
255 (merge 719483e547 bc/constant-memequal later to maint).
256
257 * The custom hash function used by "git fast-import" has been
258 replaced with the one from hashmap.c, which gave us a nice
259 performance boost.
260 (merge d8410a816b jk/fast-import-use-hashmap later to maint).
261
262 * The "git submodule" command did not initialize a few variables it
263 internally uses and was affected by variable settings leaked from
264 the environment.
265 (merge 65d100c4dd lx/submodule-clear-variables later to maint).
266
267 * Raise the minimum required version of docbook-xsl package to 1.74,
268 as 1.74.0 was from late 2008, which is more than 10 years old, and
269 drop compatibility cruft from our documentation suite.
270 (merge 3c255ad660 ma/doc-discard-docbook-xsl-1.73 later to maint).
271
272 * "git log" learns "--[no-]mailmap" as a synonym to "--[no-]use-mailmap"
273 (merge 88acccda38 jc/log-no-mailmap later to maint).
274
275 * "git commit-graph write --expire-time=<timestamp>" did not use the
276 given timestamp correctly, which has been corrected.
277 (merge b09b785c78 ds/commit-graph-expiry-fix later to maint).
278
279 * Tests update to use "test-chmtime" instead of "touch -t".
280 (merge e892a56845 ds/t5319-touch-fix later to maint).
281
282 * "git diff" in a partial clone learned to avoid lazy loading blob
283 objects in more casese when they are not needed.
284 (merge 95acf11a3d jt/avoid-prefetch-when-able-in-diff later to maint).
285
286 * "git push --atomic" used to show failures for refs that weren't
287 even pushed, which has been corrected.
288 (merge dfe1b7f19c jx/atomic-push later to maint).
289
290 * Code in builtin/*, i.e. those can only be called from within
291 built-in subcommands, that implements bulk of a couple of
292 subcommands have been moved to libgit.a so that they could be used
293 by others.
294 (merge 9460fd48b5 dl/libify-a-few later to maint).
295
296 * Allowing the user to split a patch hunk while "git stash -p" does
297 not work well; a band-aid has been added to make this (partially)
298 work better.
299
300 * "git diff-tree --pretty --notes" used to hit an assertion failure,
301 as it forgot to initialize the notes subsystem.
302 (merge 5778b22b3d tb/diff-tree-with-notes later to maint).
303
304 * "git range-diff" fixes.
305 (merge 8d1675eb7f vd/range-diff-with-custom-pretty-format-fix later to maint).
306
307 * "git grep" did not quote a path with unusual character like other
308 commands (like "git diff", "git status") do, but did quote when run
309 from a subdirectory, both of which has been corrected.
310 (merge 45115d8490 mt/grep-cquote-path later to maint).
311
312 * GNU/Hurd is also among the ones that need the fopen() wrapper.
313 (merge 274a1328fb jc/gnu-hurd-lets-fread-read-dirs later to maint).
314
315 * Those fetching over protocol v2 from linux-next and other kernel
316 repositories are reporting that v2 often fetches way too much than
317 needed.
318 (merge 11c7f2a30b jn/demote-proto2-from-default later to maint).
319
320 * The upload-pack protocol v2 gave up too early before finding a
321 common ancestor, resulting in a wasteful fetch from a fork of a
322 project. This has been corrected to match the behaviour of v0
323 protocol.
324 (merge 2f0a093dd6 jt/v2-fetch-nego-fix later to maint).
325
326 * The build procedure did not use the libcurl library and its include
327 files correctly for a custom-built installation.
328 (merge 0573831950 jk/build-with-right-curl later to maint).
329
330 * Tighten "git mailinfo" to notice and error out when decoded result
331 contains NUL in it.
332 (merge 3919997447 dd/mailinfo-with-nul later to maint).
333
334 * Fix in-core inconsistency after fetching into a shallow repository
335 that broke the code to write out commit-graph.
336 (merge 37b9dcabfc tb/reset-shallow later to maint).
337
338 * The commit-graph code exhausted file descriptors easily when it
339 does not have to.
340 (merge c8828530b7 tb/commit-graph-fd-exhaustion-fix later to maint).
341
342 * The multi-pack-index left mmapped file descriptors open when it
343 does not have to.
344 (merge 6c7ff7cf7f ds/multi-pack-index later to maint).
345
346 * Recent update to Homebrew used by macOS folks breaks build by
347 moving gettext library and necessary headers.
348 (merge a0b3108618 ds/build-homebrew-gettext-fix later to maint).
349
350 * Incompatible options "--root" and "--fork-point" of "git rebase"
351 have been marked and documented as being incompatible.
352 (merge a35413c378 en/rebase-root-and-fork-point-are-incompatible later to maint).
353
354 * Error and verbose trace messages from "git push" did not redact
355 credential material embedded in URLs.
356 (merge d192fa5006 js/anonymise-push-url-in-errors later to maint).
357
358 * Other code cleanup, docfix, build fix, etc.
359 (merge 564956f358 jc/maintain-doc later to maint).
360 (merge 7422b2a0a1 sg/commit-slab-clarify-peek later to maint).
361 (merge 9c688735f6 rs/doc-passthru-fetch-options later to maint).
362 (merge 757c2ba3e2 en/oidset-uninclude-hashmap later to maint).
363 (merge 8312aa7d74 jc/config-tar later to maint).
364 (merge d00a5bdd50 ss/submodule-foreach-cb later to maint).
365 (merge 64d1022e14 ar/test-style-fixes later to maint).
366 (merge 4a465443a6 ds/doc-clone-filter later to maint).
367 (merge bb2dbe301b jk/t3419-drop-expensive-tests later to maint).
368 (merge d3507cc712 js/test-junit-finalization-fix later to maint).
369 (merge 2149b6748f bc/faq later to maint).
370 (merge 12dc0879f1 jk/test-cleanup later to maint).
371 (merge 344420bf0f pb/rebase-doc-typofix later to maint).
372 (merge 7cd54d37dc dl/wrapper-fix-indentation later to maint).
373 (merge 78725ebda9 jc/allow-strlen-substitution-in-shell-scripts later to maint).
374 (merge 2ecfcdecc6 jm/gitweb-fastcgi-utf8 later to maint).
375 (merge 0740d0a5d3 jk/oid-array-cleanups later to maint).
376 (merge a1aba0c95c js/t0007-typofix later to maint).
377 (merge 76ba7fa225 ma/config-doc-fix later to maint).
378 (merge 826f0c0df2 js/subtree-doc-update-to-asciidoctor-2 later to maint).
379 (merge 88eaf361e0 eb/mboxrd-doc later to maint).
380 (merge 051cc54941 tm/zsh-complete-switch-restore later to maint).
381 (merge 39102cf4fe ms/doc-revision-illustration-fix later to maint).
382 (merge 4d9378bfad eb/gitweb-more-trailers later to maint).
383 (merge bdccbf7047 mt/doc-worktree-ref later to maint).