| 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. |
| |
| |
| 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. |
| (merge 1e5f522ef1 js/gitlab-ci-windows-rust later to maint). |
| |
| * 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. |
| |
| |
| |
| 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). |
| |
| * Other code cleanup, docfix, build fix, etc. |
| (merge e638de60bc kz/doc-add-rm-typofix later to maint). |