]> git.ipfire.org Git - thirdparty/git.git/blob - Documentation/RelNotes/2.31.0.txt
1d2dba2c80f330c14c835fa3ba5a1c924208105b
[thirdparty/git.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
93 Performance, Internal Implementation, Development Support etc.
94
95 * A 3-year old test that was not testing anything useful has been
96 corrected.
97
98 * Retire more names with "sha1" in it.
99
100 * The topological walk codepath is covered by new trace2 stats.
101
102 * Update the Code-of-conduct to version 2.0 from the upstream (we've
103 been using version 1.4).
104
105 * "git mktag" validates its input using its own rules before writing
106 a tag object---it has been updated to share the logic with "git
107 fsck".
108
109 * Two new ways to feed configuration variable-value pairs via
110 environment variables have been introduced, and the way
111 GIT_CONFIG_PARAMETERS encodes variable/value pairs has been tweaked
112 to make it more robust.
113
114 * Tests have been updated so that they do not to get affected by the
115 name of the default branch "git init" creates.
116
117 * "git fetch" learns to treat ref updates atomically in all-or-none
118 fashion, just like "git push" does, with the new "--atomic" option.
119
120 * The peel_ref() API has been replaced with peel_iterated_oid().
121
122 * The .use_shell flag in struct child_process that is passed to
123 run_command() API has been clarified with a bit more documentation.
124
125 * Document, clean-up and optimize the code around the cache-tree
126 extension in the index.
127
128 * The ls-refs protocol operation has been optimized to narrow the
129 sub-hierarchy of refs/ it walks to produce response.
130
131 * When removing many branches and tags, the code used to do so one
132 ref at a time. There is another API it can use to delete multiple
133 refs, and it makes quite a lot of performance difference when the
134 refs are packed.
135
136 * The "pack-objects" command needs to iterate over all the tags when
137 automatic tag following is enabled, but it actually iterated over
138 all refs and then discarded everything outside "refs/tags/"
139 hierarchy, which was quite wasteful.
140
141 * A perf script was made more portable.
142
143 * Our setting of GitHub CI test jobs were a bit too eager to give up
144 once there is even one failure found. Tweak the knob to allow
145 other jobs keep running even when we see a failure, so that we can
146 find more failures in a single run.
147
148 * We've carried compatibility codepaths for compilers without
149 variadic macros for quite some time, but the world may be ready for
150 them to be removed. Force compilation failure on exotic platforms
151 where variadic macros are not available to find out who screams in
152 such a way that we can easily revert if it turns out that the world
153 is not yet ready.
154
155 * Code clean-up to ensure our use of hashtables using object names as
156 keys use the "struct object_id" objects, not the raw hash values.
157
158 * Lose the debugging aid that may have been useful in the past, but
159 no longer is, in the "grep" codepaths.
160
161 * Some pretty-format specifiers do not need the data in commit object
162 (e.g. "%H"), but we were over-eager to load and parse it, which has
163 been made even lazier.
164
165 * Get rid of "GETTEXT_POISON" support altogether, which may or may
166 not be controversial.
167
168 * Introduce an on-disk file to record revindex for packdata, which
169 traditionally was always created on the fly and only in-core.
170
171 * The commit-graph learned to use corrected commit dates instead of
172 the generation number to help topological revision traversal.
173
174 * Piecemeal of rewrite of "git bisect" in C continues.
175
176 * When a pager spawned by us exited, the trace log did not record its
177 exit status correctly, which has been corrected.
178
179
180 Fixes since v2.30
181 -----------------
182
183 * Diagnose command line error of "git rebase" early.
184
185 * Clean up option descriptions in "git cmd --help".
186
187 * "git stash" did not work well in a sparsely checked out working
188 tree.
189
190 * Some tests expect that "ls -l" output has either '-' or 'x' for
191 group executable bit, but setgid bit can be inherited from parent
192 directory and make these fields 'S' or 's' instead, causing test
193 failures.
194
195 * "git for-each-repo --config=<var> <cmd>" should not run <cmd> for
196 any repository when the configuration variable <var> is not defined
197 even once.
198
199 * Fix 2.29 regression where "git mergetool --tool-help" fails to list
200 all the available tools.
201
202 * Fix for procedure to building CI test environment for mac.
203
204 * The implementation of "git branch --sort" wrt the detached HEAD
205 display has always been hacky, which has been cleaned up.
206
207 * Newline characters in the host and path part of git:// URL are
208 now forbidden.
209
210 * "git diff" showed a submodule working tree with untracked cruft as
211 "Submodule commit <objectname>-dirty", but a natural expectation is
212 that the "-dirty" indicator would align with "git describe --dirty",
213 which does not consider having untracked files in the working tree
214 as source of dirtiness. The inconsistency has been fixed.
215
216 * When more than one commit with the same patch ID appears on one
217 side, "git log --cherry-pick A...B" did not exclude them all when a
218 commit with the same patch ID appears on the other side. Now it
219 does.
220
221 * Documentation for "git fsck" lost stale bits that has become
222 incorrect.
223
224 * Doc fix for packfile URI feature.
225
226 * When "git rebase -i" processes "fixup" insn, there is no reason to
227 clean up the commit log message, but we did the usual stripspace
228 processing. This has been corrected.
229 (merge f7d42ceec5 js/rebase-i-commit-cleanup-fix later to maint).
230
231 * Fix in passing custom args from "git clone" to "upload-pack" on the
232 other side.
233 (merge ad6b5fefbd jv/upload-pack-filter-spec-quotefix later to maint).
234
235 * The command line completion (in contrib/) completed "git branch -d"
236 with branch names, but "git branch -D" offered tagnames in addition,
237 which has been corrected. "git branch -M" had the same problem.
238 (merge 27dc071b9a jk/complete-branch-force-delete later to maint).
239
240 * When commands are started from a subdirectory, they may have to
241 compare the path to the subdirectory (called prefix and found out
242 from $(pwd)) with the tracked paths. On macOS, $(pwd) and
243 readdir() yield decomposed path, while the tracked paths are
244 usually normalized to the precomposed form, causing mismatch. This
245 has been fixed by taking the same approach used to normalize the
246 command line arguments.
247 (merge 5c327502db tb/precompose-prefix-too later to maint).
248
249 * Even though invocations of "die()" were logged to the trace2
250 system, "BUG()"s were not, which has been corrected.
251 (merge 0a9dde4a04 jt/trace2-BUG later to maint).
252
253 * "git grep --untracked" is meant to be "let's ALSO find in these
254 files on the filesystem" when looking for matches in the working
255 tree files, and does not make any sense if the primary search is
256 done against the index, or the tree objects. The "--cached" and
257 "--untracked" options have been marked as mutually incompatible.
258 (merge 0c5d83b248 mt/grep-cached-untracked later to maint).
259
260 * Fix "git fsck --name-objects" which apparently has not been used by
261 anybody who is motivated enough to report breakage.
262 (merge e89f89361c js/fsck-name-objects-fix later to maint).
263
264 * Avoid individual tests in t5411 from getting affected by each other
265 by forcing them to use separate output files during the test.
266 (merge 822ee894f6 jx/t5411-unique-filenames later to maint).
267
268 * Test to make sure "git rev-parse one-thing one-thing" gives
269 the same thing twice (when one-thing is --since=X).
270 (merge a5cdca4520 ew/rev-parse-since-test later to maint).
271
272 * When certain features (e.g. grafts) used in the repository are
273 incompatible with the use of the commit-graph, we used to silently
274 turned commit-graph off; we now tell the user what we are doing.
275 (merge c85eec7fc3 js/commit-graph-warning later to maint).
276
277 * Other code cleanup, docfix, build fix, etc.
278 (merge e3f5da7e60 sg/t7800-difftool-robustify later to maint).