archive: stop passing "stage" through read_tree_recursive()
[git] / Documentation / RelNotes / 2.31.0.txt
1 Git 2.31 Release Notes
2 ======================
3
4 Updates since v2.30
5 -------------------
6
7 Backward incompatible and other important changes
8
9  * The "pack-redundant" command, which has been left stale with almost
10    unusable performance issues, now warns loudly when it gets used, as
11    we no longer want to recommend its use (instead just "repack -d"
12    instead).
13
14  * The development community has adopted Contributor Covenant v2.0 to
15    update from v1.4 that we have been using.
16
17  * The support for deprecated PCRE1 library has been dropped.
18
19
20 UI, Workflows & Features
21
22  * The "--format=%(trailers)" mechanism gets enhanced to make it
23    easier to design output for machine consumption.
24
25  * When a user does not tell "git pull" to use rebase or merge, the
26    command gives a loud message telling a user to choose between
27    rebase or merge but creates a merge anyway, forcing users who would
28    want to rebase to redo the operation.  Fix an early part of this
29    problem by tightening the condition to give the message---there is
30    no reason to stop or force the user to choose between rebase or
31    merge if the history fast-forwards.
32
33  * The configuration variable 'core.abbrev' can be set to 'no' to
34    force no abbreviation regardless of the hash algorithm.
35
36  * "git rev-parse" can be explicitly told to give output as absolute
37    or relative path with the `--path-format=(absolute|relative)` option.
38
39  * Bash completion (in contrib/) update to make it easier for
40    end-users to add completion for their custom "git" subcommands.
41
42  * "git maintenance" learned to drive scheduled maintenance on
43    platforms whose native scheduling methods are not 'cron'.
44
45  * After expiring a reflog and making a single commit, the reflog for
46    the branch would record a single entry that knows both @{0} and
47    @{1}, but we failed to answer "what commit were we on?", i.e. @{1}
48
49  * "git bundle" learns "--stdin" option to read its refs from the
50    standard input.  Also, it now does not lose refs whey they point
51    at the same object.
52
53  * "git log" learned a new "--diff-merges=<how>" option.
54
55  * "git ls-files" can and does show multiple entries when the index is
56    unmerged, which is a source for confusion unless -s/-u option is in
57    use.  A new option --deduplicate has been introduced.
58
59  * `git worktree list` now annotates worktrees as prunable, shows
60    locked and prunable attributes in --porcelain mode, and gained
61    a --verbose option.
62
63  * "git clone" tries to locally check out the branch pointed at by
64    HEAD of the remote repository after it is done, but the protocol
65    did not convey the information necessary to do so when copying an
66    empty repository.  The protocol v2 learned how to do so.
67
68  * There are other ways than ".." for a single token to denote a
69    "commit range", namely "<rev>^!" and "<rev>^-<n>", but "git
70    range-diff" did not understand them.
71
72  * The "git range-diff" command learned "--(left|right)-only" option
73    to show only one side of the compared range.
74
75  * "git mergetool" feeds three versions (base, local and remote) of
76    a conflicted path unmodified.  The command learned to optionally
77    prepare these files with unconflicted parts already resolved.
78
79  * The .mailmap is documented to be read only from the root level of a
80    working tree, but a stray file in a bare repository also was read
81    by accident, which has been corrected.
82
83  * "git maintenance" tool learned a new "pack-refs" maintenance task.
84
85  * The error message given when a configuration variable that is
86    expected to have a boolean value has been improved.
87
88  * Signed commits and tags now allow verification of objects, whose
89    two object names (one in SHA-1, the other in SHA-256) are both
90    signed.
91
92  * "git rev-list" command learned "--disk-usage" option.
93
94  * "git {diff,log} --{skip,rotate}-to=<path>" allows the user to
95    discard diff output for early paths or move them to the end of the
96    output.
97
98  * "git difftool" learned "--skip-to=<path>" option to restart an
99    interrupted session from an arbitrary path.
100
101  * "git grep" has been tweaked to be limited to the sparse checkout
102    paths.
103
104  * "git rebase --[no-]fork-point" gained a configuration variable
105    rebase.forkPoint so that users do not have to keep specifying a
106    non-default setting.
107
108
109 Performance, Internal Implementation, Development Support etc.
110
111  * A 3-year old test that was not testing anything useful has been
112    corrected.
113
114  * Retire more names with "sha1" in it.
115
116  * The topological walk codepath is covered by new trace2 stats.
117
118  * Update the Code-of-conduct to version 2.0 from the upstream (we've
119    been using version 1.4).
120
121  * "git mktag" validates its input using its own rules before writing
122    a tag object---it has been updated to share the logic with "git
123    fsck".
124
125  * Two new ways to feed configuration variable-value pairs via
126    environment variables have been introduced, and the way
127    GIT_CONFIG_PARAMETERS encodes variable/value pairs has been tweaked
128    to make it more robust.
129
130  * Tests have been updated so that they do not to get affected by the
131    name of the default branch "git init" creates.
132
133  * "git fetch" learns to treat ref updates atomically in all-or-none
134    fashion, just like "git push" does, with the new "--atomic" option.
135
136  * The peel_ref() API has been replaced with peel_iterated_oid().
137
138  * The .use_shell flag in struct child_process that is passed to
139    run_command() API has been clarified with a bit more documentation.
140
141  * Document, clean-up and optimize the code around the cache-tree
142    extension in the index.
143
144  * The ls-refs protocol operation has been optimized to narrow the
145    sub-hierarchy of refs/ it walks to produce response.
146
147  * When removing many branches and tags, the code used to do so one
148    ref at a time.  There is another API it can use to delete multiple
149    refs, and it makes quite a lot of performance difference when the
150    refs are packed.
151
152  * The "pack-objects" command needs to iterate over all the tags when
153    automatic tag following is enabled, but it actually iterated over
154    all refs and then discarded everything outside "refs/tags/"
155    hierarchy, which was quite wasteful.
156
157  * A perf script was made more portable.
158
159  * Our setting of GitHub CI test jobs were a bit too eager to give up
160    once there is even one failure found.  Tweak the knob to allow
161    other jobs keep running even when we see a failure, so that we can
162    find more failures in a single run.
163
164  * We've carried compatibility codepaths for compilers without
165    variadic macros for quite some time, but the world may be ready for
166    them to be removed.  Force compilation failure on exotic platforms
167    where variadic macros are not available to find out who screams in
168    such a way that we can easily revert if it turns out that the world
169    is not yet ready.
170
171  * Code clean-up to ensure our use of hashtables using object names as
172    keys use the "struct object_id" objects, not the raw hash values.
173
174  * Lose the debugging aid that may have been useful in the past, but
175    no longer is, in the "grep" codepaths.
176
177  * Some pretty-format specifiers do not need the data in commit object
178    (e.g. "%H"), but we were over-eager to load and parse it, which has
179    been made even lazier.
180
181  * Get rid of "GETTEXT_POISON" support altogether, which may or may
182    not be controversial.
183
184  * Introduce an on-disk file to record revindex for packdata, which
185    traditionally was always created on the fly and only in-core.
186
187  * The commit-graph learned to use corrected commit dates instead of
188    the generation number to help topological revision traversal.
189
190  * Piecemeal of rewrite of "git bisect" in C continues.
191
192  * When a pager spawned by us exited, the trace log did not record its
193    exit status correctly, which has been corrected.
194
195  * Removal of GIT_TEST_GETTEXT_POISON continues.
196
197  * The code to implement "git merge-base --independent" was poorly
198    done and was kept from the very beginning of the feature.
199
200  * Preliminary changes to fsmonitor integration.
201
202  * Performance improvements for rename detection.
203
204  * The common code to deal with "chunked file format" that is shared
205    by the multi-pack-index and commit-graph files have been factored
206    out, to help codepaths for both filetypes to become more robust.
207
208  * The approach to "fsck" the incoming objects in "index-pack" is
209    attractive for performance reasons (we have them already in core,
210    inflated and ready to be inspected), but fundamentally cannot be
211    applied fully when we receive more than one pack stream, as a tree
212    object in one pack may refer to a blob object in another pack as
213    ".gitmodules", when we want to inspect blobs that are used as
214    ".gitmodules" file, for example.  Teach "index-pack" to emit
215    objects that must be inspected later and check them in the calling
216    "fetch-pack" process.
217
218  * The logic to handle "trailer" related placeholders in the
219    "--format=" mechanisms in the "log" family and "for-each-ref"
220    family is getting unified.
221
222  * Raise the buffer size used when writing the index file out from
223    (obviously too small) 8kB to (clearly sufficiently large) 128kB.
224
225  * It is reported that open() on some platforms (e.g. macOS Big Sur)
226    can return EINTR even though our timers are set up with SA_RESTART.
227    A workaround has been implemented and enabled for macOS to rerun
228    open() transparently from the caller when this happens.
229
230
231 Fixes since v2.30
232 -----------------
233
234  * Diagnose command line error of "git rebase" early.
235
236  * Clean up option descriptions in "git cmd --help".
237
238  * "git stash" did not work well in a sparsely checked out working
239    tree.
240
241  * Some tests expect that "ls -l" output has either '-' or 'x' for
242    group executable bit, but setgid bit can be inherited from parent
243    directory and make these fields 'S' or 's' instead, causing test
244    failures.
245
246  * "git for-each-repo --config=<var> <cmd>" should not run <cmd> for
247    any repository when the configuration variable <var> is not defined
248    even once.
249
250  * Fix 2.29 regression where "git mergetool --tool-help" fails to list
251    all the available tools.
252
253  * Fix for procedure to building CI test environment for mac.
254
255  * The implementation of "git branch --sort" wrt the detached HEAD
256    display has always been hacky, which has been cleaned up.
257
258  * Newline characters in the host and path part of git:// URL are
259    now forbidden.
260
261  * "git diff" showed a submodule working tree with untracked cruft as
262    "Submodule commit <objectname>-dirty", but a natural expectation is
263    that the "-dirty" indicator would align with "git describe --dirty",
264    which does not consider having untracked files in the working tree
265    as source of dirtiness.  The inconsistency has been fixed.
266
267  * When more than one commit with the same patch ID appears on one
268    side, "git log --cherry-pick A...B" did not exclude them all when a
269    commit with the same patch ID appears on the other side.  Now it
270    does.
271
272  * Documentation for "git fsck" lost stale bits that has become
273    incorrect.
274
275  * Doc fix for packfile URI feature.
276
277  * When "git rebase -i" processes "fixup" insn, there is no reason to
278    clean up the commit log message, but we did the usual stripspace
279    processing.  This has been corrected.
280    (merge f7d42ceec5 js/rebase-i-commit-cleanup-fix later to maint).
281
282  * Fix in passing custom args from "git clone" to "upload-pack" on the
283    other side.
284    (merge ad6b5fefbd jv/upload-pack-filter-spec-quotefix later to maint).
285
286  * The command line completion (in contrib/) completed "git branch -d"
287    with branch names, but "git branch -D" offered tagnames in addition,
288    which has been corrected.  "git branch -M" had the same problem.
289    (merge 27dc071b9a jk/complete-branch-force-delete later to maint).
290
291  * When commands are started from a subdirectory, they may have to
292    compare the path to the subdirectory (called prefix and found out
293    from $(pwd)) with the tracked paths.  On macOS, $(pwd) and
294    readdir() yield decomposed path, while the tracked paths are
295    usually normalized to the precomposed form, causing mismatch.  This
296    has been fixed by taking the same approach used to normalize the
297    command line arguments.
298    (merge 5c327502db tb/precompose-prefix-too later to maint).
299
300  * Even though invocations of "die()" were logged to the trace2
301    system, "BUG()"s were not, which has been corrected.
302    (merge 0a9dde4a04 jt/trace2-BUG later to maint).
303
304  * "git grep --untracked" is meant to be "let's ALSO find in these
305    files on the filesystem" when looking for matches in the working
306    tree files, and does not make any sense if the primary search is
307    done against the index, or the tree objects.  The "--cached" and
308    "--untracked" options have been marked as mutually incompatible.
309    (merge 0c5d83b248 mt/grep-cached-untracked later to maint).
310
311  * Fix "git fsck --name-objects" which apparently has not been used by
312    anybody who is motivated enough to report breakage.
313    (merge e89f89361c js/fsck-name-objects-fix later to maint).
314
315  * Avoid individual tests in t5411 from getting affected by each other
316    by forcing them to use separate output files during the test.
317    (merge 822ee894f6 jx/t5411-unique-filenames later to maint).
318
319  * Test to make sure "git rev-parse one-thing one-thing" gives
320    the same thing twice (when one-thing is --since=X).
321    (merge a5cdca4520 ew/rev-parse-since-test later to maint).
322
323  * When certain features (e.g. grafts) used in the repository are
324    incompatible with the use of the commit-graph, we used to silently
325    turned commit-graph off; we now tell the user what we are doing.
326    (merge c85eec7fc3 js/commit-graph-warning later to maint).
327
328  * Objects that lost references can be pruned away, even when they
329    have notes attached to it (and these notes will become dangling,
330    which in turn can be pruned with "git notes prune").  This has been
331    clarified in the documentation.
332    (merge fa9ab027ba mz/doc-notes-are-not-anchors later to maint).
333
334  * The error codepath around the "--temp/--prefix" feature of "git
335    checkout-index" has been improved.
336    (merge 3f7ba60350 mt/checkout-index-corner-cases later to maint).
337
338  * The "git maintenance register" command had trouble registering bare
339    repositories, which had been corrected.
340
341  * A handful of multi-word configuration variable names in
342    documentation that are spelled in all lowercase have been corrected
343    to use the more canonical camelCase.
344    (merge 7dd0eaa39c dl/doc-config-camelcase later to maint).
345
346  * "git push $there --delete ''" should have been diagnosed as an
347    error, but instead turned into a matching push, which has been
348    corrected.
349    (merge 20e416409f jc/push-delete-nothing later to maint).
350
351  * Test script modernization.
352    (merge 488acf15df sv/t7001-modernize later to maint).
353
354  * An under-allocation for the untracked cache data has been corrected.
355    (merge 6347d649bc jh/untracked-cache-fix later to maint).
356
357  * Other code cleanup, docfix, build fix, etc.
358    (merge e3f5da7e60 sg/t7800-difftool-robustify later to maint).
359    (merge 9d336655ba js/doc-proto-v2-response-end later to maint).
360    (merge 1b5b8cf072 jc/maint-column-doc-typofix later to maint).
361    (merge 3a837b58e3 cw/pack-config-doc later to maint).
362    (merge 01168a9d89 ug/doc-commit-approxidate later to maint).
363    (merge b865734760 js/params-vs-args later to maint).