Merge branch 'ah/merge-ort-i18n'
[git] / Documentation / RelNotes / 2.32.0.txt
1 Git 2.32 Release Notes
2 ======================
3
4 Backward compatibility notes
5 ----------------------------
6
7  * ".gitattributes", ".gitignore", and ".mailmap" files that are
8    symbolic links are ignored.
9
10  * "git apply --3way" used to first attempt a straight application,
11    and only fell back to the 3-way merge algorithm when the stright
12    application failed.  Starting with this version, the command will
13    first try the 3-way merge algorithm and only when it fails (either
14    resulting with conflict or the base versions of blobs are missing),
15    falls back to the usual patch application.
16
17
18 Updates since v2.31
19 -------------------
20
21 UI, Workflows & Features
22
23  * It does not make sense to make ".gitattributes", ".gitignore" and
24    ".mailmap" symlinks, as they are supposed to be usable from the
25    object store (think: bare repositories where HEAD:.mailmap etc. are
26    used).  When these files are symbolic links, we used to read the
27    contents of the files pointed by them by mistake, which has been
28    corrected.
29
30  * "git stash show" learned to optionally show untracked part of the
31    stash.
32
33  * "git log --format='...'" learned "%(describe)" placeholder.
34
35  * "git repack" so far has been only capable of repacking everything
36    under the sun into a single pack (or split by size).  A cleverer
37    strategy to reduce the cost of repacking a repository has been
38    introduced.
39
40  * The http codepath learned to let the credential layer to cache the
41    password used to unlock a certificate that has successfully been
42    used.
43
44  * "git commit --fixup=<commit>", which was to tweak the changes made
45    to the contents while keeping the original log message intact,
46    learned "--fixup=(amend|reword):<commit>", that can be used to
47    tweak both the message and the contents, and only the message,
48    respectively.
49
50  * When accessing a server with a URL like https://user:pass@site/, we
51    did not to fall back to the basic authentication with the
52    credential material embedded in the URL after the "Negotiate"
53    authentication failed.  Now we do.
54
55  * "git send-email" learned to honor the core.hooksPath configuration.
56
57  * "git format-patch -v<n>" learned to allow a reroll count that is
58    not an integer.
59
60  * "git commit" learned "--trailer <key>[=<value>]" option; together
61    with the interpret-trailers command, this will make it easier to
62    support custom trailers.
63
64  * "git clone --reject-shallow" option fails the clone as soon as we
65    notice that we are cloning from a shallow repository.
66
67  * A configuration variable has been added to force tips of certain
68    refs to be given a reachability bitmap.
69
70  * "gitweb" learned "e-mail privacy" feature to redact strings that
71    look like e-mail addresses on various pages.
72
73  * "git apply --3way" has always been "to fall back to 3-way merge
74    only when straight application fails". Swap the order of falling
75    back so that 3-way is always attempted first (only when the option
76    is given, of course) and then straight patch application is used as
77    a fallback when it fails.
78
79  * "git apply" now takes "--3way" and "--cached" at the same time, and
80    work and record results only in the index.
81
82  * The command line completion (in contrib/) has learned that
83    CHERRY_PICK_HEAD is a possible pseudo-ref.
84
85  * Userdiff patterns for "Scheme" has been added.
86
87  * "git log" learned "--diff-merges=<style>" option, with an
88    associated configuration variable log.diffMerges.
89
90  * "git log --format=..." placeholders learned %ah/%ch placeholders to
91    request the --date=human output.
92
93  * Replace GIT_CONFIG_NOSYSTEM mechanism to decline from reading the
94    system-wide configuration file with GIT_CONFIG_SYSTEM that lets
95    users specify from which file to read the system-wide configuration
96    (setting it to an empty file would essentially be the same as
97    setting NOSYSTEM), and introduce GIT_CONFIG_GLOBAL to override the
98    per-user configuration in $HOME/.gitconfig.
99
100  * "git add" and "git rm" learned not to touch those paths that are
101    outside of sparse checkout.
102
103  * "git rev-list" learns the "--filter=object:type=<type>" option,
104    which can be used to exclude objects of the given kind from the
105    packfile generated by pack-objects.
106
107  * The command line completion (in contrib/) for "git stash" has been
108    updated.
109
110  * "git subtree" updates.
111
112  * It is now documented that "format-patch" skips merges.
113
114  * Options to "git pack-objects" that take numeric values like
115    --window and --depth should not accept negative values; the input
116    validation has been tightened.
117
118  * The way the command line specified by the trailer.<token>.command
119    configuration variable receives the end-user supplied value was
120    both error prone and misleading.  An alternative to achieve the
121    same goal in a safer and more intuitive way has been added, as
122    the trailer.<token>.cmd configuration variable, to replace it.
123
124  * "git add -i --dry-run" does not dry-run, which was surprising.  The
125    combination of options has taught to error out.
126
127
128 Performance, Internal Implementation, Development Support etc.
129
130  * Rename detection rework continues.
131
132  * GIT_TEST_FAIL_PREREQS is a mechanism to skip test pieces with
133    prerequisites to catch broken tests that depend on the side effects
134    of optional pieces, but did not work at all when negative
135    prerequisites were involved.
136    (merge 27d578d904 jk/fail-prereq-testfix later to maint).
137
138  * "git diff-index" codepath has been taught to trust fsmonitor status
139    to reduce number of lstat() calls.
140    (merge 7e5aa13d2c nk/diff-index-fsmonitor later to maint).
141
142  * Reorganize Makefile to allow building git.o and other essential
143    objects without extra stuff needed only for testing.
144
145  * Preparatory API changes for parallel checkout.
146
147  * A simple IPC interface gets introduced to build services like
148    fsmonitor on top.
149
150  * Fsck API clean-up.
151
152  * SECURITY.md that is facing individual contributors and end users
153    has been introduced.  Also a procedure to follow when preparing
154    embargoed releases has been spelled out.
155    (merge 09420b7648 js/security-md later to maint).
156
157  * Optimize "rev-list --use-bitmap-index --objects" corner case that
158    uses negative tags as the stopping points.
159
160  * CMake update for vsbuild.
161
162  * An on-disk reverse-index to map the in-pack location of an object
163    back to its object name across multiple packfiles is introduced.
164
165  * Generate [ec]tags under $(QUIET_GEN).
166
167  * Clean-up codepaths that implements "git send-email --validate"
168    option and improves the message from it.
169
170  * The last remnant of gettext-poison has been removed.
171
172  * The test framework has been taught to optionally turn the default
173    merge strategy to "ort" throughout the system where we use
174    three-way merges internally, like cherry-pick, rebase etc.,
175    primarily to enhance its test coverage (the strategy has been
176    available as an explicit "-s ort" choice).
177
178  * A bit of code clean-up and a lot of test clean-up around userdiff
179    area.
180
181  * Handling of "promisor packs" that allows certain objects to be
182    missing and lazily retrievable has been optimized (a bit).
183
184  * When packet_write() fails, we gave an extra error message
185    unnecessarily, which has been corrected.
186
187  * The checkout machinery has been taught to perform the actual
188    write-out of the files in parallel when able.
189
190  * Show errno in the trace output in the error codepath that calls
191    read_raw_ref method.
192
193  * Effort to make the command line completion (in contrib/) safe with
194    "set -u" continues.
195
196  * Tweak a few tests for "log --format=..." that show timestamps in
197    various formats.
198
199  * The reflog expiry machinery has been taught to emit trace events.
200
201  * Over-the-wire protocol learns a new request type to ask for object
202    sizes given a list of object names.
203
204
205 Fixes since v2.31
206 -----------------
207
208  * The fsmonitor interface read from its input without making sure
209    there is something to read from.  This bug is new in 2.31
210    timeframe.
211
212  * The data structure used by fsmonitor interface was not properly
213    duplicated during an in-core merge, leading to use-after-free etc.
214
215  * "git bisect" reimplemented more in C during 2.30 timeframe did not
216    take an annotated tag as a good/bad endpoint well.  This regression
217    has been corrected.
218
219  * Fix macros that can silently inject unintended null-statements.
220
221  * CALLOC_ARRAY() macro replaces many uses of xcalloc().
222
223  * Update insn in Makefile comments to run fuzz-all target.
224
225  * Fix a corner case bug in "git mv" on case insensitive systems,
226    which was introduced in 2.29 timeframe.
227
228  * We had a code to diagnose and die cleanly when a required
229    clean/smudge filter is missing, but an assert before that
230    unnecessarily fired, hiding the end-user facing die() message.
231    (merge 6fab35f748 mt/cleanly-die-upon-missing-required-filter later to maint).
232
233  * Update C code that sets a few configuration variables when a remote
234    is configured so that it spells configuration variable names in the
235    canonical camelCase.
236    (merge 0f1da600e6 ab/remote-write-config-in-camel-case later to maint).
237
238  * A new configuration variable has been introduced to allow choosing
239    which version of the generation number gets used in the
240    commit-graph file.
241    (merge 702110aac6 ds/commit-graph-generation-config later to maint).
242
243  * Perf test update to work better in secondary worktrees.
244    (merge 36e834abc1 jk/perf-in-worktrees later to maint).
245
246  * Updates to memory allocation code around the use of pcre2 library.
247    (merge c1760352e0 ab/grep-pcre2-allocfix later to maint).
248
249  * "git -c core.bare=false clone --bare ..." would have segfaulted,
250    which has been corrected.
251    (merge 75555676ad bc/clone-bare-with-conflicting-config later to maint).
252
253  * When "git checkout" removes a path that does not exist in the
254    commit it is checking out, it wasn't careful enough not to follow
255    symbolic links, which has been corrected.
256    (merge fab78a0c3d mt/checkout-remove-nofollow later to maint).
257
258  * A few option description strings started with capital letters,
259    which were corrected.
260    (merge 5ee90326dc cc/downcase-opt-help later to maint).
261
262  * Plug or annotate remaining leaks that trigger while running the
263    very basic set of tests.
264    (merge 68ffe095a2 ah/plugleaks later to maint).
265
266  * The hashwrite() API uses a buffering mechanism to avoid calling
267    write(2) too frequently. This logic has been refactored to be
268    easier to understand.
269    (merge ddaf1f62e3 ds/clarify-hashwrite later to maint).
270
271  * "git cherry-pick/revert" with or without "--[no-]edit" did not spawn
272    the editor as expected (e.g. "revert --no-edit" after a conflict
273    still asked to edit the message), which has been corrected.
274    (merge 39edfd5cbc en/sequencer-edit-upon-conflict-fix later to maint).
275
276  * "git daemon" has been tightened against systems that take backslash
277    as directory separator.
278    (merge 9a7f1ce8b7 rs/daemon-sanitize-dir-sep later to maint).
279
280  * A NULL-dereference bug has been corrected in an error codepath in
281    "git for-each-ref", "git branch --list" etc.
282    (merge c685450880 jk/ref-filter-segfault-fix later to maint).
283
284  * Streamline the codepath to fix the UTF-8 encoding issues in the
285    argv[] and the prefix on macOS.
286    (merge c7d0e61016 tb/precompose-prefix-simplify later to maint).
287
288  * The command-line completion script (in contrib/) had a couple of
289    references that would have given a warning under the "-u" (nounset)
290    option.
291    (merge c5c0548d79 vs/completion-with-set-u later to maint).
292
293  * When "git pack-objects" makes a literal copy of a part of existing
294    packfile using the reachability bitmaps, its update to the progress
295    meter was broken.
296    (merge 8e118e8490 jk/pack-objects-bitmap-progress-fix later to maint).
297
298  * The dependencies for config-list.h and command-list.h were broken
299    when the former was split out of the latter, which has been
300    corrected.
301    (merge 56550ea718 sg/bugreport-fixes later to maint).
302
303  * "git push --quiet --set-upstream" was not quiet when setting the
304    upstream branch configuration, which has been corrected.
305    (merge f3cce896a8 ow/push-quiet-set-upstream later to maint).
306
307  * The prefetch task in "git maintenance" assumed that "git fetch"
308    from any remote would fetch all its local branches, which would
309    fetch too much if the user is interested in only a subset of
310    branches there.
311    (merge 32f67888d8 ds/maintenance-prefetch-fix later to maint).
312
313  * Clarify that pathnames recorded in Git trees are most often (but
314    not necessarily) encoded in UTF-8.
315    (merge 9364bf465d ab/pathname-encoding-doc later to maint).
316
317  * "git --config-env var=val cmd" weren't accepted (only
318    --config-env=var=val was).
319    (merge c331551ccf ps/config-env-option-with-separate-value later to maint).
320
321  * When the reachability bitmap is in effect, the "do not lose
322    recently created objects and those that are reachable from them"
323    safety to protect us from races were disabled by mistake, which has
324    been corrected.
325    (merge 2ba582ba4c jk/prune-with-bitmap-fix later to maint).
326
327  * Cygwin pathname handling fix.
328    (merge bccc37fdc7 ad/cygwin-no-backslashes-in-paths later to maint).
329
330  * "git rebase --[no-]reschedule-failed-exec" did not work well with
331    its configuration variable, which has been corrected.
332    (merge e5b32bffd1 ab/rebase-no-reschedule-failed-exec later to maint).
333
334  * Portability fix for command line completion script (in contrib/).
335    (merge f2acf763e2 si/zsh-complete-comment-fix later to maint).
336
337  * "git repack -A -d" in a partial clone unnecessarily loosened
338    objects in promisor pack.
339
340  * "git bisect skip" when custom words are used for new/old did not
341    work, which has been corrected.
342
343  * A few variants of informational message "Already up-to-date" has
344    been rephrased.
345    (merge ad9322da03 js/merge-already-up-to-date-message-reword later to maint).
346
347  * "git submodule update --quiet" did not propagate the quiet option
348    down to underlying "git fetch", which has been corrected.
349    (merge 62af4bdd42 nc/submodule-update-quiet later to maint).
350
351  * Document that our test can use "local" keyword.
352    (merge a84fd3bcc6 jc/test-allows-local later to maint).
353
354  * The word-diff mode has been taught to work better with a word
355    regexp that can match an empty string.
356    (merge 0324e8fc6b pw/word-diff-zero-width-matches later to maint).
357
358  * "git p4" learned to find branch points more efficiently.
359    (merge 6b79818bfb jk/p4-locate-branch-point-optim later to maint).
360
361  * Other code cleanup, docfix, build fix, etc.
362    (merge f451960708 dl/cat-file-doc-cleanup later to maint).
363    (merge 12604a8d0c sv/t9801-test-path-is-file-cleanup later to maint).
364    (merge ea7e63921c jr/doc-ignore-typofix later to maint).
365    (merge 23c781f173 ps/update-ref-trans-hook-doc later to maint).
366    (merge 42efa1231a jk/filter-branch-sha256 later to maint).
367    (merge 4c8e3dca6e tb/push-simple-uses-branch-merge-config later to maint).
368    (merge 6534d436a2 bs/asciidoctor-installation-hints later to maint).
369    (merge 47957485b3 ab/read-tree later to maint).
370    (merge 2be927f3d1 ab/diff-no-index-tests later to maint).
371    (merge 76593c09bb ab/detox-gettext-tests later to maint).
372    (merge 28e29ee38b jc/doc-format-patch-clarify later to maint).
373    (merge fc12b6fdde fm/user-manual-use-preface later to maint).
374    (merge dba94e3a85 cc/test-helper-bloom-usage-fix later to maint).
375    (merge 61a7660516 hn/reftable-tables-doc-update later to maint).
376    (merge 81ed96a9b2 jt/fetch-pack-request-fix later to maint).
377    (merge 151b6c2dd7 jc/doc-do-not-capitalize-clarification later to maint).
378    (merge 9160068ac6 js/access-nul-emulation-on-windows later to maint).
379    (merge 7a14acdbe6 po/diff-patch-doc later to maint).
380    (merge f91371b948 pw/patience-diff-clean-up later to maint).
381    (merge 3a7f0908b6 mt/clean-clean later to maint).