summaryrefslogtreecommitdiff
path: root/Documentation/RelNotes/2.27.0.txt
blob: 680dfe661aed43221a48069c5294fc698bfd643e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
Git 2.27 Release Notes
======================

Updates since v2.26
-------------------

Backward compatibility notes

 * When "git describe C" finds that commit C is pointed by a signed or
   annotated tag, which records T as its tagname in the object, the
   command gives T as its answer.  Even if the user renames or moves
   such a tag from its natural location in the "refs/tags/" hierarchy,
   "git describe C" would still give T as the answer, but in such a
   case "git show T^0" would no longer work as expected.  There may be
   nothing at "refs/tags/T" or even worse there may be a different tag
   instead.

   Starting from this version, "git describe" will always use the
   "long" version, as if the "--long" option were given, when giving
   its output based on such a misplaced tag to work around the problem.

 * "git pull" issues a warning message until the pull.rebase
   configuration variable is explicitly given, which some existing
   users may find annoying---those who prefer not to rebase need to
   set the variable to false to squelch the warning.


UI, Workflows & Features

 * A handful of options to configure SSL when talking to proxies have
   been added.

 * Smudge/clean conversion filters are now given more information
   (e.g. the object of the tree-ish in which the blob being converted
   appears, in addition to its path, which has already been given).

 * When "git describe C" finds an annotated tag with tagname A to be
   the best name to explain commit C, and the tag is stored in a
   "wrong" place in the refs/tags hierarchy, e.g. refs/tags/B, the
   command gave a warning message but used A (not B) to describe C.
   If C is exactly at the tag, the describe output would be "A", but
   "git rev-parse A^0" would not be equal as "git rev-parse C^0".  The
   behavior of the command has been changed to use the "long" form
   i.e. A-0-gOBJECTNAME, which is correctly interpreted by rev-parse.

 * "git pull" learned to warn when no pull.rebase configuration
   exists, and neither --[no-]rebase nor --ff-only is given (which
   would result a merge).

 * "git p4" learned four new hooks and also "--no-verify" option to
   bypass them (and the existing "p4-pre-submit" hook).

 * "git pull" shares many options with underlying "git fetch", but
   some of them were not documented and some of those that would make
   sense to pass down were not passed down.

 * "git rebase" learned the "--no-gpg-sign" option to countermand
   commit.gpgSign the user may have.

 * The output from "git format-patch" uses RFC 2047 encoding for
   non-ASCII letters on From: and Subject: headers, so that it can
   directly be fed to e-mail programs.  A new option has been added
   to produce these headers in raw.

 * "git log" learned "--show-pulls" that helps pathspec limited
   history views; a merge commit that takes the whole change from a
   side branch, which is normally omitted from the output, is shown
   in addition to the commits that introduce real changes.

 * The interactive input from various codepaths are consolidated and
   any prompt possibly issued earlier are fflush()ed before we read.

 * Allow "git rebase" to reapply all local commits, even if the may be
   already in the upstream, without checking first.

 * The 'pack.useSparse' configuration variable now defaults to 'true',
   enabling an optimization that has been experimental since Git 2.21.

 * "git rebase" happens to call some hooks meant for "checkout" and
   "commit" by this was not a designed behaviour than historical
   accident.  This has been documented.

 * "git merge" learns the "--autostash" option.

 * "sparse-checkout" UI improvements.

 * "git update-ref --stdin" learned a handful of new verbs to let the
   user control ref update transactions more explicitly, which helps
   as an ingredient to implement two-phase commit-style atomic
   ref-updates across multiple repositories.


Performance, Internal Implementation, Development Support etc.

 * The advise API has been revamped to allow more systematic enumeration of
   advice knobs in the future.

 * SHA-256 transition continues.

 * The code to interface with GnuPG has been refactored.

 * "git stash" has kept an escape hatch to use the scripted version
   for a few releases, which got stale.  It has been removed.

 * Enable tests that require GnuPG on Windows.

 * Minor test usability improvement.

 * Trace2 enhancement to allow logging of the environment variables.

 * Test clean-up continues.

 * Perf-test update.

 * A Windows-specific test element has been made more robust against
   misuse from both user's environment and programmer's errors.

 * Various tests have been updated to work around issues found with
   shell utilities that come with busybox etc.

 * The config API made mixed uses of int and size_t types to represent
   length of various pieces of text it parsed, which has been updated
   to use the correct type (i.e. size_t) throughout.

 * The "--decorate-refs" and "--decorate-refs-exclude" options "git
   log" takes have learned a companion configuration variable
   log.excludeDecoration that sits at the lowest priority in the
   family.

 * A new CI job to build and run test suite on linux with musl libc
   has been added.

 * Update the CI configuration to use GitHub Actions, retiring the one
   based on Azure Pipelines.

 * The directory traversal code had redundant recursive calls which
   made its performance characteristics exponential with respect to
   the depth of the tree, which was corrected.


