]> git.ipfire.org Git - thirdparty/git.git/blob - Documentation/RelNotes/2.31.0.txt
Merge branch 'en/ort-directory-rename'
[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
64 Performance, Internal Implementation, Development Support etc.
65
66 * A 3-year old test that was not testing anything useful has been
67 corrected.
68
69 * Retire more names with "sha1" in it.
70
71 * The topological walk codepath is covered by new trace2 stats.
72
73 * Update the Code-of-conduct to version 2.0 from the upstream (we've
74 been using version 1.4).
75
76 * "git mktag" validates its input using its own rules before writing
77 a tag object---it has been updated to share the logic with "git
78 fsck".
79
80 * Two new ways to feed configuration variable-value pairs via
81 environment variables have been introduced, and the way
82 GIT_CONFIG_PARAMETERS encodes variable/value pairs has been tweaked
83 to make it more robust.
84
85 * Tests have been updated so that they do not to get affected by the
86 name of the default branch "git init" creates.
87
88 * "git fetch" learns to treat ref updates atomically in all-or-none
89 fashion, just like "git push" does, with the new "--atomic" option.
90
91 * The peel_ref() API has been replaced with peel_iterated_oid().
92
93 * The .use_shell flag in struct child_process that is passed to
94 run_command() API has been clarified with a bit more documentation.
95
96 * Document, clean-up and optimize the code around the cache-tree
97 extension in the index.
98
99 * The ls-refs protocol operation has been optimized to narrow the
100 sub-hierarchy of refs/ it walks to produce response.
101
102 * When removing many branches and tags, the code used to do so one
103 ref at a time. There is another API it can use to delete multiple
104 refs, and it makes quite a lot of performance difference when the
105 refs are packed.
106
107 * The "pack-objects" command needs to iterate over all the tags when
108 automatic tag following is enabled, but it actually iterated over
109 all refs and then discarded everything outside "refs/tags/"
110 hierarchy, which was quite wasteful.
111
112 * A perf script was made more portable.
113
114 * Our setting of GitHub CI test jobs were a bit too eager to give up
115 once there is even one failure found. Tweak the knob to allow
116 other jobs keep running even when we see a failure, so that we can
117 find more failures in a single run.
118
119 * We've carried compatibility codepaths for compilers without
120 variadic macros for quite some time, but the world may be ready for
121 them to be removed. Force compilation failure on exotic platforms
122 where variadic macros are not available to find out who screams in
123 such a way that we can easily revert if it turns out that the world
124 is not yet ready.
125
126 * Code clean-up to ensure our use of hashtables using object names as
127 keys use the "struct object_id" objects, not the raw hash values.
128
129 * Lose the debugging aid that may have been useful in the past, but
130 no longer is, in the "grep" codepaths.
131
132 * Some pretty-format specifiers do not need the data in commit object
133 (e.g. "%H"), but we were over-eager to load and parse it, which has
134 been made even lazier.
135
136 * Get rid of "GETTEXT_POISON" support altogether, which may or may
137 not be controversial.
138
139
140 Fixes since v2.30
141 -----------------
142
143 * Diagnose command line error of "git rebase" early.
144
145 * Clean up option descriptions in "git cmd --help".
146
147 * "git stash" did not work well in a sparsely checked out working
148 tree.
149
150 * Some tests expect that "ls -l" output has either '-' or 'x' for
151 group executable bit, but setgid bit can be inherited from parent
152 directory and make these fields 'S' or 's' instead, causing test
153 failures.
154
155 * "git for-each-repo --config=<var> <cmd>" should not run <cmd> for
156 any repository when the configuration variable <var> is not defined
157 even once.
158
159 * Fix 2.29 regression where "git mergetool --tool-help" fails to list
160 all the available tools.
161
162 * Fix for procedure to building CI test environment for mac.
163
164 * The implementation of "git branch --sort" wrt the detached HEAD
165 display has always been hacky, which has been cleaned up.
166
167 * Newline characters in the host and path part of git:// URL are
168 now forbidden.
169
170 * "git diff" showed a submodule working tree with untracked cruft as
171 "Submodule commit <objectname>-dirty", but a natural expectation is
172 that the "-dirty" indicator would align with "git describe --dirty",
173 which does not consider having untracked files in the working tree
174 as source of dirtiness. The inconsistency has been fixed.
175
176 * When more than one commit with the same patch ID appears on one
177 side, "git log --cherry-pick A...B" did not exclude them all when a
178 commit with the same patch ID appears on the other side. Now it
179 does.
180
181 * Documentation for "git fsck" lost stale bits that has become
182 incorrect.
183
184 * Doc fix for packfile URI feature.
185
186 * When "git rebase -i" processes "fixup" insn, there is no reason to
187 clean up the commit log message, but we did the usual stripspace
188 processing. This has been corrected.
189 (merge f7d42ceec5 js/rebase-i-commit-cleanup-fix later to maint).
190
191 * Other code cleanup, docfix, build fix, etc.
192 (merge e3f5da7e60 sg/t7800-difftool-robustify later to maint).