Sync with 'maint'
[alt-git.git] / Documentation / RelNotes / 2.46.0.txt
blob67bae07a40012dd9eab83653ce5bdefc8379d347
1 Git v2.46 Release Notes
2 =======================
4 Backward Compatibility Notes
6  (None at this moment)
8 UI, Workflows & Features
10  * The "--rfc" option of "git format-patch" learned to take an
11    optional string value to be used in place of "RFC" to tweak the
12    "[PATCH]" on the subject header.
14  * The credential helper protocol, together with the HTTP layer, have
15    been enhanced to support authentication schemes different from
16    username & password pair, like Bearer and NTLM.
18  * Command line completion script (in contrib/) learned to complete
19    "git symbolic-ref" a bit better (you need to enable plumbing
20    commands to be completed with GIT_COMPLETION_SHOW_ALL_COMMANDS).
22  * When the user responds to a prompt given by "git add -p" with an
23    unsupported command, list of available commands were given, which
24    was too much if the user knew what they wanted to type but merely
25    made a typo.  Now the user gets a much shorter error message.
27  * The color parsing code learned to handle 12-bit RGB colors, spelled
28    as "#RGB" (in addition to "#RRGGBB" that is already supported).
30  * The operation mode options (like "--get") the "git config" command
31    uses have been deprecated and replaced with subcommands (like "git
32    config get").
34  * "git tag" learned the "--trailer" option to futz with the trailers
35    in the same way as "git commit" does.
37  * A new global "--no-advice" option can be used to disable all advice
38    messages, which is meant to be used only in scripts.
40  * Updates to symbolic refs can now be made as a part of ref
41    transaction.
43  * The trailer API has been reshuffled a bit.
45  * Terminology to call various ref-like things are getting
46    straightened out.
48  * The command line completion script (in contrib/) has been adjusted
49    to the recent update to "git config" that adopted subcommand based
50    UI.
52  * The knobs to tweak how reftable files are written have been made
53    available as configuration variables.
55  * When "git push" notices that the commit at the tip of the ref on
56    the other side it is about to overwrite does not exist locally, it
57    used to first try fetching it if the local repository is a partial
58    clone. The command has been taught not to do so and immediately
59    fail instead.
61  * The promisor.quiet configuration knob can be set to true to make
62    lazy fetching from promisor remotes silent.
64  * The inter/range-diff output has been moved to the end of the patch
65    when format-patch adds it to a single patch, instead of writing it
66    before the patch text, to be consistent with what is done for a
67    cover letter for a multi-patch series.
69  * A new command has been added to migrate a repository that uses the
70    files backend for its ref storage to use the reftable backend, with
71    limitations.
73  * "git diff --exit-code --ext-diff" learned to take the exit status
74    of the external diff driver into account when deciding the exit
75    status of the overall "git diff" invocation when configured to do
76    so.
78  * "git update-ref --stdin" learned to handle transactional updates of
79    symbolic-refs.
81  * "git format-patch --interdiff" for multi-patch series learned to
82    turn on cover letters automatically (unless told never to enable
83    cover letter with "--no-cover-letter" and such).
85  * The "--heads" option of "ls-remote" and "show-ref" has been been
86    deprecated; "--branches" replaces "--heads".
88  * For over a year, setting add.interactive.useBuiltin configuration
89    variable did nothing but giving a "this does not do anything"
90    warning.  The warning has been removed.
93 Performance, Internal Implementation, Development Support etc.
95  * Advertise "git contacts", a tool for newcomers to find people to
96    ask review for their patches, a bit more in our developer
97    documentation.
99  * In addition to building the objects needed, try to link the objects
100    that are used in fuzzer tests, to make sure at least they build
101    without bitrot, in Linux CI runs.
103  * Code to write out reftable has seen some optimization and
104    simplification.
106  * Tests to ensure interoperability between reftable written by jgit
107    and our code have been added and enabled in CI.
109  * The singleton index_state instance "the_index" has been eliminated
110    by always instantiating "the_repository" and replacing references
111    to "the_index"  with references to its .index member.
113  * Git-GUI has a new maintainer, Johannes Sixt.
115  * The "test-tool" has been taught to run testsuite tests in parallel,
116    bypassing the need to use the "prove" tool.
118  * The "whitespace check" task that was enabled for GitHub Actions CI
119    has been ported to GitLab CI.
121  * The refs API lost functions that implicitly assumes to work on the
122    primary ref_store by forcing the callers to pass a ref_store as an
123    argument.
125  * Code clean-up to reduce inter-function communication inside
126    builtin/config.c done via the use of global variables.
128  * The pack bitmap code saw some clean-up to prepare for a follow-up topic.
130  * Preliminary code clean-up for "git send-email".
132  * The default "creation-factor" used by "git format-patch" has been
133    raised to make it more aggressively find matching commits.
135  * Before discovering the repository details, We used to assume SHA-1
136    as the "default" hash function, which has been corrected. Hopefully
137    this will smoke out codepaths that rely on such an unwarranted
138    assumptions.
140  * The project decision making policy has been documented.
142  * The strcmp-offset tests have been rewritten using the unit test
143    framework.
145  * "git add -p" learned to complain when an answer with more than one
146    letter is given to a prompt that expects a single letter answer.
148  * The alias-expanded command lines are logged to the trace output.
150  * A new test was added to ensure git commands that are designed to
151    run outside repositories do work.
153  * Basic unit tests for reftable have been reimplemented under the
154    unit test framework.
156  * A pair of test helpers that essentially are unit tests on hash
157    algorithms have been rewritten using the unit-tests framework.
159  * A test helper that essentially is unit tests on the "decorate"
160    logic has been rewritten using the unit-tests framework.
162  * Many memory leaks in the sparse-checkout code paths have been
163    plugged.
165  * "make check-docs" noticed problems and reported to its output but
166    failed to signal its findings with its exit status, which has been
167    corrected.
169  * Building with "-Werror -Wwrite-strings" is now supported.
171  * To help developers, the build procedure now allows builders to use
172    CFLAGS_APPEND to specify additional CFLAGS.
174  * "oidtree" tests were rewritten to use the unit test framework.
176  * The structure of the document that records longer-term project
177    decisions to deprecate/remove/update various behaviour has been
178    outlined.
180  * The pseudo-merge reachability bitmap to help more efficient storage
181    of the reachability bitmap in a repository with too many refs has
182    been added.
184  * When "git merge" sees that the index cannot be refreshed (e.g. due
185    to another process doing the same in the background), it died but
186    after writing MERGE_HEAD etc. files, which was useless for the
187    purpose to recover from the failure.
189  * The output from "git cat-file --batch-check" and "--batch-command
190    (info)" should not be unbuffered, for which some tests have been
191    added.
193  * A CPP macro USE_THE_REPOSITORY_VARIABLE is introduced to help
194    transition the codebase to rely less on the availability of the
195    singleton the_repository instance.
197  * "git version --build-options" reports the version information of
198    OpenSSL and other libraries (if used) in the build.
200  * Memory ownership rules for the in-core representation of
201    remote.*.url configuration values have been straightened out, which
202    resulted in a few leak fixes and code clarification.
205 Fixes since v2.45
206 -----------------
208  * "git rebase --signoff" used to forget that it needs to add a
209    sign-off to the resulting commit when told to continue after a
210    conflict stops its operation.
212  * The procedure to build multi-pack-index got confused by the
213    replace-refs mechanism, which has been corrected by disabling the
214    latter.
216  * The "-k" and "--rfc" options of "format-patch" will now error out
217    when used together, as one tells us not to add anything to the
218    title of the commit, and the other one tells us to add "RFC" in
219    addition to "PATCH".
221  * "git stash -S" did not handle binary files correctly, which has
222    been corrected.
224  * A scheduled "git maintenance" job is expected to work on all
225    repositories it knows about, but it stopped at the first one that
226    errored out.  Now it keeps going.
228  * zsh can pretend to be a normal shell pretty well except for some
229    glitches that we tickle in some of our scripts. Work them around
230    so that "vimdiff" and our test suite works well enough with it.
232  * Command line completion support for zsh (in contrib/) has been
233    updated to stop exposing internal state to end-user shell
234    interaction.
236  * Tests that try to corrupt in-repository files in chunked format did
237    not work well on macOS due to its broken "mv", which has been
238    worked around.
240  * The maximum size of attribute files is enforced more consistently.
242  * Unbreak CI jobs so that we do not attempt to use Python 2 that has
243    been removed from the platform.
245  * Git 2.43 started using the tree of HEAD as the source of attributes
246    in a bare repository, which has severe performance implications.
247    For now, revert the change, without ripping out a more explicit
248    support for the attr.tree configuration variable.
250  * The "--exit-code" option of "git diff" command learned to work with
251    the "--ext-diff" option.
253  * Windows CI running in GitHub Actions started complaining about the
254    order of arguments given to calloc(); the imported regex code uses
255    the wrong order almost consistently, which has been corrected.
257  * Expose "name conflict" error when a ref creation fails due to D/F
258    conflict in the ref namespace, to improve an error message given by
259    "git fetch".
260    (merge 9339fca23e it/refs-name-conflict later to maint).
262  * The SubmittingPatches document now refers folks to manpages
263    translation project.
265  * The documentation for "git diff --name-only" has been clarified
266    that it is about showing the names in the post-image tree.
268  * The credential helper that talks with osx keychain learned to avoid
269    storing back the authentication material it just got received from
270    the keychain.
271    (merge e1ab45b2da kn/osxkeychain-skip-idempotent-store later to maint).
273  * The chainlint script (invoked during "make test") did nothing when
274    it failed to detect the number of available CPUs.  It now falls
275    back to 1 CPU to avoid the problem.
277  * Revert overly aggressive "layered defence" that went into 2.45.1
278    and friends, which broke "git-lfs", "git-annex", and other use
279    cases, so that we can rebuild necessary counterparts in the open.
281  * "git init" in an already created directory, when the user
282    configuration has includeif.onbranch, started to fail recently,
283    which has been corrected.
285  * Memory leaks in "git mv" has been plugged.
287  * The safe.directory configuration knob has been updated to
288    optionally allow leading path matches.
290  * An overly large ".gitignore" files are now rejected silently.
292  * Upon expiration event, the credential subsystem forgot to clear
293    in-core authentication material other than password (whose support
294    was added recently), which has been corrected.
296  * Fix for an embarrassing typo that prevented Python2 tests from running
297    anywhere.
299  * Varargs functions that are unannotated as printf-like or execl-like
300    have been annotated as such.
302  * "git am" has a safety feature to prevent it from starting a new
303    session when there already is a session going.  It reliably
304    triggers when a mbox is given on the command line, but it has to
305    rely on the tty-ness of the standard input.  Add an explicit way to
306    opt out of this safety with a command line option.
307    (merge 62c71ace44 jk/am-retry later to maint).
309  * A leak in "git imap-send" that somehow escapes LSan has been
310    plugged.
312  * Setting core.abbrev too early before the repository set-up
313    (typically in "git clone") caused segfault, which as been
314    corrected.
316  * When the user adds to "git rebase -i" instruction to "pick" a merge
317    commit, the error experience is not pleasant.  Such an error is now
318    caught earlier in the process that parses the todo list.
320  * We forgot to normalize the result of getcwd() to NFC on macOS where
321    all other paths are normalized, which has been corrected.  This still
322    does not address the case where core.precomposeUnicode configuration
323    is not defined globally.
325  * Earlier we stopped using the tree of HEAD as the default source of
326    attributes in a bare repository, but failed to document it.  This
327    has been corrected.
329  * "git update-server-info" and "git commit-graph --write" have been
330    updated to use the tempfile API to avoid leaving cruft after
331    failing.
333  * An unused extern declaration for mingw has been removed to prevent
334    it from causing build failure.
336  * A helper function shared between two tests had a copy-paste bug,
337    which has been corrected.
339  * "git fetch-pack -k -k" without passing "--lock-pack" (which we
340    never do ourselves) did not work at all, which has been corrected.
342  * CI job to build minimum fuzzers learned to pass NO_CURL=NoThanks to
343    the build procedure, as its build environment does not offer, or
344    the rest of the build needs, anything cURL.
345    (merge 4e66b5a990 jc/fuzz-sans-curl later to maint).
347  * "git diff --no-ext-diff" when diff.external is configured ignored
348    the "--color-moved" option.
349    (merge 0f4b0d4cf0 rs/diff-color-moved-w-no-ext-diff-fix later to maint).
351  * Other code cleanup, docfix, build fix, etc.
352    (merge 493fdae046 ew/object-convert-leakfix later to maint).