Fixes since v2.26
-----------------

 * The real_path() convenience function can easily be misused; with a
   bit of code refactoring in the callers' side, its use has been
   eliminated.
   (merge 49d3c4b481 am/real-path-fix later to maint).

 * Update "git p4" to work with Python 3.
   (merge 6bb40ed20a yz/p4-py3 later to maint).

 * The mechanism to prevent "git commit" from making an empty commit
   or amending during an interrupted cherry-pick was broken during the
   rewrite of "git rebase" in C, which has been corrected.
   (merge 430b75f720 pw/advise-rebase-skip later to maint).

 * Fix "git checkout --recurse-submodules" of a nested submodule
   hierarchy.
   (merge 846f34d351 pb/recurse-submodules-fix later to maint).

 * The "--fork-point" mode of "git rebase" regressed when the command
   was rewritten in C back in 2.20 era, which has been corrected.
   (merge f08132f889 at/rebase-fork-point-regression-fix later to maint).

 * The import-tars importer (in contrib/fast-import/) used to create
   phony files at the top-level of the repository when the archive
   contains global PAX headers, which made its own logic to detect and
   omit the common leading directory ineffective, which has been
   corrected.
   (merge c839fcff65 js/import-tars-do-not-make-phony-files-from-pax-headers later to maint).

 * Simplify the commit ancestry connectedness check in a partial clone
   repository in which "promised" objects are assumed to be obtainable
   lazily on-demand from promisor remote repositories.
   (merge 2b98478c6f jt/connectivity-check-optim-in-partial-clone later to maint).

 * The server-end of the v2 protocol to serve "git clone" and "git
   fetch" was not prepared to see a delim packets at unexpected
   places, which led to a crash.
   (merge cacae4329f jk/harden-protocol-v2-delim-handling later to maint).

 * When fed a midx that records no objects, some codepaths tried to
   loop from 0 through (num_objects-1), which, due to integer
   arithmetic wrapping around, made it nonsense operation with out of
   bounds array accesses.  The code has been corrected to reject such
   an midx file.
   (merge 796d61cdc0 dr/midx-avoid-int-underflow later to maint).

 * Utitiles run via the run_command() API were not spawned correctly
   on Cygwin, when the paths to them are given as a full path with
   backslashes.
   (merge 05ac8582bc ak/run-command-on-cygwin-fix later to maint).

 * "git pull --rebase" tried to run a rebase even after noticing that
   the pull results in a fast-forward and no rebase is needed nor
   sensible, for the past few years due to a mistake nobody noticed.
   (merge fbae70ddc6 en/pull-do-not-rebase-after-fast-forwarding later to maint).

 * "git rebase" with the merge backend did not work well when the
   rebase.abbreviateCommands configuration was set.
   (merge de9f1d3ef4 ag/rebase-merge-allow-ff-under-abbrev-command later to maint).

 * The logic to auto-follow tags by "git clone --single-branch" was
   not careful to avoid lazy-fetching unnecessary tags, which has been
   corrected.
   (merge 167a575e2d jk/use-quick-lookup-in-clone-for-tag-following later to maint).

 * "git rebase -i" did not leave the reflog entries correctly.
   (merge 1f6965f994 en/sequencer-reflog-action later to maint).

 * The more aggressive updates to remote-tracking branches we had for
   the past 7 years or so were not reflected in the documentation,
   which has been corrected.
   (merge a44088435c pb/pull-fetch-doc later to maint).

 * We've left the command line parsing of "git log :/a/b/" broken for
   about a full year without anybody noticing, which has been
   corrected.
   (merge 0220461071 jc/missing-ref-store-fix later to maint).

 * Misc fixes for Windows.
   (merge 3efc128cd5 js/mingw-fixes later to maint).

 * "git rebase" (again) learns to honor "--no-keep-empty", which lets
   the user to discard commits that are empty from the beginning (as
   opposed to the ones that become empty because of rebasing).  The
   interactive rebase also marks commits that are empty in the todo.
   (merge 50ed76148a en/rebase-no-keep-empty later to maint).

 * Parsing the host part out of URL for the credential helper has been corrected.
   (merge 4c5971e18a jk/credential-parsing-end-of-host-in-URL later to maint).

 * Document the recommended way to abort a failing test early (e.g. by
   exiting a loop), which is to say "return 1".
   (merge 7cc112dc95 jc/doc-test-leaving-early later to maint).

 * The code that refreshes the last access and modified time of
   on-disk packfiles and loose object files have been updated.
   (merge 312cd76130 lr/freshen-file-fix later to maint).

 * Validation of push certificate has been made more robust against
   timing attacks.
   (merge 719483e547 bc/constant-memequal later to maint).

 * The custom hash function used by "git fast-import" has been
   replaced with the one from hashmap.c, which gave us a nice
   performance boost.
   (merge d8410a816b jk/fast-import-use-hashmap later to maint).

 * The "git submodule" command did not initialize a few variables it
   internally uses and was affected by variable settings leaked from
   the environment.
   (merge 65d100c4dd lx/submodule-clear-variables later to maint).

 * Raise the minimum required version of docbook-xsl package to 1.74,
   as 1.74.0 was from late 2008, which is more than 10 years old, and
   drop compatibility cruft from our documentation suite.
   (merge 3c255ad660 ma/doc-discard-docbook-xsl-1.73 later to maint).

 * "git log" learns "--[no-]mailmap" as a synonym to "--[no-]use-mailmap"
   (merge 88acccda38 jc/log-no-mailmap later to maint).

 * "git commit-graph write --expire-time=<timestamp>" did not use the
   given timestamp correctly, which has been corrected.
   (merge b09b785c78 ds/commit-graph-expiry-fix later to maint).

 * Tests update to use "test-chmtime" instead of "touch -t".
   (merge e892a56845 ds/t5319-touch-fix later to maint).

 * "git diff" in a partial clone learned to avoid lazy loading blob
   objects in more casese when they are not needed.
   (merge 95acf11a3d jt/avoid-prefetch-when-able-in-diff later to maint).

 * "git push --atomic" used to show failures for refs that weren't
   even pushed, which has been corrected.
   (merge dfe1b7f19c jx/atomic-push later to maint).

 * Code in builtin/*, i.e. those can only be called from within
   built-in subcommands, that implements bulk of a couple of
   subcommands have been moved to libgit.a so that they could be used
   by others.
   (merge 9460fd48b5 dl/libify-a-few later to maint).

 * Allowing the user to split a patch hunk while "git stash -p" does
   not work well; a band-aid has been added to make this (partially)
   work better.

 * "git diff-tree --pretty --notes" used to hit an assertion failure,
   as it forgot to initialize the notes subsystem.
   (merge 5778b22b3d tb/diff-tree-with-notes later to maint).

 * "git range-diff" fixes.
   (merge 8d1675eb7f vd/range-diff-with-custom-pretty-format-fix later to maint).

 * "git grep" did not quote a path with unusual character like other
   commands (like "git diff", "git status") do, but did quote when run
   from a subdirectory, both of which has been corrected.
   (merge 45115d8490 mt/grep-cquote-path later to maint).

 * GNU/Hurd is also among the ones that need the fopen() wrapper.
   (merge 274a1328fb jc/gnu-hurd-lets-fread-read-dirs later to maint).

 * Those fetching over protocol v2 from linux-next and other kernel
   repositories are reporting that v2 often fetches way too much than
   needed.
   (merge 11c7f2a30b jn/demote-proto2-from-default later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 564956f358 jc/maintain-doc later to maint).
   (merge 7422b2a0a1 sg/commit-slab-clarify-peek later to maint).
   (merge 9c688735f6 rs/doc-passthru-fetch-options later to maint).
   (merge 757c2ba3e2 en/oidset-uninclude-hashmap later to maint).
   (merge 8312aa7d74 jc/config-tar later to maint).
   (merge d00a5bdd50 ss/submodule-foreach-cb later to maint).
   (merge 64d1022e14 ar/test-style-fixes later to maint).
   (merge 4a465443a6 ds/doc-clone-filter later to maint).
   (merge bb2dbe301b jk/t3419-drop-expensive-tests later to maint).
   (merge d3507cc712 js/test-junit-finalization-fix later to maint).
   (merge 2149b6748f bc/faq later to maint).
   (merge 12dc0879f1 jk/test-cleanup later to maint).
   (merge 344420bf0f pb/rebase-doc-typofix later to maint).
   (merge 7cd54d37dc dl/wrapper-fix-indentation later to maint).
   (merge 78725ebda9 jc/allow-strlen-substitution-in-shell-scripts later to maint).
   (merge 2ecfcdecc6 jm/gitweb-fastcgi-utf8 later to maint).
   (merge 0740d0a5d3 jk/oid-array-cleanups later to maint).
   (merge a1aba0c95c js/t0007-typofix later to maint).
   (merge 76ba7fa225 ma/config-doc-fix later to maint).
   (merge 826f0c0df2 js/subtree-doc-update-to-asciidoctor-2 later to maint).
   (merge 88eaf361e0 eb/mboxrd-doc later to maint).
   (merge 051cc54941 tm/zsh-complete-switch-restore later to maint).
   (merge 39102cf4fe ms/doc-revision-illustration-fix later to maint).