]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/RelNotes/2.29.0.txt
Fifteenth batch
[thirdparty/git.git] / Documentation / RelNotes / 2.29.0.txt
CommitLineData
79bcaf00
JH
1Git 2.29 Release Notes
2======================
3
4Updates since v2.28
5-------------------
6
7UI, Workflows & Features
8
9 * "git help log" has been enhanced by sharing more material from the
10 documentation for the underlying "git rev-list" command.
11
12 * "git for-each-ref --format=<>" learned %(contents:size).
13
85b4e0a6
JH
14 * "git merge" learned to selectively omit " into <branch>" at the end
15 of the title of default merge message with merge.suppressDest
16 configuration.
17
7814e8a0
JH
18 * The component to respond to "git fetch" request is made more
19 configurable to selectively allow or reject object filtering
20 specification used for partial cloning.
21
2befe972
JH
22 * Stop when "sendmail.*" configuration variables are defined, which
23 could be a mistaken attempt to define "sendemail.*" variables.
24
25 * The existing backends for "git mergetool" based on variants of vim
26 have been refactored and then support for "nvim" has been added.
27
28 * "git bisect" learns the "--first-parent" option to find the first
29 breakage along the first-parent chain.
30
31 * "git log --first-parent -p" showed patches only for single-parent
32 commits on the first-parent chain; the "--first-parent" option has
33 been made to imply "-m". Use "--no-diff-merges" to restore the
34 previous behaviour to omit patches for merge commits.
35
675a4aaf
JH
36 * The commit labels used to explain each side of conflicted hunks
37 placed by the sequencer machinery have been made more readable by
38 humans.
39
e9b77c84
JH
40 * The "--batch-size" option of "git multi-pack-index repack" command
41 is now used to specify that very small packfiles are collected into
42 one until the total size roughly exceeds it.
43
44 * The recent addition of SHA-256 support is marked as experimental in
45 the documentation.
46
47 * "git fetch" learned --no-write-fetch-head option to avoid writing
48 the FETCH_HEAD file.
49
20de7e7e
JH
50 * Command line completion (in contrib/) usually omits redundant,
51 deprecated and/or dangerous options from its output; it learned to
52 optionally include all of them.
53
e1971363
JH
54 * The output from the "diff" family of the commands had abbreviated
55 object names of blobs involved in the patch, but its length was not
56 affected by the --abbrev option. Now it is.
57
54e85e7a
JH
58 * "git worktree" gained a "repair" subcommand to help users recover
59 after moving the worktrees or repository manually without telling
60 Git. Also, "git init --separate-git-dir" no longer corrupts
61 administrative data related to linked worktrees.
62
63 * The "--format=" option to the "for-each-ref" command and friends
64 learned a few more tricks, e.g. the ":short" suffix that applies to
65 "objectname" now also can be used for "parent", "tree", etc.
66
385c171a
JH
67 * "git worktree add" learns that the "-d" is a synonym to "--detach"
68 option to create a new worktree without being on a branch.
69
79bcaf00
JH
70
71Performance, Internal Implementation, Development Support etc.
72
73 * The changed-path Bloom filter is improved using ideas from an
74 independent implementation.
75
76 * Updates to the changed-paths bloom filter.
77
78 * The test framework has been updated so that most tests will run
79 with predictable (artificial) timestamps.
80
81 * Preliminary clean-up of the refs API in preparation for adding a
82 new refs backend "reftable".
83
84 * Dev support to limit the use of test_must_fail to only git commands.
85
dc04167d
JH
86 * While packing many objects in a repository with a promissor remote,
87 lazily fetching missing objects from the promissor remote one by
88 one may be inefficient---the code now attempts to fetch all the
89 missing objects in batch (obviously this won't work for a lazy
90 clone that lazily fetches tree objects as you cannot even enumerate
91 what blobs are missing until you learn which trees are missing).
92
93 * The pretend-object mechanism checks if the given object already
94 exists in the object store before deciding to keep the data
95 in-core, but the check would have triggered lazy fetching of such
96 an object from a promissor remote.
97
4f0a8be7
JH
98 * The argv_array API is useful for not just managing argv but any
99 "vector" (NULL-terminated array) of strings, and has seen adoption
100 to a certain degree. It has been renamed to "strvec" to reduce the
101 barrier to adoption.
102
675a4aaf
JH
103 * The final leg of SHA-256 transition plus doc updates. Note that
104 there is no inter-operability between SHA-1 and SHA-256
105 repositories yet.
7814e8a0
JH
106
107 * CMake support to build with MSVC for Windows bypassing the Makefile.
108
878e7276
JH
109 * A new helper function has_object() has been introduced to make it
110 easier to mark object existence checks that do and don't want to
111 trigger lazy fetches, and a few such checks are converted using it.
112
2befe972
JH
113 * A no-op replacement function implemented as a C preprocessor macro
114 does not perform as good a job as one implemented as a "static
115 inline" function in catching errors in parameters; replace the
116 former with the latter in <git-compat-util.h> header.
117
118 * Test framework update.
119 (merge d572f52a64 es/test-cmp-typocatcher later to maint).
120
675a4aaf
JH
121 * Updates to "git merge" tests, in preparation for a new merge
122 strategy backend.
123
124 * midx and commit-graph files now use the byte defined in their file
125 format specification for identifying the hash function used for
126 object names.
127
20de7e7e
JH
128 * The FETCH_HEAD is now always read from the filesystem regardless of
129 the ref backend in use, as its format is much richer than the
130 normal refs, and written directly by "git fetch" as a plain file..
131
e1971363
JH
132 * A handful of places in in-tree code still relied on being able to
133 execute the git subcommands, especially built-ins, in "git-foo"
134 form, which have been corrected.
135
3a238e53
JH
136 * An unused binary has been discarded, and and a bunch of commands
137 have been turned into into built-in.
138
139 * A handful of places in in-tree code still relied on being able to
140 execute the git subcommands, especially built-ins, in "git-foo"
141 form, which have been corrected.
142
54e85e7a
JH
143 * When a packfile is removed by "git repack", multi-pack-index gets
144 cleared; the code was taught to do so less aggressively by first
145 checking if the midx actually refers to a pack that no longer
146 exists.
147
148 * Internal API clean-up to handle two options "diff-index" and "log"
149 have, which happen to share the same short form, more sensibly.
150
385c171a
JH
151 * The "add -i/-p" machinery has been written in C but it is not used
152 by default yet. It is made default to those who are participating
153 in feature.experimental experiment.
154
155 * Allow maintainers to tweak $(TAR) invocations done while making
156 distribution tarballs.
157
79bcaf00
JH
158
159Fixes since v2.28
160-----------------
161
162 * "git clone --separate-git-dir=$elsewhere" used to stomp on the
163 contents of the existing directory $elsewhere, which has been
164 taught to fail when $elsewhere is not an empty directory.
165 (merge dfaa209a79 bw/fail-cloning-into-non-empty later to maint).
166
79bcaf00
JH
167 * With the base fix to 2.27 regresion, any new extensions in a v0
168 repository would still be silently honored, which is not quite
169 right. Instead, complain and die loudly.
170 (merge ec91ffca04 jk/reject-newer-extensions-in-v0 later to maint).
171
172 * Fetching from a lazily cloned repository resulted at the server
173 side in attempts to lazy fetch objects that the client side has,
174 many of which will not be available from the third-party anyway.
175 (merge 77aa0941ce jt/avoid-lazy-fetching-upon-have-check later to maint).
176
177 * Fix to an ancient bug caused by an over-eager attempt for
178 optimization.
179 (merge a98f7fb366 rs/add-index-entry-optim-fix later to maint).
180
181 * Pushing a ref whose name contains non-ASCII character with the
182 "--force-with-lease" option did not work over smart HTTP protocol,
183 which has been corrected.
184 (merge cd85b447bf bc/push-cas-cquoted-refname later to maint).
185
186 * "git mv src dst", when src is an unmerged path, errored out
187 correctly but with an incorrect error message to claim that src is
188 not tracked, which has been clarified.
189 (merge 9b906af657 ct/mv-unmerged-path-error later to maint).
190
191 * Fix to a regression introduced during 2.27 cycle.
192 (merge cada7308ad en/fill-directory-exponential later to maint).
193
dc04167d
JH
194 * Command line completion (in contrib/) update.
195 (merge 688b87c81b mp/complete-show-color-moved later to maint).
196
4f0a8be7
JH
197 * All "mergy" operations that internally use the merge-recursive
198 machinery should honor the merge.renormalize configuration, but
199 many of them didn't.
200
7814e8a0
JH
201 * Doc cleanup around "worktree".
202 (merge dc9c144be5 es/worktree-doc-cleanups later to maint).
203
878e7276
JH
204 * The "git blame --first-parent" option was not documented, but now
205 it is.
206 (merge 11bc12ae1e rp/blame-first-parent-doc later to maint).
207
2befe972
JH
208 * The logic to find the ref transaction hook script attempted to
209 cache the path to the found hook without realizing that it needed
210 to keep a copied value, as the API it used returned a transitory
211 buffer space. This has been corrected.
212 (merge 09b2aa30c9 ps/ref-transaction-hook later to maint).
213
214 * Recent versions of "git diff-files" shows a diff between the index
215 and the working tree for "intent-to-add" paths as a "new file"
216 patch; "git apply --cached" should be able to take "git diff-files"
217 and should act as an equivalent to "git add" for the path, but the
218 command failed to do so for such a path.
219 (merge 4c025c667e rp/apply-cached-with-i-t-a later to maint).
220
675a4aaf
JH
221 * "git diff [<tree-ish>] $path" for a $path that is marked with i-t-a
222 bit was not showing the mode bits from the working tree.
223 (merge cb0dd22b82 rp/ita-diff-modefix later to maint).
224
225 * Ring buffer with size 4 used for bin-hex translation resulted in a
226 wrong object name in the sequencer's todo output, which has been
227 corrected.
228 (merge 5da69c0dac ak/sequencer-fix-find-uniq-abbrev later to maint).
229
230 * When given more than one target line ranges, "git blame -La,b
231 -Lc,d" was over-eager to coalesce groups of original lines and
232 showed incorrect results, which has been corrected.
233 (merge c2ebaa27d6 jk/blame-coalesce-fix later to maint).
234
235 * The regexp to identify the function boundary for FORTRAN programs
236 has been updated.
237 (merge 75c3b6b2e8 pb/userdiff-fortran-update later to maint).
238
239 * A few end-user facing messages have been updated to be
240 hash-algorithm agnostic.
241 (merge 4279000d3e jc/object-names-are-not-sha-1 later to maint).
242
243 * "unlink" emulation on MinGW has been optimized.
244 (merge 680e0b4524 jh/mingw-unlink later to maint).
245
e9b77c84
JH
246 * The purpose of "git init --separate-git-dir" is to initialize a
247 new project with the repository separate from the working tree,
248 or, in the case of an existing project, to move the repository
249 (the .git/ directory) out of the working tree. It does not make
250 sense to use --separate-git-dir with a bare repository for which
251 there is no working tree, so disallow its use with bare
252 repositories.
253 (merge ccf236a23a es/init-no-separate-git-dir-in-bare later to maint).
254
255 * "ls-files -o" mishandled the top-level directory of another git
256 working tree that hangs in the current git working tree.
257 (merge ab282aa548 en/dir-nonbare-embedded later to maint).
258
259 * Fix some incorrect UNLEAK() annotations.
260 (merge 3e19816dc0 jk/unleak-fixes later to maint).
261
262 * Use more buffered I/O where we used to call many small write(2)s.
263 (merge a698d67b08 rs/more-buffered-io later to maint).
264
265 * The patch-id computation did not ignore the "incomplete last line"
266 marker like whitespaces.
267 (merge 82a62015a7 rs/patch-id-with-incomplete-line later to maint).
268
e1971363
JH
269 * Updates into a lazy/partial clone with a submodule did not work
270 well with transfer.fsckobjects set.
271
272 * The parser for "git for-each-ref --format=..." was too loose when
273 parsing the "%(trailers...)" atom, and forgot that "trailers" and
274 "trailers:<modifiers>" are the only two allowed forms, which has
275 been corrected.
276 (merge 2c22e102f8 hv/ref-filter-trailers-atom-parsing-fix later to maint).
277
278 * Long ago, we decided to use 3 threads by default when running the
279 index-pack task in parallel, which has been adjusted a bit upwards.
280 (merge fbff95b67f jk/index-pack-w-more-threads later to maint).
281
282 * "git restore/checkout --no-overlay" with wildcarded pathspec
283 mistakenly removed matching paths in subdirectories, which has been
284 corrected.
285 (merge bfda204ade rs/checkout-no-overlay-pathspec-fix later to maint).
286
287 * The description of --cached/--index options in "git apply --help"
288 has been updated.
289 (merge d064702be3 rp/apply-cached-doc later to maint).
290
291 * Feeding "$ZERO_OID" to "git log --ignore-missing --stdin", and
292 running "git log --ignore-missing $ZERO_OID" fell back to start
293 digging from HEAD; it has been corrected to become a no-op, like
294 "git log --tags=no-tag-matches-this-pattern" does.
295 (merge 04a0e98515 jk/rev-input-given-fix later to maint).
296
297 * Various callers of run_command API has been modernized.
298 (merge afbdba391e jc/run-command-use-embedded-args later to maint).
299
3a238e53
JH
300 * List of options offered and accepted by "git add -i/-p" were
301 inconsistent, which have been corrected.
302 (merge ce910287e7 pw/add-p-allowed-options-fix later to maint).
303
304 * Various callers of run_command API has been modernized.
305 (merge afbdba391e jc/run-command-use-embedded-args later to maint).
306
307 * "git diff --stat -w" showed 0-line changes for paths whose changes
308 were only whitespaces, which was not intuitive. We now omit such
309 paths from the stat output.
310 (merge 1cf3d5db9b mr/diff-hide-stat-wo-textual-change later to maint).
311
312 * It was possible for xrealloc() to send a non-NULL pointer that has
313 been freed, which has been fixed.
314 (merge 6479ea4a8a jk/xrealloc-avoid-use-after-free later to maint).
315
54e85e7a 316 * "git status" has trouble showing where it came from by interpreting
385c171a 317 reflog entries that record certain events, e.g. "checkout @{u}", and
54e85e7a
JH
318 gives a hard/fatal error. Even though it inherently is impossible
319 to give a correct answer because the reflog entries lose some
320 information (e.g. "@{u}" does not record what branch the user was
321 on hence which branch 'the upstream' needs to be computed, and even
322 if the record were available, the relationship between branches may
323 have changed), at least hide the error to allow "status" show its
324 output.
325
385c171a
JH
326 * "git status --short" quoted a path with SP in it when tracked, but
327 not those that are untracked, ignored or unmerged. They are all
328 shown quoted consistently.
329
330 * "git diff/show" on a change that involves a submodule used to read
331 the information on commits in the submodule from a wrong repository
332 and gave a wrong information when the commit-graph is involved.
333 (merge 85a1ec2c32 mf/submodule-summary-with-correct-repository later to maint).
334
335 * Unlike "git config --local", "git config --worktree" did not fail
336 early and cleanly when started outside a git repository.
337 (merge 378fe5fc3d mt/config-fail-nongit-early later to maint).
338
79bcaf00 339 * Other code cleanup, docfix, build fix, etc.
e8ab941b
JH
340 (merge 84544f2ea3 sk/typofixes later to maint).
341 (merge b17f411ab5 ar/help-guides-doc later to maint).
342 (merge 98c6871fad rs/grep-simpler-parse-object-or-die-call later to maint).
343 (merge 861c4ce141 en/typofixes later to maint).
344 (merge 60e47f6773 sg/ci-git-path-fix-with-pyenv later to maint).
345 (merge e2bfa50ac3 jb/doc-packfile-name later to maint).
4f0a8be7
JH
346 (merge 918d8ff780 es/worktree-cleanup later to maint).
347 (merge dc156bc31f ma/t1450-quotefix later to maint).
348 (merge 56e743426b en/merge-recursive-comment-fixes later to maint).
349 (merge 7d23ff818f rs/bisect-oid-to-hex-fix later to maint).
350 (merge de20baf2c9 ny/notes-doc-sample-update later to maint).
351 (merge f649aaaf82 so/rev-parser-errormessage-fix later to maint).
878e7276 352 (merge 6103d58b7f bc/sha-256-cvs-svn-updates later to maint).
2befe972 353 (merge ac900fddb7 ma/stop-progress-null-fix later to maint).
675a4aaf
JH
354 (merge e767963ab6 rs/upload-pack-sigchain-fix later to maint).
355 (merge a831908599 rs/preserve-merges-unused-code-removal later to maint).
356 (merge 6dfefe70a9 jb/commit-graph-doc-fix later to maint).
357 (merge 847b37271e pb/set-url-docfix later to maint).
e9b77c84
JH
358 (merge 748f733d54 mt/checkout-entry-dead-code-removal later to maint).
359 (merge ce820cbd58 dl/subtree-docs later to maint).
20de7e7e 360 (merge 55fe225dde jk/leakfix later to maint).
3a238e53
JH
361 (merge ee22a29215 so/pretty-abbrev-doc later to maint).
362 (merge 3100fd5588 jc/post-checkout-doc later to maint).
363 (merge 17bae89476 pb/doc-external-diff-env later to maint).
54e85e7a 364 (merge 27ed6ccc12 jk/worktree-check-clean-leakfix later to maint).
385c171a
JH
365 (merge 1302badd16 ea/blame-use-oideq later to maint).
366 (merge e6d5a11fed al/t3200-back-on-a-branch later to maint).
367 (merge 324efcf6b6 pw/add-p-leakfix later to maint).
368 (merge 1c6ffb546b jk/add-i-fixes later to maint).