Git 2.44-rc2
[alt-git.git] / Documentation / RelNotes / 2.44.0.txt
blob14f9ce822623cf08f10124bc4db378e537dc6841
1 Git v2.44 Release Notes
2 =======================
4 Backward Compatibility Notes
6  * "git checkout -B <branch>" used to allow switching to a branch that
7    is in use on another worktree, but this was by mistake.  The users
8    need to use "--ignore-other-worktrees" option.
11 UI, Workflows & Features
13  * "git add" and "git stash" learned to support the ":(attr:...)"
14    magic pathspec.
16  * "git rebase --autosquash" is now enabled for non-interactive rebase,
17    but it is still incompatible with the apply backend.
19  * Introduce "git replay", a tool meant on the server side without
20    working tree to recreate a history.
22  * "git merge-file" learned to take the "--diff-algorithm" option to
23    use algorithm different from the default "myers" diff.
25  * Command line completion (in contrib/) learned to complete path
26    arguments to the "add/set" subcommands of "git sparse-checkout"
27    better.
29  * "git checkout -B <branch> [<start-point>]" allowed a branch that is
30    in use in another worktree to be updated and checked out, which
31    might be a bit unexpected.  The rule has been tightened, which is a
32    breaking change.  "--ignore-other-worktrees" option is required to
33    unbreak you, if you are used to the current behaviour that "-B"
34    overrides the safety.
36  * The builtin_objectmode attribute is populated for each path
37    without adding anything in .gitattributes files, which would be
38    useful in magic pathspec, e.g., ":(attr:builtin_objectmode=100755)"
39    to limit to executables.
41  * "git fetch" learned to pay attention to "fetch.all" configuration
42    variable, which pretends as if "--all" was passed from the command
43    line when no remote parameter was given.
45  * In addition to (rather cryptic) Security Identifiers, show username
46    and domain in the error message when we barf on mismatch between
47    the Git directory and the current user on Windows.
49  * The error message given when "git branch -d branch" fails due to
50    commits unique to the branch has been split into an error and a new
51    conditional advice message.
53  * When given an existing but unreadable file as a configuration file,
54    gitweb behaved as if the file did not exist at all, but now it
55    errors out.  This is a change that may break backward compatibility.
57  * When $HOME/.gitconfig is missing but XDG config file is available, we
58    should write into the latter, not former.  "git gc" and "git
59    maintenance" wrote into a wrong "global config" file, which have
60    been corrected.
62  * Define "special ref" as a very narrow set that consists of
63    FETCH_HEAD and MERGE_HEAD, and clarify everything else that used to
64    be classified as such are actually just pseudorefs.
66  * All conditional "advice" messages show how to turn them off, which
67    becomes repetitive.  Setting advice.* configuration explicitly on
68    now omits the instruction part.
70  * The "disable repository discovery of a bare repository" check,
71    triggered by setting safe.bareRepository configuration variable to
72    'explicit', has been loosened to exclude the ".git/" directory inside
73    a non-bare repository from the check.  So you can do "cd .git &&
74    git cmd" to run a Git command that works on a bare repository without
75    explicitly specifying $GIT_DIR now.
77  * The completion script (in contrib/) learned more options that can
78    be used with "git log".
80  * The labels on conflict markers for the common ancestor, our version,
81    and the other version are available to custom 3-way merge driver
82    via %S, %X, and %Y placeholders.
84  * The write codepath for the reftable data learned to honor
85    core.fsync configuration.
87  * The "--fsck-objects" option of "git index-pack" now can take the
88    optional parameter to tweak severity of different fsck errors.
90  * The wincred credential backend has been taught to support oauth
91    refresh token the same way as credential-cache and
92    credential-libsecret backends.
94  * Command line completion support (in contrib/) has been
95    updated for "git bisect".
97  * "git branch" and friends learned to use the formatted text as
98    sorting key, not the underlying timestamp value, when the --sort
99    option is used with author or committer timestamp with a format
100    specifier (e.g., "--sort=creatordate:format:%H:%M:%S").
102  * The command line completion script (in contrib/) learned to
103    complete configuration variable names better.
106 Performance, Internal Implementation, Development Support etc.
108  * Process to add some form of low-level unit tests has started.
110  * Add support for GitLab CI.
112  * "git for-each-ref --no-sort" still sorted the refs alphabetically
113    which paid non-trivial cost.  It has been redefined to show output
114    in an unspecified order, to allow certain optimizations to take
115    advantage of.
117  * Simplify API implementation to delete references by eliminating
118    duplication.
120  * Subject approxidate() and show_date() machinery to OSS-Fuzz.
122  * A new helper to let us pretend that we called lstat() when we know
123    our cache_entry is up-to-date via fsmonitor.
125  * The optimization based on fsmonitor in the "diff --cached"
126    codepath is resurrected with the "fake-lstat" introduced earlier.
128  * Test balloon to use C99 "bool" type from <stdbool.h> has been
129    added.
131  * "git clone" has been prepared to allow cloning a repository with
132    non-default hash function into a repository that uses the reftable
133    backend.
135  * Streaming spans of packfile data used to be done only from a
136    single, primary, pack in a repository with multiple packfiles.  It
137    has been extended to allow reuse from other packfiles, too.
139  * Comment updates to help developers not to attempt to modify
140    messages from plumbing commands that must stay constant.
142    It might make sense to reassess the plumbing needs every few years,
143    but that should be done as a separate effort.
145  * Move test-ctype helper to the unit-test framework.
147  * Instead of manually creating refs/ hierarchy on disk upon a
148    creation of a secondary worktree, which is only usable via the
149    files backend, use the refs API to populate it.
151  * CI for GitLab learned to drive macOS jobs.
153  * A few tests to "git commit -o <pathspec>" and "git commit -i
154    <pathspec>" has been added.
156  * Tests on ref API are moved around to prepare for reftable.
158  * The Makefile often had to say "-L$(path) -R$(path)" that repeats
159    the path to the same library directory for link time and runtime.
160    A Makefile template is used to reduce such repetition.
162  * The priority queue test has been migrated to the unit testing
163    framework.
165  * Setting `feature.experimental` opts the user into multi-pack reuse
166    experiment
168  * Squelch node.js 16 deprecation warnings from GitHub Actions CI
169    by updating actions/github-script and actions/checkout that use
170    node.js 20.
172  * The mechanism to report the filename in the source code, used by
173    the unit-test machinery, assumed that the compiler expanded __FILE__
174    to the path to the source given to the $(CC), but some compilers
175    give full path, breaking the output.  This has been corrected.
178 Fixes since v2.43
179 -----------------
181  * The way CI testing used "prove" could lead to running the test
182    suite twice needlessly, which has been corrected.
184  * Update ref-related tests.
186  * "git format-patch --encode-email-headers" ignored the option when
187    preparing the cover letter, which has been corrected.
189  * Newer versions of Getopt::Long started giving warnings against our
190    (ab)use of it in "git send-email".  Bump the minimum version
191    requirement for Perl to 5.8.1 (from September 2002) to allow
192    simplifying our implementation.
194  * Earlier we stopped relying on commit-graph that (still) records
195    information about commits that are lost from the object store,
196    which has negative performance implications.  The default has been
197    flipped to disable this pessimization.
199  * Stale URLs have been updated to their current counterparts (or
200    archive.org) and HTTP links are replaced with working HTTPS links.
202  * trace2 streams used to record the URLs that potentially embed
203    authentication material, which has been corrected.
205  * The sample pre-commit hook that tries to catch introduction of new
206    paths that use potentially non-portable characters did not notice
207    an existing path getting renamed to such a problematic path, when
208    rename detection was enabled.
210  * The command line parser for the "log" family of commands was too
211    loose when parsing certain numbers, e.g., silently ignoring the
212    extra 'q' in "git log -n 1q" without complaining, which has been
213    tightened up.
215  * "git $cmd --end-of-options --rev -- --path" for some $cmd failed
216    to interpret "--rev" as a rev, and "--path" as a path.  This was
217    fixed for many programs like "reset" and "checkout".
219  * "git bisect reset" has been taught to clean up state files and refs
220    even when BISECT_START file is gone.
222  * Some codepaths did not correctly parse configuration variables
223    specified with valueless "true", which has been corrected.
225  * Code clean-up for sanity checking of command line options for "git
226    show-ref".
228  * The code to parse the From e-mail header has been updated to avoid
229    recursion.
231  * "git fetch --atomic" issued an unnecessary empty error message,
232    which has been corrected.
234  * Command line completion script (in contrib/) learned to work better
235    with the reftable backend.
237  * "git status" is taught to show both the branch being bisected and
238    being rebased when both are in effect at the same time.
240  * "git archive --list extra garbage" silently ignored excess command
241    line parameters, which has been corrected.
243  * "git sparse-checkout set" added default patterns even when the
244    patterns are being fed from the standard input, which has been
245    corrected.
247  * "git sparse-checkout (add|set) --[no-]cone --end-of-options" did
248    not handle "--end-of-options" correctly after a recent update.
250  * Unlike other environment variables that took the usual
251    true/false/yes/no as well as 0/1, GIT_FLUSH only understood 0/1,
252    which has been corrected.
254  * Clearing in-core repository (happens during e.g., "git fetch
255    --recurse-submodules" with commit graph enabled) made in-core
256    commit object in an inconsistent state by discarding the necessary
257    data from commit-graph too early, which has been corrected.
259  * Update to a new feature recently added, "git show-ref --exists".
261  * oss-fuzz tests are built and run in CI.
262    (merge c4a9cf1df3 js/oss-fuzz-build-in-ci later to maint).
264  * Rename detection logic ignored the final line of a file if it is an
265    incomplete line.
267  * GitHub CI update.
268    (merge 0188b2c8e0 pb/ci-github-skip-logs-for-broken-tests later to maint).
270  * "git diff --no-rename A B" did not disable rename detection but did
271    not trigger an error from the command line parser.
273  * "git archive --remote=<remote>" learned to talk over the smart
274    http (aka stateless) transport.
275    (merge 176cd68634 jx/remote-archive-over-smart-http later to maint).
277  * Fetching via protocol v0 over Smart HTTP transport sometimes failed
278    to correctly auto-follow tags.
279    (merge fba732c462 jk/fetch-auto-tag-following-fix later to maint).
281  * The documentation for the --exclude-per-directory option marked it
282    as deprecated, which confused readers into thinking there may be a
283    plan to remove it in the future, which was not our intention.
284    (merge 0009542cab jc/ls-files-doc-update later to maint).
286  * "git diff --no-index file1 file2" segfaulted while invoking the
287    external diff driver, which has been corrected.
289  * Rewrite //-comments to /* comments */ in files whose comments
290    prevalently use the latter.
292  * Cirrus CI jobs started breaking because we specified version of
293    FreeBSD that is no longer available, which has been corrected.
294    (merge 81fffb66d3 cb/use-freebsd-13-2-at-cirrus-ci later to maint).
296  * A caller called index_file_exists() that takes a string expressed
297    as <ptr, length> with a wrong length, which has been corrected.
298    (merge 156e28b36d jh/sparse-index-expand-to-path-fix later to maint).
300  * A failed "git tag -s" did not necessarily result in an error
301    depending on the crypto backend, which has been corrected.
303  * "git stash" sometimes was silent even when it failed due to
304    unwritable index file, which has been corrected.
306  * "git show-ref --verify" did not show things like "CHERRY_PICK_HEAD",
307    which has been corrected.
309  * Recent conversion to allow more than 0/1 in GIT_FLUSH broke the
310    mechanism by flipping what yes/no means by mistake, which has been
311    corrected.
313  * The sequencer machinery does not use the ref API and instead
314    records names of certain objects it needs for its correct operation
315    in temporary files, which makes these objects susceptible to loss
316    by garbage collection.  These temporary files have been added as
317    starting points for reachability analysis to fix this.
318    (merge bc7f5db896 pw/gc-during-rebase later to maint).
320  * "git cherry-pick" invoked during "git rebase -i" session lost
321    the authorship information, which has been corrected.
322    (merge e4301f73ff vn/rebase-with-cherry-pick-authorship later to maint).
324  * The code paths that call repo_read_object_file() have been
325    tightened to react to errors.
326    (merge 568459bf5e js/check-null-from-read-object-file later to maint).
328  * Other code cleanup, docfix, build fix, etc.
329    (merge 5aea3955bc rj/clarify-branch-doc-m later to maint).
330    (merge 9cce3be2df bk/bisect-doc-fix later to maint).
331    (merge 8430b438f6 vd/fsck-submodule-url-test later to maint).
332    (merge 3cb4384683 jc/t0091-with-unknown-git later to maint).
333    (merge 020456cb74 rs/receive-pack-remove-find-header later to maint).
334    (merge bc47139f4f la/trailer-cleanups later to maint).