mirror of
https://github.com/git/git.git
synced 2026-10-23 14:15:33 +02:00
324 lines
15 KiB
Plaintext
324 lines
15 KiB
Plaintext
Git v2.98 Release Notes
|
|
=======================
|
|
|
|
This is meant to be the antepenultimate release to prepare for the
|
|
long anticipated Git 3.0 which has been vaporware for so long.
|
|
|
|
|
|
UI, Workflows & Features
|
|
------------------------
|
|
|
|
* The experimental 'git history' command has been taught a new 'squash'
|
|
subcommand to fold a range of commits into a single commit, with any
|
|
descendants replayed on top.
|
|
|
|
* A new hook 'report' is added to 'git receive-pack', which runs after
|
|
reference updates and allows the server to filter or modify the
|
|
packet-line status report sent back to the client.
|
|
|
|
* The terminology regarding reference storage formats has been unified
|
|
across command-line options, environment variables, configuration
|
|
variables, and source code, standardizing on the phrase "ref storage
|
|
format" (e.g., `--ref-storage-format`, `'GIT_REF_STORAGE_FORMAT'`).
|
|
Additionally, the `--ref-storage-format` option has been updated to
|
|
accept payloads in the form `<format>://<payload>`.
|
|
|
|
* The build-time knob 'USE_NSEC' for nanosecond stat precision has been
|
|
converted to a runtime configuration 'core.useNanosec', allowing
|
|
distributions to bundle one binary that adapts to filesystem
|
|
capabilities dynamically.
|
|
|
|
* The command-line completion script (in 'contrib/') has been taught
|
|
to complete the 'repair' subcommand for 'git worktree'.
|
|
|
|
* Various documentation files have been updated to use explicit
|
|
'<<TARGET,TARGET>>' AsciiDoc cross-references instead of plain text
|
|
references. This improves rendering on the web and avoids broken
|
|
links when manual pages are included into other pages.
|
|
|
|
* The 'git var' command has been updated to output individual components
|
|
of the author and committer identities, take multiple keys on the
|
|
command-line, and support NUL-delimited output with the '-z' option.
|
|
|
|
* The 'git-contacts' program (in contrib/) has been taught to read
|
|
patches from the standard input stream when an explicit dash ('-') is
|
|
passed in place of a file.
|
|
|
|
* The @{upstream} notation had short-hand @{u} from the beginning,
|
|
and @{push} learned corresponding @{p} to match.
|
|
|
|
* The 'format-patch' command has been updated with options to
|
|
configure notes specifically for range-diff output, allowing them to
|
|
differ from the notes displayed on the patches themselves.
|
|
|
|
* Validation of the 'fetch.followRemoteHEAD' configuration variable
|
|
has been deferred to when it is actually used, preventing irrelevant
|
|
warnings during 'git fetch' invocations that do not consult it.
|
|
|
|
* "git status" now suggests to use 'git merge --continue', not 'git commit',
|
|
when done with conflicts during a 'git merge'.
|
|
|
|
* A new 'uploadpack.lazyFetchTrusted' configuration variable has been
|
|
introduced to allow 'upload-pack' to lazily fetch missing objects from
|
|
configured promisor remotes when serving trusted repositories.
|
|
|
|
* Unicode character width table has been updated to match
|
|
Unicode 18 announced on 2026-09-16.
|
|
|
|
* When recreating a merge conflict using 'git checkout -m', the
|
|
original conflict labels (such as branch names) were lost and
|
|
replaced with generic ones. The merge machinery has been updated to
|
|
record the original labels in '.git/MERGE_LABELS', allowing 'git
|
|
checkout -m' to restore them.
|
|
|
|
* The git history command and its subcommands have been updated to
|
|
honor the commit.gpgSign configuration variable and accept the
|
|
--gpg-sign and --no-gpg-sign command-line options, ensuring both
|
|
rewritten commits and their replayed descendants are
|
|
cryptographically signed by the committer.
|
|
|
|
* The progress message emitted by the 'delta-islands' subsystem has
|
|
been updated to use the Q_() macro, allowing translators to properly
|
|
handle plural forms based on the number of islands marked.
|
|
|
|
|
|
Performance, Internal Implementation, Development Support etc.
|
|
--------------------------------------------------------------
|
|
|
|
* The setup of alternates has been deferred to object database
|
|
creation time during clone, which drops the unused ad-hoc alternate
|
|
writing API, simplifying the object database backend interface.
|
|
|
|
* Updates to Coccinelle semantic patches to correctly handle the
|
|
'FREE_AND_NULL()' macro and avoid generating broken transformations
|
|
for negated pointer checks.
|
|
|
|
* The 'Makefile' has been taught to precompile 'git-compat-util.h' to
|
|
speed up overall compilation, while excluding sources that do not
|
|
include the compatibility header.
|
|
|
|
* The can_all_from_reach() and can_all_from_reach_with_flag()
|
|
functions have been updated to accept a repository context,
|
|
preventing bugs where submodule merging incorrectly reads from the
|
|
superproject's commit-graph.
|
|
|
|
* The error reporting machinery in the WinANSI compatibility layer has
|
|
been simplified to pass the exact Windows error code and correctly
|
|
format arguments for fatal errors.
|
|
|
|
* The Debian 12 CI job has been updated to skip a half-auth clone test
|
|
that occasionally fails due to a bug in the packaged curl version
|
|
handling early HTTP/2 responses.
|
|
|
|
* The CI script has been updated to check for one-indexed slice numbers
|
|
when deciding to run unit tests on Windows, mirroring the behaviour in
|
|
the modern GitHub and GitLab workflows.
|
|
|
|
* The Windows GitLab CI job has been updated to provision and use the
|
|
GCC-targeting Rust toolchain for MinGW builds, fixing job failures
|
|
caused by incomplete Rust setup and missing linker support.
|
|
|
|
* The external merge driver in 'git merge' now uses the tempfile API
|
|
to create its temporary files. This ensures that these temporaries
|
|
are reliably cleaned up even when the merge driver or its parent Git
|
|
process is terminated abruptly.
|
|
|
|
* The performance test for `git fetch` pack-dir rescans has been
|
|
updated to use the `--no-deref` option when cleaning up
|
|
remote-tracking branches. This prevents `git update-ref` from
|
|
failing with a multiple updates error when both a symref and its
|
|
target are deleted in the same transaction.
|
|
|
|
* The build configurations for Meson have been optimized to avoid
|
|
recompiling HTTP sources multiple times and to utilize precompiled
|
|
headers for test-helpers and unit tests, reducing clean build times.
|
|
Additionally, the shell completion tests and GitLab CI MSVC runner
|
|
jobs have been fixed.
|
|
|
|
* The handling of index conflicts in 'git stash apply --index' has
|
|
been optimized. Instead of relying on expensive external
|
|
subprocesses using 'git diff-tree' and 'git apply', the index is now
|
|
merged in-core using the merge-ort machinery, which fixes a
|
|
concurrent lock file issue with autostash.
|
|
|
|
* The parse-options API has been updated to support grouping
|
|
subcommands, and the 'git refs' command has been updated to use this
|
|
new feature to categorize its subcommands in its help output.
|
|
|
|
* Fix definition for the "--all" option to use symbolic constant
|
|
in the options[] array passed to parse_options API.
|
|
|
|
* The shell quoting of a lazy prereq script was quoted incorrectly and
|
|
allowed variables dereferenced at the wrong moment, breaking the
|
|
curl version detection.
|
|
|
|
* The requirement for a 'SYNOPSIS' section in section 7 manual pages
|
|
has been relaxed by updating the linter script, and dummy
|
|
'SYNOPSIS' sections from existing section 7 documentation have been
|
|
removed to improve the rendered output
|
|
|
|
* A test script (t0450) has been updated to use the test_path_is_file
|
|
and test_path_is_missing helper functions, which provides better
|
|
diagnostic output on failure.
|
|
|
|
* The routine that rewrites the packed-refs file has been optimized to
|
|
directly pass unmodified reference records verbatim to the output
|
|
via fwrite(3p), instead of redundantly re-formatting them with
|
|
fprintf(3p).
|
|
|
|
* The fetch.writeCommitGraph behavior has been optimized to
|
|
incrementally update the commit graph using only the newly fetched
|
|
commits as seeds. This avoids a full reachability scan of all
|
|
references and drastically reduces the post-fetch commit-graph
|
|
update time for repositories with many references.
|
|
|
|
* The odb_source API has been refactored to make alternates an
|
|
implementation detail of the files backend instead of managing them
|
|
at the core object database layer.
|
|
|
|
* The test for verifying a signed tag with a missing key has been
|
|
updated to point GNUPGHOME to an unused directory rather than
|
|
deleting the active gpghome directory, working around a flaky rm
|
|
failure caused by the background gpg-agent observed on Alpine.
|
|
|
|
* CI on GitHub Actions gets a better annotation experience. Leak test
|
|
scripts are stopped at their first failure with --immediate to
|
|
prevent flooding the log, and failures are correctly annotated with
|
|
their file and line number.
|
|
|
|
|
|
Fixes since v2.56
|
|
-----------------
|
|
|
|
* Updates to Coccinelle semantic patches to correctly handle the
|
|
'FREE_AND_NULL()' macro and avoid generating broken transformations
|
|
for negated pointer checks.
|
|
(merge 32814b69d0 jc/cocci-free-updates later to maint).
|
|
|
|
* The files backend has been updated to avoid unconditionally locking
|
|
the 'packed-refs' file when deleting a root ref (which are never
|
|
packed).
|
|
(merge d8e4585822 ak/refs-files-root-ref-lock later to maint).
|
|
|
|
* The server-side protocol v2 response order for 'wanted-refs' and
|
|
'shallow-info' has been swapped to match the client's expectation,
|
|
fixing a fetch failure when the server has 'uploadpack.allowRefInWant'
|
|
enabled and the client performs a shallow fetch.
|
|
(merge 191740edaa rr/upload-pack-swap-shallow-wanted-ref later to maint).
|
|
|
|
* Assorted fixes for code paths that are not careful with boundary and
|
|
error conditions.
|
|
(merge c88341b7e1 js/coverity-fixes later to maint).
|
|
|
|
* A bug in git diff --no-index that mishandled reverse (-R) output
|
|
when conflicts existed between a file and a directory has been
|
|
fixed.
|
|
(merge 9a13b3742b hd/diff-no-index-reverse-fix later to maint).
|
|
|
|
* 'git pull' has been taught to fail more gracefully instead of
|
|
segfaulting when lookup_commit_reference() fails on unparseable
|
|
objects.
|
|
(merge 38bdda17dd jk/pull-null-merge-head later to maint).
|
|
|
|
* The sequencer machinery (used by 'git rebase', 'git cherry-pick', and
|
|
'git revert') has been updated to defer automatic maintenance tasks
|
|
until the end of the operation, preventing nested 'git commit', 'git
|
|
merge', and 'exec' commands from triggering GC operations that could
|
|
contend for locks or delete open packs while the sequence is in
|
|
progress.
|
|
(merge eba1a1c5dd tb/rerere-lock-grace later to maint).
|
|
|
|
* When 'core.fsyncMethod' is set to 'batch', the ODB transaction
|
|
failed to properly flush large blob packfiles residing in the
|
|
temporary directory before migrating the directory's contents to the
|
|
main object store. The execution sequence has been corrected by
|
|
performing the packfile flush before the temporary directory
|
|
migration, averting failure.
|
|
(merge ef7faa6350 jt/object-file-batch-fsync-fix later to maint).
|
|
|
|
* The default expiry periods for both reachable and unreachable reflog
|
|
entries have been corrected from a past regression that swapped
|
|
them.
|
|
(merge 60cf500551 ps/reflog-expiry-fix later to maint).
|
|
|
|
* The directory traversal logic has been updated to correctly evaluate
|
|
pathspecs for ignored directories containing nested repositories,
|
|
and has been fortified to gracefully handle null pathspecs during
|
|
checkout operations.
|
|
(merge ebc067f3cc rs/dir-skip-nested-repo-fix later to maint).
|
|
|
|
* The command-line parsing of revision options has been updated to
|
|
properly distinguish between malformed and unknown options, and to
|
|
correctly report the name of unknown options after they have been
|
|
moved during the option parsing process.
|
|
(merge da2926c8f5 jk/parse-revision-opt-fixes later to maint).
|
|
|
|
* The documentation for 'git-name-rev' has been updated to refer to
|
|
object IDs instead of SHA-1, to more accurately reflect that the
|
|
active hash algorithm is used.
|
|
(merge b2ab8fccc3 jk/name-rev-update-hash-descriptions later to maint).
|
|
|
|
* The HTTP transport has been updated to handle changes in recent curl
|
|
versions that strip credentials from the effective URL, preventing
|
|
unnecessary credential prompts during redirects.
|
|
(merge 76524c2604 jk/http-curl-strip-creds later to maint).
|
|
|
|
* The timestamp used for checking the reflog of a remote-tracking
|
|
branch during 'git push --force-if-includes' was left uninitialized
|
|
when the reflog was completely empty, which has been corrected.
|
|
(merge c84ed3a0ab as/push-force-if-includes-no-reflog later to maint).
|
|
|
|
* CI resource exhaustion during test runs on GitHub Actions has been
|
|
mitigated by switching a comparison of a huge output to use a binary
|
|
comparison, and by capping the parallel jobs on Linux to the number
|
|
of available CPUs.
|
|
(merge 4f956cf43a td/ci-large-test-resources later to maint).
|
|
|
|
* The `t5520` test script has been updated to disable reflog expiration.
|
|
This prevents test flakiness caused by the auto-maintenance
|
|
reflog-expire task, which would otherwise immediately expire the
|
|
test's reflogs due to them carrying hardcoded timestamps from 2005.
|
|
(merge a68cca9953 tb/t5520-reflog-expire later to maint).
|
|
|
|
* The internal representation of timezones in the reflog for the
|
|
reftable format has been fixed to match the specification, which
|
|
dictates an offset in minutes rather than the parsed "+HHMM" integer
|
|
representation.
|
|
(merge e14e2b6cf2 ps/reftable-reflog-timezone later to maint).
|
|
|
|
* The internal diff and merge machinery has been updated to use
|
|
standard size_t types rather than signed longs for buffer
|
|
allocations and offsets, preventing subtle overflow issues on LLP64
|
|
architectures, and plugging uninitialized memory leaks along error
|
|
paths.
|
|
(merge 5b0456361d jk/xdiff-size_t later to maint).
|
|
|
|
* The documentation for 'git remote set-head' has been updated to
|
|
clarify that it only modifies the local repository's remote-tracking
|
|
symbolic reference, and does not alter the target remote
|
|
repository's own 'HEAD'.
|
|
(merge c5f8f60719 mg/doc-remote-set-head later to maint).
|
|
|
|
* The commit map populated from the state branch in 'git
|
|
filter-branch' has been corrected to parse the map using the
|
|
original-to-rewritten order.
|
|
(merge 4811dabed7 gm/filter-branch-state-map-fix later to maint).
|
|
|
|
* The documentation for core.pager has been updated to provide
|
|
examples of overriding the LESS environment variable for custom
|
|
pagers by prefixing the pager command in the configuration.
|
|
(merge c7860da7db tz/doc-override-less-env later to maint).
|
|
|
|
* Closing a packfile did not evict the entries belonging to it from
|
|
the delta base cache, which could lead to data corruption when a
|
|
newly allocated packfile happened to reuse the same memory address.
|
|
The cache eviction logic has been updated to remove these stale
|
|
entries upon closing a pack
|
|
(merge 8d596ea8e7 ps/packfile-stale-delta-base-cache-fix later to maint).
|
|
|
|
* Other code cleanup, docfix, build fix, etc.
|
|
(merge e638de60bc kz/doc-add-rm-typofix later to maint).
|
|
(merge 778c73948a kz/doc-user-manual-typo later to maint).
|
|
(merge 42017ff979 kh/doc-trailers-cmd-examples later to maint).
|
|
(merge 49e646f1c9 dk/fix-shattered-io-link later to maint).
|