Merge branch 'jk/drop-unaligned-loads'
[git] / Documentation / RelNotes / 2.29.0.txt
1 Git 2.29 Release Notes
2 ======================
3
4 Updates since v2.28
5 -------------------
6
7 UI, 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
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
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
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
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
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
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
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
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
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
70  * "format-patch --range-diff=<prev> <origin>..HEAD" has been taught
71    not to ignore <origin> when <prev> is a single version.
72
73  * "add -p" now allows editing paths that were only added in intent.
74
75  * The 'meld' backend of the "git mergetool" learned to give the
76    underlying 'meld' the '--auto-merge' option, which would help
77    reduce the amount of text that requires manual merging.
78
79  * "git for-each-ref" and friends that list refs used to allow only
80    one --merged or --no-merged to filter them; they learned to take
81    combination of both kind of filtering.
82
83  * "git maintenance", a "git gc"'s big brother, has been introduced to
84    take care of more repository maintenance tasks, not limited to the
85    object database cleaning.
86
87  * "git receive-pack" that accepts requests by "git push" learned to
88    outsource most of the ref updates to the new "proc-receive" hook.
89
90  * "git push" that wants to be atomic and wants to send push
91    certificate learned not to prepare and sign the push certificate
92    when it fails the local check (hence due to atomicity it is known
93    that no certificate is needed).
94
95  * "git commit-graph write" learned to limit the number of bloom
96    filters that are computed from scratch with the --max-new-filters
97    option.
98
99  * The transport protocol v2 has become the default again.
100
101
102 Performance, Internal Implementation, Development Support etc.
103
104  * The changed-path Bloom filter is improved using ideas from an
105    independent implementation.
106
107  * Updates to the changed-paths bloom filter.
108
109  * The test framework has been updated so that most tests will run
110    with predictable (artificial) timestamps.
111
112  * Preliminary clean-up of the refs API in preparation for adding a
113    new refs backend "reftable".
114
115  * Dev support to limit the use of test_must_fail to only git commands.
116
117  * While packing many objects in a repository with a promissor remote,
118    lazily fetching missing objects from the promissor remote one by
119    one may be inefficient---the code now attempts to fetch all the
120    missing objects in batch (obviously this won't work for a lazy
121    clone that lazily fetches tree objects as you cannot even enumerate
122    what blobs are missing until you learn which trees are missing).
123
124  * The pretend-object mechanism checks if the given object already
125    exists in the object store before deciding to keep the data
126    in-core, but the check would have triggered lazy fetching of such
127    an object from a promissor remote.
128
129  * The argv_array API is useful for not just managing argv but any
130    "vector" (NULL-terminated array) of strings, and has seen adoption
131    to a certain degree.  It has been renamed to "strvec" to reduce the
132    barrier to adoption.
133
134  * The final leg of SHA-256 transition plus doc updates.  Note that
135    there is no inter-operability between SHA-1 and SHA-256
136    repositories yet.
137
138  * CMake support to build with MSVC for Windows bypassing the Makefile.
139
140  * A new helper function has_object() has been introduced to make it
141    easier to mark object existence checks that do and don't want to
142    trigger lazy fetches, and a few such checks are converted using it.
143
144  * A no-op replacement function implemented as a C preprocessor macro
145    does not perform as good a job as one implemented as a "static
146    inline" function in catching errors in parameters; replace the
147    former with the latter in <git-compat-util.h> header.
148
149  * Test framework update.
150    (merge d572f52a64 es/test-cmp-typocatcher later to maint).
151
152  * Updates to "git merge" tests, in preparation for a new merge
153    strategy backend.
154
155  * midx and commit-graph files now use the byte defined in their file
156    format specification for identifying the hash function used for
157    object names.
158
159  * The FETCH_HEAD is now always read from the filesystem regardless of
160    the ref backend in use, as its format is much richer than the
161    normal refs, and written directly by "git fetch" as a plain file..
162
163  * A handful of places in in-tree code still relied on being able to
164    execute the git subcommands, especially built-ins, in "git-foo"
165    form, which have been corrected.
166
167  * An unused binary has been discarded, and and a bunch of commands
168    have been turned into into built-in.
169
170  * A handful of places in in-tree code still relied on being able to
171    execute the git subcommands, especially built-ins, in "git-foo"
172    form, which have been corrected.
173
174  * When a packfile is removed by "git repack", multi-pack-index gets
175    cleared; the code was taught to do so less aggressively by first
176    checking if the midx actually refers to a pack that no longer
177    exists.
178
179  * Internal API clean-up to handle two options "diff-index" and "log"
180    have, which happen to share the same short form, more sensibly.
181
182  * The "add -i/-p" machinery has been written in C but it is not used
183    by default yet.  It is made default to those who are participating
184    in feature.experimental experiment.
185
186  * Allow maintainers to tweak $(TAR) invocations done while making
187    distribution tarballs.
188
189  * "git index-pack" learned to resolve deltified objects with greater
190    parallelism.
191
192  * "diff-highlight" (in contrib/) had a logic to flush its output upon
193    seeing a blank line but the way it detected a blank line was broken.
194
195
196 Fixes since v2.28
197 -----------------
198
199  * "git clone --separate-git-dir=$elsewhere" used to stomp on the
200    contents of the existing directory $elsewhere, which has been
201    taught to fail when $elsewhere is not an empty directory.
202    (merge dfaa209a79 bw/fail-cloning-into-non-empty later to maint).
203
204  * With the base fix to 2.27 regresion, any new extensions in a v0
205    repository would still be silently honored, which is not quite
206    right.  Instead, complain and die loudly.
207    (merge ec91ffca04 jk/reject-newer-extensions-in-v0 later to maint).
208
209  * Fetching from a lazily cloned repository resulted at the server
210    side in attempts to lazy fetch objects that the client side has,
211    many of which will not be available from the third-party anyway.
212    (merge 77aa0941ce jt/avoid-lazy-fetching-upon-have-check later to maint).
213
214  * Fix to an ancient bug caused by an over-eager attempt for
215    optimization.
216    (merge a98f7fb366 rs/add-index-entry-optim-fix later to maint).
217
218  * Pushing a ref whose name contains non-ASCII character with the
219    "--force-with-lease" option did not work over smart HTTP protocol,
220    which has been corrected.
221    (merge cd85b447bf bc/push-cas-cquoted-refname later to maint).
222
223  * "git mv src dst", when src is an unmerged path, errored out
224    correctly but with an incorrect error message to claim that src is
225    not tracked, which has been clarified.
226    (merge 9b906af657 ct/mv-unmerged-path-error later to maint).
227
228  * Fix to a regression introduced during 2.27 cycle.
229    (merge cada7308ad en/fill-directory-exponential later to maint).
230
231  * Command line completion (in contrib/) update.
232    (merge 688b87c81b mp/complete-show-color-moved later to maint).
233
234  * All "mergy" operations that internally use the merge-recursive
235    machinery should honor the merge.renormalize configuration, but
236    many of them didn't.
237
238  * Doc cleanup around "worktree".
239    (merge dc9c144be5 es/worktree-doc-cleanups later to maint).
240
241  * The "git blame --first-parent" option was not documented, but now
242    it is.
243    (merge 11bc12ae1e rp/blame-first-parent-doc later to maint).
244
245  * The logic to find the ref transaction hook script attempted to
246    cache the path to the found hook without realizing that it needed
247    to keep a copied value, as the API it used returned a transitory
248    buffer space.  This has been corrected.
249    (merge 09b2aa30c9 ps/ref-transaction-hook later to maint).
250
251  * Recent versions of "git diff-files" shows a diff between the index
252    and the working tree for "intent-to-add" paths as a "new file"
253    patch; "git apply --cached" should be able to take "git diff-files"
254    and should act as an equivalent to "git add" for the path, but the
255    command failed to do so for such a path.
256    (merge 4c025c667e rp/apply-cached-with-i-t-a later to maint).
257
258  * "git diff [<tree-ish>] $path" for a $path that is marked with i-t-a
259    bit was not showing the mode bits from the working tree.
260    (merge cb0dd22b82 rp/ita-diff-modefix later to maint).
261
262  * Ring buffer with size 4 used for bin-hex translation resulted in a
263    wrong object name in the sequencer's todo output, which has been
264    corrected.
265    (merge 5da69c0dac ak/sequencer-fix-find-uniq-abbrev later to maint).
266
267  * When given more than one target line ranges, "git blame -La,b
268    -Lc,d" was over-eager to coalesce groups of original lines and
269    showed incorrect results, which has been corrected.
270    (merge c2ebaa27d6 jk/blame-coalesce-fix later to maint).
271
272  * The regexp to identify the function boundary for FORTRAN programs
273    has been updated.
274    (merge 75c3b6b2e8 pb/userdiff-fortran-update later to maint).
275
276  * A few end-user facing messages have been updated to be
277    hash-algorithm agnostic.
278    (merge 4279000d3e jc/object-names-are-not-sha-1 later to maint).
279
280  * "unlink" emulation on MinGW has been optimized.
281    (merge 680e0b4524 jh/mingw-unlink later to maint).
282
283  * The purpose of "git init --separate-git-dir" is to initialize a
284    new project with the repository separate from the working tree,
285    or, in the case of an existing project, to move the repository
286    (the .git/ directory) out of the working tree. It does not make
287    sense to use --separate-git-dir with a bare repository for which
288    there is no working tree, so disallow its use with bare
289    repositories.
290    (merge ccf236a23a es/init-no-separate-git-dir-in-bare later to maint).
291
292  * "ls-files -o" mishandled the top-level directory of another git
293    working tree that hangs in the current git working tree.
294    (merge ab282aa548 en/dir-nonbare-embedded later to maint).
295
296  * Fix some incorrect UNLEAK() annotations.
297    (merge 3e19816dc0 jk/unleak-fixes later to maint).
298
299  * Use more buffered I/O where we used to call many small write(2)s.
300    (merge a698d67b08 rs/more-buffered-io later to maint).
301
302  * The patch-id computation did not ignore the "incomplete last line"
303    marker like whitespaces.
304    (merge 82a62015a7 rs/patch-id-with-incomplete-line later to maint).
305
306  * Updates into a lazy/partial clone with a submodule did not work
307    well with transfer.fsckobjects set.
308
309  * The parser for "git for-each-ref --format=..." was too loose when
310    parsing the "%(trailers...)" atom, and forgot that "trailers" and
311    "trailers:<modifiers>" are the only two allowed forms, which has
312    been corrected.
313    (merge 2c22e102f8 hv/ref-filter-trailers-atom-parsing-fix later to maint).
314
315  * Long ago, we decided to use 3 threads by default when running the
316    index-pack task in parallel, which has been adjusted a bit upwards.
317    (merge fbff95b67f jk/index-pack-w-more-threads later to maint).
318
319  * "git restore/checkout --no-overlay" with wildcarded pathspec
320    mistakenly removed matching paths in subdirectories, which has been
321    corrected.
322    (merge bfda204ade rs/checkout-no-overlay-pathspec-fix later to maint).
323
324  * The description of --cached/--index options in "git apply --help"
325    has been updated.
326    (merge d064702be3 rp/apply-cached-doc later to maint).
327
328  * Feeding "$ZERO_OID" to "git log --ignore-missing --stdin", and
329    running "git log --ignore-missing $ZERO_OID" fell back to start
330    digging from HEAD; it has been corrected to become a no-op, like
331    "git log --tags=no-tag-matches-this-pattern" does.
332    (merge 04a0e98515 jk/rev-input-given-fix later to maint).
333
334  * Various callers of run_command API has been modernized.
335    (merge afbdba391e jc/run-command-use-embedded-args later to maint).
336
337  * List of options offered and accepted by "git add -i/-p" were
338    inconsistent, which have been corrected.
339    (merge ce910287e7 pw/add-p-allowed-options-fix later to maint).
340
341  * Various callers of run_command API has been modernized.
342    (merge afbdba391e jc/run-command-use-embedded-args later to maint).
343
344  * "git diff --stat -w" showed 0-line changes for paths whose changes
345    were only whitespaces, which was not intuitive.  We now omit such
346    paths from the stat output.
347    (merge 1cf3d5db9b mr/diff-hide-stat-wo-textual-change later to maint).
348
349  * It was possible for xrealloc() to send a non-NULL pointer that has
350    been freed, which has been fixed.
351    (merge 6479ea4a8a jk/xrealloc-avoid-use-after-free later to maint).
352
353  * "git status" has trouble showing where it came from by interpreting
354    reflog entries that record certain events, e.g. "checkout @{u}", and
355    gives a hard/fatal error.  Even though it inherently is impossible
356    to give a correct answer because the reflog entries lose some
357    information (e.g. "@{u}" does not record what branch the user was
358    on hence which branch 'the upstream' needs to be computed, and even
359    if the record were available, the relationship between branches may
360    have changed), at least hide the error to allow "status" show its
361    output.
362
363  * "git status --short" quoted a path with SP in it when tracked, but
364    not those that are untracked, ignored or unmerged.  They are all
365    shown quoted consistently.
366
367  * "git diff/show" on a change that involves a submodule used to read
368    the information on commits in the submodule from a wrong repository
369    and gave a wrong information when the commit-graph is involved.
370    (merge 85a1ec2c32 mf/submodule-summary-with-correct-repository later to maint).
371
372  * Unlike "git config --local", "git config --worktree" did not fail
373    early and cleanly when started outside a git repository.
374    (merge 378fe5fc3d mt/config-fail-nongit-early later to maint).
375
376  * There is a logic to estimate how many objects are in the
377    repository, which is mean to run once per process invocation, but
378    it ran every time the estimated value was requested.
379    (merge 67bb65de5d jk/dont-count-existing-objects-twice later to maint).
380
381  * "git remote set-head" that failed still said something that hints
382    the operation went through, which was misleading.
383    (merge 5a07c6c3c2 cs/don-t-pretend-a-failed-remote-set-head-succeeded later to maint).
384
385  * "git fetch --all --ipv4/--ipv6" forgot to pass the protocol options
386    to instances of the "git fetch" that talk to individual remotes,
387    which has been corrected.
388    (merge 4e735c1326 ar/fetch-ipversion-in-all later to maint).
389
390  * The "unshelve" subcommand of "git p4" used incorrectly used
391    commit^N where it meant to say commit~N to name the Nth generation
392    ancestor, which has been corrected.
393    (merge 0acbf5997f ld/p4-unshelve-fix later to maint).
394
395  * "git clone" that clones from SHA-1 repository, while
396    GIT_DEFAULT_HASH set to use SHA-256 already, resulted in an
397    unusable repository that half-claims to be SHA-256 repository
398    with SHA-1 objects and refs.  This has been corrected.
399
400  * Adjust sample hooks for hash algorithm other than SHA-1.
401    (merge d8d3d632f4 dl/zero-oid-in-hooks later to maint).
402
403  * "git range-diff" showed incorrect diffstat, which has been
404    corrected.
405
406  * Earlier we taught "git pull" to warn when the user does not say the
407    histories need to be merged, rebased or accepts only fast-
408    forwarding, but the warning triggered for those who have set the
409    pull.ff configuration variable.
410    (merge 54200cef86 ah/pull later to maint).
411
412  * Other code cleanup, docfix, build fix, etc.
413    (merge 84544f2ea3 sk/typofixes later to maint).
414    (merge b17f411ab5 ar/help-guides-doc later to maint).
415    (merge 98c6871fad rs/grep-simpler-parse-object-or-die-call later to maint).
416    (merge 861c4ce141 en/typofixes later to maint).
417    (merge 60e47f6773 sg/ci-git-path-fix-with-pyenv later to maint).
418    (merge e2bfa50ac3 jb/doc-packfile-name later to maint).
419    (merge 918d8ff780 es/worktree-cleanup later to maint).
420    (merge dc156bc31f ma/t1450-quotefix later to maint).
421    (merge 56e743426b en/merge-recursive-comment-fixes later to maint).
422    (merge 7d23ff818f rs/bisect-oid-to-hex-fix later to maint).
423    (merge de20baf2c9 ny/notes-doc-sample-update later to maint).
424    (merge f649aaaf82 so/rev-parser-errormessage-fix later to maint).
425    (merge 6103d58b7f bc/sha-256-cvs-svn-updates later to maint).
426    (merge ac900fddb7 ma/stop-progress-null-fix later to maint).
427    (merge e767963ab6 rs/upload-pack-sigchain-fix later to maint).
428    (merge a831908599 rs/preserve-merges-unused-code-removal later to maint).
429    (merge 6dfefe70a9 jb/commit-graph-doc-fix later to maint).
430    (merge 847b37271e pb/set-url-docfix later to maint).
431    (merge 748f733d54 mt/checkout-entry-dead-code-removal later to maint).
432    (merge ce820cbd58 dl/subtree-docs later to maint).
433    (merge 55fe225dde jk/leakfix later to maint).
434    (merge ee22a29215 so/pretty-abbrev-doc later to maint).
435    (merge 3100fd5588 jc/post-checkout-doc later to maint).
436    (merge 17bae89476 pb/doc-external-diff-env later to maint).
437    (merge 27ed6ccc12 jk/worktree-check-clean-leakfix later to maint).
438    (merge 1302badd16 ea/blame-use-oideq later to maint).
439    (merge e6d5a11fed al/t3200-back-on-a-branch later to maint).
440    (merge 324efcf6b6 pw/add-p-leakfix later to maint).
441    (merge 1c6ffb546b jk/add-i-fixes later to maint).
442    (merge e40e936551 cd/commit-graph-doc later to maint).