| Git v2.56 Release Notes | |
| ======================= | |
| UI, Workflows & Features | |
| ------------------------ | |
| * Advice shown by "git status" when the local branch is behind or has | |
| diverged from its push branch has been updated to suggest "git pull | |
| <remote> <branch>". | |
| * The handling of promisor-remote protocol capability has been updated | |
| to allow the other side to add to the list of promisor remotes via the | |
| 'promisor.acceptFromServerURL' configuration variable. | |
| * The 'ort' merge backend has been hardened against corrupt trees by | |
| ensuring it aborts under appropriate error conditions. | |
| * The `fetch.followRemoteHEAD` configuration variable has been added to | |
| provide a default for the per-remote `remote.<name>.followRemoteHEAD` | |
| setting. | |
| * "git log --follow" has been updated to better handle non-linear | |
| history, in which the path being tracked gets renamed differently in | |
| multiple history lines. | |
| * The "git repo info" command has been taught new keys to output both | |
| absolute and relative paths for "gitdir" and "commondir", supported by | |
| a new path-formatting helper extracted from "git rev-parse". | |
| * When 'git push origin/main' or 'git branch origin main' is run, the | |
| command is now recognized as a potential typo, and advice has been | |
| added to offer a typo fix. | |
| * The 'git refs' toolbox has been extended with new 'create', 'delete', | |
| 'update', and 'rename' subcommands to create, delete, update, and | |
| rename references, respectively. | |
| * The experimental 'git history' command has been taught a new 'drop' | |
| subcommand to remove a commit, with its descendants replayed onto its | |
| parent. | |
| * The alignment of commit object name abbreviations in 'git blame' | |
| output has been optimized to reserve a column for marks (caret, | |
| question mark, or asterisk) only when such marks are actually shown. | |
| * Option parsing with 'git rev-parse --parseopt' and in most 'git' | |
| subcommands has been updated to exit with 0 (instead of 129) when the | |
| help option ('-h' or '--help') is requested directly by the user, | |
| aligning with standard Unix convention. | |
| * The '[includeIf "condition"]' conditional inclusion facility for | |
| configuration files has been taught to use the location of the | |
| worktree in its condition. | |
| * The usage string and SYNOPSIS for 'git fast-export' have been | |
| standardized to make them consistent with each other and with other | |
| commands. | |
| * 'git log --graph' has been modified to visually distinguish parentless | |
| 'root' commits (and commits that become roots due to history | |
| simplification) by indenting them, preventing them from appearing | |
| falsely related to unrelated commits rendered immediately above them. | |
| * Userdiff patterns for Swift have been added, with support for | |
| Swift-specific constructs such as attributes, modifiers, failable | |
| initializers, and generics. | |
| * Configuration file locking has been updated to retry for a short | |
| period, avoiding failures when multiple processes attempt to update | |
| the configuration simultaneously. | |
| * The 'remote-object-info' command has been added to 'git cat-file | |
| --batch-command', allowing clients to request object metadata | |
| (currently size) from a remote server via protocol v2 without | |
| downloading the entire object. Format placeholders are dynamically | |
| filtered on the client based on server-advertised capabilities, | |
| returning empty strings for inapplicable or unsupported fields. | |
| * 'git branch -d' has been taught to report when a branch cannot be | |
| deleted because it is being used in an active bisect run. | |
| * 'git mv' has been updated to check for a missing destination | |
| leading directory during the checking phase, allowing 'git mv -n' | |
| to report the failure. The error message when the rename(2) | |
| syscall fails has also been improved to name both the source and | |
| the destination. | |
| * 'git add' has been taught a new '--resolved' option to stage | |
| conflict-resolved paths, while leaving unrelated local changes | |
| unstaged. It scans the unmerged paths for leftover conflict | |
| markers and aborts if any are found. | |
| * The known limitations of the ref format migration in 'git refs' have | |
| been moved to be displayed as a warning admonition directly under the | |
| description of the 'migrate' subcommand, improving visibility. A | |
| reference to 'git-maintenance' has also been corrected to use the | |
| 'linkgit' macro. | |
| * The 'git bisect' command has been taught a | |
| '--reset-when-found[=<where>]' option that tells the command to | |
| automatically run 'git bisect reset' to jump back to the original | |
| state or to the found culprit. | |
| * The 'git branch' command has been taught the '--delete-merged' option | |
| to remove local branches that are already merged into their tracked | |
| remote-tracking branches. | |
| * The 'remote-object-info' command for 'git cat-file --batch-command' | |
| has been extended to support the '%(objecttype)' placeholder. | |
| * The usage string of 'git fast-import' has been updated to use the | |
| parse_options() API for displaying help, and its SYNOPSIS in the | |
| documentation has been standardized to match. | |
| * The error message given by 'git send-email' when a message file is | |
| missing a 'Subject:' header has been clarified, and the error string | |
| is now terminated with a newline so that Perl avoids appending its | |
| internal source location data. | |
| * The '--shallow-file' option of 'git' command requires a value, but the | |
| code did not check the presence of a value and instead segfaulted | |
| without one, which has been corrected. | |
| * 'git repack' has been taught '--drop-filtered' to delete local | |
| promisor blobs exceeding a limit (currently 'blob:limit=') in partial | |
| clones, reclaiming space. Guards prevent running during other | |
| operations or if referenced by the index. | |
| * The documentation for 'git format-rev' has been updated to use the | |
| [synopsis] block definition on code blocks to properly highlight | |
| placeholders, and a quoting inconsistency in the running text has | |
| been fixed. | |
| * The DWIM logic in 'git worktree add' sometimes tried to infer a | |
| remote-tracking branch when an explicit '-b' or '-B' option was | |
| given to create a new branch, causing the explicit branch name to | |
| be ignored, which has been corrected. | |
| * The command line completion (in contrib/) has been taught to handle | |
| the experimental 'git history' command. | |
| * 'git checkout' and 'git worktree add' makes guesses based on a name | |
| of a remote-tracking branch, but does not give an error when such a | |
| remote-tracking branch cannot be uniquely identified, which has | |
| been corrected. | |
| * The 'git replay' command has been taught the '--linearize' option to | |
| drop merge commits and linearize the replayed history, mimicking 'git | |
| rebase --no-rebase-merges'. | |
| * The documentation for 'git cherry-pick' has been updated to clarify | |
| that the '--no-commit' option intentionally skips setting the | |
| 'CHERRY_PICK_HEAD' ref. A test has also been added to ensure this | |
| behavior holds even when the operation stops for conflicts. | |
| * The 'git imap-send' command has been taught to take the '--draft' | |
| option to mark uploaded messages as drafts, which helps some email | |
| clients render them properly for editing and sending. | |
| * The git rev-list command has been augmented with a '--missing-only' | |
| option that filters the output to only show missing objects, | |
| stripping the leading '?' character and suppressing present objects, | |
| which is useful when used in combination with '--missing=print' or | |
| '--missing=print-info'. | |
| Performance, Internal Implementation, Development Support etc. | |
| -------------------------------------------------------------- | |
| * The refactoring of 'setup.c' has been continued to drop remaining | |
| global state (`git_work_tree_cfg`, `is_bare_repository_cfg`), updating | |
| `is_bare_repository()` to no longer implicitly rely on | |
| `the_repository`. | |
| * Project-specific configuration for b4 has been introduced, and the | |
| documentation has been updated to recommend using it as a | |
| streamlined method for submitting patches. | |
| * The default format path of git cat-file --batch has been optimized | |
| to use strbuf_add_oid_hex() and strbuf_add_uint() instead of | |
| strbuf_addf(), yielding a noticeable speedup. | |
| * Commands that list branches and tags (like git branch and git tag) | |
| have been optimized to pass the namespace prefix when initializing | |
| their ref iterator, avoiding a loose-ref scaling regression in | |
| repositories with many unrelated loose references. | |
| * The packed object source has been refactored into a proper struct | |
| odb_source. | |
| * The global configuration variables protect_hfs and protect_ntfs have | |
| been migrated into struct repo_config_values to tie them to | |
| per-repository configuration state. | |
| * The trailer sections in SubmittingPatches have been updated to | |
| encourage use of standard trailers. | |
| * The documentation in SubmittingPatches has been updated to clarify how | |
| patch contributors should respond to design and viability critiques, | |
| and how the resolution of such critiques should be recorded in the | |
| final commit messages. | |
| * The pack-objects command has been updated to support reachability | |
| bitmaps and delta-islands concurrently with the `--path-walk` option, | |
| allowing faster packaging by falling back to path-walk when bitmaps | |
| cannot fully satisfy the request. | |
| * Documentation on community contribution guidelines has been updated to | |
| encourage replying to review comments before rerolling, and to advise | |
| a default limit of at most one reroll per day to give reviewers across | |
| different time zones enough time to participate. | |
| * The lazy priority queue optimization pattern (deferring actual removal | |
| in 'prio_queue_get()' to allow get+put fusion) has been folded | |
| directly into 'prio_queue' itself, speeding up commit traversal | |
| workflows and simplifying callers. | |
| * The 'reprepare()' callback for object database sources has been | |
| generalized into a 'prepare()' callback with an optional flush cache | |
| flag, and a new 'odb_prepare()' wrapper has been introduced to allow | |
| pre-opening object database sources. | |
| * The 'whence' field in 'struct object_info' has been removed. The | |
| backend-specific object information retrieval has been refactored into | |
| an opt-in 'struct object_info_source' structure. | |
| * A racy build failure under Meson has been corrected by ensuring that | |
| the generated header file 'hook-list.h' is built before compiling | |
| files in 'builtin_sources' that depend on it. | |
| * The repository discovery and repository configuration phases, which | |
| were previously intertwined in 'setup.c', have been split. Repository | |
| discovery has been updated to populate a 'struct repo_discovery' | |
| without modifying the repository state, which is then taken by | |
| repository configuration to initialize the repository, paving the way | |
| for clean unification of repository configuration. | |
| * The 'SubmittingPatches' document has been updated to explicitly | |
| describe the expectation for contributors to retract or abandon their | |
| patch series when they are no longer pursuing it. | |
| * The contributor guide has been updated to advise new contributors to | |
| trim irrelevant quoted text when replying to review comments, matching | |
| the existing advice given to reviewers. | |
| * The build system has been updated to support building universal macOS | |
| binaries when 'Rust' is enabled, by compiling separate static archives | |
| for each target triple listed in 'RUST_TARGETS' and combining them | |
| using the macOS 'lipo' tool. The 'git-credential-osxkeychain' helper | |
| has been updated to link against '$(RUST_LIB)' when 'Rust' is enabled. | |
| * The test suite has been updated to use the 'test_grep' helper instead | |
| of bare 'grep' for test assertions, allowing file contents to be | |
| printed on failure for easier debugging. A new 'greplint' linter has | |
| been introduced to detect and prevent new bare 'grep' assertions from | |
| being added to the test suite. | |
| * The pipelines in 't1410-reflog.sh' have been replaced with the | |
| 'test_stdout_line_count' helper to avoid suppressing the exit code of | |
| 'git' commands, ensuring failures are not hidden from the test suite. | |
| * The cache-scanning loop in 'next_cache_entry()' has been optimized | |
| to avoid rescanning already-unpacked index entries, preventing a | |
| quadratic performance slow-down when diffing the working tree | |
| against a commit with a pathspec matching early index entries. | |
| * The global configuration variable 'ignore_case' (representing the | |
| 'core.ignorecase' configuration) has been migrated into 'struct | |
| repo_config_values' to tie it to a specific repository instance. | |
| * The performance of ref updates and reads using the 'reftable' backend | |
| in the presence of many deletion tombstone records has been optimized | |
| by removing the tombstone suppression flag from the merged iterator | |
| and instead skipping tombstones at higher-level call sites where | |
| iteration bounds are known. | |
| * Various code paths have been hardened against potential NULL-pointer | |
| dereferences and invalid file descriptor accesses flagged by | |
| Coverity. | |
| * The in-tree 'b4' cover letter template has been updated to include the | |
| 'change-id' trailer, ensuring that sent tags generated by 'b4' contain | |
| the required tracking information for subsequent runs. | |
| * 'git receive-pack' has been refactored to use ODB transaction | |
| interfaces instead of directly managing 'tmp_objdir' for staging | |
| incoming objects, bringing it closer to being ODB backend agnostic. | |
| * The test script 't/t9811-git-p4-label-import.sh' has been | |
| modernized to use 'test_path_is_file' and 'test_path_is_missing' | |
| instead of raw 'test -f' and '! test -f' calls. | |
| * A redundant strbuf_reset() call in the 'HAVE_GETDELIM' path of | |
| strbuf_getwholeline() has been removed, as getdelim() overwrites the | |
| buffer and the length is updated afterward. | |
| * The object database enumeration interface odb_for_each_object() has | |
| been taught to accept object filters, allowing the underlying backends | |
| to optimize the traversal by using reachability bitmaps when | |
| available. 'git cat-file --batch-all-objects' has been updated to use | |
| this generic interface, simplifying its code and avoiding direct | |
| access to ODB backend internals. | |
| * The test script 't/t1100-commit-tree-options.sh' has been modernized | |
| by converting test cases to the modern style (using single quotes and | |
| tab indentation) and moving the creation of the expected file inside | |
| the setup test so it runs under the protection of the test harness. | |
| * The test script 't/t7614-merge-signoff.sh' has been updated to avoid | |
| suppressing the exit code of 'git' commands in a pipe. | |
| * The 'git rev-list --no-walk' command has been corrected to restore | |
| pathspec filtering, which was lost when the streaming walk was | |
| refactored. | |
| * The ref subsystem and the worktree API have been refactored to pass a | |
| repository pointer down the call chain, allowing them to drop | |
| references to the global 'the_repository' variable. As part of this, | |
| the handling of the 'core.packedRefsTimeout' configuration has been | |
| moved into the per-repository ref store structure. | |
| * 'git branch --contains' and 'git for-each-ref --contains' have been | |
| optimized to use the memoized commit traversal previously used only by | |
| 'git tag --contains', significantly speeding up connectivity checks | |
| across many candidate refs with shared history. | |
| * The passing of push destination specifications in the 'remote-curl' | |
| helper has been simplified by removing the explicit 'count' parameter | |
| and relying on the NULL-termination of the array. | |
| * The dependency on the global 'the_repository' variable in the | |
| 'refspec.c' API has been removed by passing the hash algorithm | |
| explicitly to refspec-parsing functions and storing it in 'struct | |
| refspec'. | |
| * The enumeration of untracked and ignored files in 'git status' has | |
| been optimized by avoiding quadratic complexity when inserting into | |
| string lists, reducing the construction cost from O(n^2) to O(n log | |
| n). | |
| * The copy_file() and copy_file_with_time() functions have been | |
| refactored to take a repository parameter, allowing the removal of the | |
| implicit dependency on the global 'the_repository' variable in | |
| 'copy.c'. | |
| * The tempfile and lockfile APIs have been refactored to stop depending | |
| on the 'the_repository' global variable, and their callers have been | |
| updated to use the repository-aware variants. | |
| * The 'trust_executable_bit' (coming from the 'core.filemode' | |
| configuration) has been migrated into 'struct repo_config_values' to | |
| tie it to a specific repository instance. | |
| * The 'excludes_file' and various other global configuration variables | |
| (including 'editor_program', 'pager_program', 'askpass_program', and | |
| 'push_default') have been migrated into the per-repository structure. | |
| * The 'git stash push' command has been optimized to avoid unnecessary | |
| sparse index expansion when pathspecs are wholly inside the | |
| sparse-checkout cone. Also, a potential out-of-bounds read in the | |
| sparse-index expansion check helper pathspec_needs_expanded_index() | |
| has been fixed by consistently using the parsed, prefixed path. | |
| * The logic to write loose objects has been refactored and moved from | |
| 'object-file.c' to the loose backend source file 'odb/source-loose.c', | |
| making the loose backend more self-contained. This is achieved by | |
| first refactoring force_object_loose() to use generic ODB write | |
| interfaces instead of loose-backend internals. | |
| * Object database housekeeping in 'git gc' and 'git maintenance' has | |
| been refactored to be pluggable. The files-backend-specific logic, | |
| including incremental and geometric repacking as well as object | |
| pruning, has been moved out of the command implementation and into the | |
| files object database source, enabling future alternative object | |
| database backends to implement their own housekeeping services. | |
| * The image version used by the static-analysis CI job has been bumped | |
| to ubuntu-latest (Ubuntu 24.04), which brings in a newer Coccinelle | |
| version that resolves a severe performance regression. A false | |
| positive warning from the 'CHECK_ASSERTION_SIDE_EFFECTS' build with | |
| GCC 15 in the Bloom filter code has also been silenced to facilitate | |
| the image upgrade. | |
| * The alias tests in 't/t0014-alias.sh' have been updated to dynamically | |
| query the list of deprecated commands using 'git | |
| --list-cmds=deprecated' to avoid test failures when running with | |
| 'WITH_BREAKING_CHANGES' in a build directory that contains stale | |
| executables of formerly deprecated commands. | |
| * The code path that deals with relative paths in the diff-lib has | |
| been cleaned up. | |
| * The get_commit_action() function has been refactored to be a pure | |
| predicate by moving the side-effecting line-level log range folding to | |
| simplify_commit(). This ensures that evaluating a commit's action | |
| before the walk reaches it does not prematurely mutate its tracked | |
| line ranges, making it safer for potential lookahead evaluations. | |
| * Synopsis and options in the documentation for 'git format-patch', | |
| 'git imap-send', 'git send-email', and 'git request-pull' have been | |
| updated to the modern style. | |
| * A new test helper commit_body() has been introduced to print the | |
| message body of a commit, and various tests have been updated to use | |
| it instead of spelling out the command pipeline manually and losing | |
| the exit status of the 'git cat-file' command on the upstream of the | |
| pipe. | |
| * Tests for 'git merge-base --is-ancestor' have been added to cover | |
| exit codes (0 for success, 1 for non-ancestor, 128 for errors) and | |
| to ensure it cannot be combined with '--all'. | |
| * The 'TRACE2_ANCESTRY' prerequisite in the 't0213' test script has been | |
| refined to avoid failures under user-mode emulation by verifying that | |
| the ancestry collector reports the expected process names rather than | |
| the emulator binary name. | |
| * Concurrent downloads of packfiles via packfile URIs and dumb HTTP are | |
| safer by avoiding concurrent appends to the staging file. Opening in | |
| read-write mode with separate file offsets prevents corruption and | |
| preserves resumability. 'fetch-pack' now tolerates pre-existing | |
| '.keep' files. | |
| * The 'ssh-agent' tests in 't7528' have been fixed to work when the | |
| user's login shell is csh-like, by explicitly passing '-s' to | |
| 'ssh-agent' to force Bourne shell syntax. | |
| * A compatibility wrapper for writev(3p) has been reintroduced, | |
| including fixes for CMake build and 'MAX_IO_SIZE' limits on NonStop. | |
| Calls to write(3p) in send_sideband() and cat_blob() have been | |
| refactored to use writev(3p) wrappers to reduce syscall overhead. | |
| * The creation of the on-disk data structures for the object database | |
| has been made pluggable, allowing future backends to customize their | |
| setup. As part of this, the initialization of the object database | |
| has been deferred, and the loading of the loose-object map has been | |
| detangled from repository initialization. | |
| * The 'struct odb_read_stream' and 'struct odb_write_stream' | |
| structures have been consolidated into a single unified 'struct | |
| odb_stream' structure, simplifying object database streaming APIs | |
| and enabling streaming of arbitrary object types. | |
| * The sequencer has been updated to release the object database before | |
| spawning 'git commit'. This prevents open file handles from | |
| blocking auto-maintenance tasks, such as repacking, on systems like | |
| Windows where open files cannot be easily unlinked. | |
| * The merge-base computation has been optimized by stopping the walk | |
| early when one side's exclusive commits in the queue are exhausted, | |
| yielding significant speedups for queries with one-sided histories. | |
| * A handful of code paths have been corrected to check return values | |
| from functions like curl_easy_duphandle(), deflateInit(), lseek(), | |
| dup(), and strbuf_getline_lf(), resolving several Coverity warnings | |
| about unchecked returns. | |
| * The setting of a now-unused member '.pretty_given' in the sequencer | |
| machinery has been removed. | |
| * The performance of adding numerous new packfiles has been improved | |
| by introducing a fast path for known-new packfiles to skip an | |
| unnecessary traversal in packfile_list_append(), avoiding a | |
| quadratic complexity regression on load. | |
| * The unused name parameter in 'struct chdir_notify_entry' has been | |
| removed from chdir_notify_register(), chdir_notify_unregister(), and | |
| related callback signatures across several subsystems, simplifying the | |
| API now that trace output no longer uses it. | |
| * A heap-use-after-free bug in the object name parsing code when | |
| reporting failures with a relative path to a sparse directory has | |
| been corrected. | |
| * The object database (odb) API has been refactored to distinguish | |
| between missing objects and corrupt ones by returning more | |
| descriptive error statuses. Both the packed and loose backends now | |
| faithfully propagate error details using a generic strbuf error | |
| mechanism, removing backend-specific leakage from central lookup | |
| paths. | |
| * The object database layer has been simplified by eagerly loading | |
| alternate object directories upon initialization, instead of | |
| deferring it to the first object lookup. This eliminates the need | |
| for scattered lazy-loading calls throughout the codebase and paves | |
| the way for integrating alternates with the pluggable backends. | |
| * The threshold for geometric repacking to trigger based on loose | |
| object count has been adjusted to match that of 'git gc --auto', | |
| preventing over-aggressive repacking during concurrent writes. | |
| * The 'git receive-pack' command has been updated to use a new ODB | |
| transaction interface for writing incoming packfiles, making it more | |
| backend-agnostic. | |
| * The mechanism to generate a packfile corresponding to the result of | |
| a fetch/push has been made pluggable through a set of object | |
| database callback functions, removing hardcoded references to | |
| 'pack-objects' and enabling alternative ODBs to serve packfiles | |
| themselves. | |
| * The pack-objects command has been updated to record the total bytes | |
| written to pack files in trace2 output, allowing performance | |
| analysis of different compression settings by comparing the | |
| resulting pack sizes. | |
| * The global variable 'fetch_if_missing' has been moved to a member in | |
| 'struct repository', continuing the libification process and | |
| allowing per-repository control (such as for submodules). | |
| * The reftable code has been optimized to avoid an unnecessary | |
| stat/reload of the stack when an addition already holds the | |
| list_file lock, reducing the number of newfstatat syscalls from | |
| linear to constant when writing refs. | |
| * The application of the edited patch in 'git add -e' has been | |
| refactored to use the internal apply API directly, avoiding the need | |
| to spawn a 'git apply' subprocess. | |
| * The memory ownership of argv elements passed to the revision | |
| machinery has been made more robust by keeping logically "freed" | |
| elements alive until the rev_info struct is released, preventing | |
| use-after-free bugs when options store references to them. | |
| * The object lookup machinery has been taught to gracefully recover | |
| when a multi-pack-index points to an owning pack that was removed | |
| during a concurrent geometric repack, and 'git replay' has been | |
| fixed to not segfault when reading such missing objects. | |
| * A collection of patches from Git for Windows has been upstreamed, | |
| mostly focusing on simplifying and robustifying build configurations | |
| for MinGW/MSYS2, dropping obsolete compatibility options, and allowing | |
| the main 'git.exe' to be used directly without the extra wrapper | |
| process on Windows. | |
| * The process of downloading packfile URIs in protocol v2 has been | |
| instrumented with a Trace2 region. This visibility allows tracking | |
| the cumulative time spent downloading external packs and the number | |
| of advertised URIs without emitting a separate event per pack. | |
| * CGI helper scripts used by HTTP-related test scripts have been updated | |
| to use atomic filesystem operations, preventing race conditions when | |
| Apache handles concurrent requests. | |
| * "git maintenance" triggered "rerere gc" in unappropriate times and | |
| interfered with "git rebase" etc. too much. The conditions "rerere | |
| gc" gets triggered have been tweaked. | |
| * Windows build switches from MINGW64 to URCR64 runtime starting Git | |
| 2.56.0; switch the cmake based build at the same time. | |
| * The mechanism to register in-memory alternate object sources has | |
| been removed, as submodule object databases are now accessed | |
| natively via their own repository structures. This simplifies | |
| object database management and prepares the codebase for migrating | |
| alternate tracking into the files backend. | |
| * The consistency checks for the object database (fsck) have been | |
| decoupled from the generic builtin implementation and moved into the | |
| backend-specific object source layers, making them pluggable for | |
| different object storage formats. | |
| * When cross-compiling with Cargo, the output artifact is placed in a | |
| target-specific subdirectory, which causes the build system to fail | |
| to locate it. The build system has been updated to respect the | |
| 'CARGO_BUILD_TARGET' environment variable. | |
| Fixes since v2.55 | |
| ----------------- | |
| * A regression in the error diagnosis code for invalid .git files has | |
| been fixed, avoiding a potential NULL-pointer crash when reporting | |
| that a .git file does not point to a valid repository. | |
| (merge 54a441bcea jk/setup-gitfile-diag-fix later to maint). | |
| * Support for hashing loose or packed objects larger than 4GB on Windows | |
| and other LLP64 platforms has been improved by converting object header | |
| buffers and data-handling functions from 'unsigned long' to 'size_t'. | |
| (merge d99e13d0be po/hash-object-size-t later to maint). | |
| * The display of the rebase todo list in "git status" has been | |
| improved to correctly abbreviate object IDs for more commands and | |
| avoid misinterpreting refs as object IDs. | |
| (merge 6f34e5f9e3 pw/status-rebase-todo later to maint). | |
| * Reference backend configuration has been updated to load lazily to | |
| avoid recursive calls during repository initialization when 'onbranch' | |
| configuration conditions are evaluated. This has also fixed a memory | |
| leak and allowed the unused `chdir_notify_reparent()` machinery to be | |
| dropped. | |
| (merge d6522d01df ps/refs-onbranch-fixes later to maint). | |
| * The connectivity check has been refactored to search for promisor | |
| objects in a generic way using the object database interface, | |
| rather than iterating packfiles directly. This allows connectivity | |
| checks to work properly in repositories that do not use packfiles. | |
| (merge 66ee9cb930 ps/connected-generic-promisor-checks later to maint). | |
| * A test checking interactions between git rebase --quit and | |
| autostash in t3420-rebase-autostash.sh has been corrected to use | |
| test_path_is_missing instead of ! grep on a file that shouldn't | |
| exist in the conflicted state. | |
| (merge eaad121fef sg/t3420-do-not-grep-in-missing-file later to maint). | |
| * The GPG and SSH signature parsing code has been corrected to strip | |
| carriage return characters only when they immediately precede line | |
| feeds, instead of unconditionally stripping all carriage returns. | |
| (merge 5dea8b690b ad/gpg-strip-cr-before-lf later to maint). | |
| * A memory leak in the 'reftable_writer_new()' initialization function | |
| has been fixed by delaying the allocation of 'struct reftable_writer' | |
| until after input options are validated. | |
| (merge c6fb3b9c3e jk/reftable-leakfix later to maint). | |
| * A memory leak in the '--base' handling of 'git format-patch' has been | |
| plugged, and the leak reporting of the test suite when running under a | |
| TAP harness has been improved. | |
| (merge 973a0373ff jk/format-patch-leakfix later to maint). | |
| * A write file stream resource leak has been fixed as part of a code | |
| cleanup. | |
| (merge ebb4d2ffa3 jc/history-message-prep-fix later to maint). | |
| * Various memory leaks in the Bloom-filter code paths that are exposed | |
| when running tests with the 'GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=1' | |
| environment variable have been plugged. | |
| (merge 459088ec2e jk/bloom-leak-fixes later to maint). | |
| * The wincred credential helper has been updated to avoid memory | |
| corruption when erasing credentials and to prevent silent | |
| credential loss when storing OAuth tokens, by correcting buffer | |
| allocations and arguments passed to safe-CRT APIs. | |
| (merge f635ab9ab4 js/wincred-fixes later to maint). | |
| * Various code paths that initialize a cryptographic hash context but | |
| bail out or finish without calling 'git_hash_final()' have been taught | |
| to call 'git_hash_discard()' to release allocated resources, fixing | |
| memory leaks when Git is built with non-default backends like | |
| 'OpenSSL' or 'libgcrypt'. | |
| (merge 600588d2aa jk/hash-algo-leak-fixes later to maint). | |
| * Various resource leaks, invalid file descriptor closures, and process | |
| handle ownership issues flagged by Coverity have been fixed. | |
| (merge 9184231173 js/coverity-fixes later to maint). | |
| * Dockerized CI jobs running in private GitHub repositories have been | |
| adjusted to use explicit process and file limits, preventing resource | |
| exhaustion errors on private runners. | |
| (merge bad766fbac js/ci-dockerized-pid-limit later to maint). | |
| * Various test scripts have been updated to clean up large temporary | |
| files and repositories, reducing peak disk usage during testing. | |
| Also, expensive tests have been disabled on platforms that lack | |
| sufficient resources (like 32-bit platforms and Windows CI runners), | |
| and the long test suite has been enabled in GitLab CI. | |
| (merge 84248444ad ps/t-fixes-for-git-test-long later to maint). | |
| * The UTF-8 precomposition wrapper on macOS has been updated to use a | |
| flexible array member to represent the name of a directory entry, | |
| preventing fortified libc checks from failing when the name is | |
| reallocated to be larger than 'NAME_MAX' bytes. | |
| (merge 1eb281159f ih/precompose-flex-array later to maint). | |
| * The 'git_hash_*()' wrappers have been updated to be used consistently | |
| across the codebase instead of direct calls to members of 'struct | |
| git_hash_algo', and 'git_hash_discard()' has been made idempotent to | |
| simplify cleanups. | |
| (merge 9e396aa553 jk/git-hash-cleanups later to maint). | |
| * The sideband demultiplexer has been updated to recognize ANSI SGR | |
| escape sequences that use colon-separated subfields (e.g., for | |
| 256-color or true-color codes). | |
| (merge 3792b2aea4 mm/sideband-ansi-sgr-colon-fix later to maint). | |
| * The 'reftable' code has been hardened against corrupted tables by | |
| fixing out-of-bounds writes, out-of-bounds reads, and abort calls | |
| during parsing. | |
| (merge ca93c27328 ps/reftable-hardening later to maint). | |
| * A description in the release notes for Git 2.55.0 has been | |
| retroactively updated to clarify that Rust support is enabled by | |
| default, but still optional, and will become mandatory in Git 3.0. | |
| (merge 18b2009d14 jc/relnotes-2.55-rust-fix later to maint). | |
| * The early-exit optimization in 'paint_down_to_common()' has been | |
| gated on the queue being generation-ordered, fixing a bug where | |
| 'git merge-base' (without '--all') could return incorrect results | |
| on repositories with v1 commit graphs and clock skew. | |
| (merge ae68032a8d kk/commit-reach-find-all-fix later to maint). | |
| * The client-side parser of the server-advertised bundle-URI list has | |
| been updated to drain the remaining response in order to avoid | |
| protocol desynchronization when the server sends a misconfigured list. | |
| Also, the server-side has been taught to omit empty configuration | |
| values instead of sending invalid key-value lines. | |
| (merge 50de1169e4 tc/bundle-uri-empty-fix later to maint). | |
| * The 'topo_levels' slab was propagated only to the topmost layer of a | |
| split commit-graph chain, causing topological levels for commits in | |
| base layers to be recomputed during incremental writes. This has been | |
| corrected. | |
| * The stream-based object signature verification path has been | |
| corrected to avoid double-closing the stream on read errors. | |
| (merge cfd52a74a0 ps/odb-stream-double-close-fix later to maint). | |
| * The '-i' shorthand for the '--init' option, which was accepted by the | |
| 'git submodule update' command until it was broken in a modernization | |
| of the option-parsing code, has been restored. | |
| (merge ff1da37f58 dm/submodule-update-i-shorthand later to maint). | |
| * An accidental use of the '%zu' format specifier in 'git | |
| submodule--helper' has been corrected to use 'PRIuMAX' and cast the | |
| value to 'uintmax_t' to avoid portability issues. | |
| (merge 3279c13c00 jc/submodule-helper-avoid-zu later to maint). | |
| * The rebase post-rewrite notes-copying logic has been corrected. When | |
| a commit is dropped during rebase (e.g., because its changes are | |
| already upstream), it is no longer recorded as rewritten, preventing | |
| its notes from being copied to an unrelated commit. | |
| (merge 42554b78fd pw/rebase-drop-notes-with-commit later to maint). | |
| * A few memory problems in the Rust interface to C hash functions have | |
| been corrected. The 'Clone' implementation of 'CryptoHasher' now | |
| properly initializes the context before cloning, and its 'Drop' | |
| implementation now discards the context to prevent leaks. | |
| * The object ID shortening and linking in the 'commitdiff' view of | |
| 'gitweb' has been corrected to work even when the index line carries | |
| a trailing file mode. | |
| (merge fda513d6fe tl/gitweb-shorten-hashes-with-modes later to maint). | |
| * When the push remote is specified as a URL, the fetch refspec of a | |
| uniquely matching configured remote is now used to find and update | |
| the remote-tracking branch (e.g., '@{push}'). | |
| * Traversals with '--exclude-first-parent-only' have been corrected | |
| to properly stop after the first parent even when it has already | |
| been marked as 'SEEN'. | |
| (merge 47382f7398 jc/exclude-first-parent-seen later to maint). | |
| * A segfault when 'git clone --revision' talks to a server that does not | |
| support protocol v2 (falling back to protocol v0) has been corrected. | |
| (merge 1034ad383f af/clone-revision-v0-segfault-fix later to maint). | |
| * rewrites_release() in 'remote.c' has been updated to free 'struct | |
| rewrite' instances, their '.instead_of' arrays, and their contents. | |
| (merge dcef3bf041 jc/remote-insteadof-leakfix later to maint). | |
| * The remote-matching logic for submodules has been corrected to resolve | |
| 'url.*.insteadOf' aliases before comparing the inventoried URL from | |
| '.gitmodules' with the URLs of configured remotes. | |
| * 'git diff --relative' running with '--cached' has been corrected to | |
| avoid a segfault when encountering unmerged paths outside the | |
| prefix. | |
| (merge 447126ed7d jk/diff-relative-cached-unmerged later to maint). | |
| * Two bugs in how 'git rebase' handles skipped 'fixup' and 'squash' | |
| commands have been fixed. One bug caused an incorrect commit count to | |
| be shown in the template message when multiple commands were skipped, | |
| and another prevented the editor from opening when the final command | |
| in a chain containing 'fixup -c' was skipped. | |
| * Git for Windows has been updated to avoid auto-detecting the symlink | |
| type if the target path starts with a slash, preventing NTLM | |
| credential leaks when checking out repositories with crafted | |
| symbolic links pointing to network shares. | |
| * 'git cat-file --batch-command' that asked for 'contents' without | |
| 'type' segfaults, which has been corrected. | |
| (merge 2abc7f0304 jk/cat-file-batch-wo-type-fix later to maint). | |
| * A memory leak in 'git merge' when run without arguments (which | |
| triggers the default-to-upstream path) has been fixed. A test has | |
| been added to cover this case. | |
| (merge 68cce04a02 tc/merge-default-to-upstream-leakfix later to maint). | |
| * A boundary case check in reachability bitmap traversal has been | |
| corrected to properly handle the object at position zero, which was | |
| previously skipped, leading to redundant bitmap loading. | |
| (merge b56b48301e dl/pack-bitmap-position-zero later to maint). | |
| * A crash in the 'sparse-index' collapse code when encountering an | |
| invalidated cache-tree node (due to an intent-to-add path) has been | |
| fixed by avoiding collapsing such subtrees. | |
| (merge eede1e69fe ds/sparse-index-ita-crash later to maint). | |
| * Documentation for 'git replay' has been updated to refer to its | |
| configuration variables. | |
| (merge 48c0549f5c kh/doc-replay-config later to maint). | |
| * Documentation for 'git interpret-trailers' has been updated to explain | |
| the format of trailer keys (alphanumeric characters and hyphens), | |
| replace outdated terminology, define key terms upfront, and document | |
| how comment lines in the input are treated. | |
| (merge 4515c86fd9 kh/doc-trailers later to maint). | |
| * The 'pack-objects' and delta-encoding code paths have been updated to | |
| use 'size_t' instead of 'unsigned long' for object sizes and offset | |
| limits, avoiding potential truncation issues on 64-bit Windows. | |
| (merge d50ac11724 js/pack-objects-delta-size-t later to maint). | |
| * A client requesting the promisor-remote capability without a value | |
| caused a null pointer dereference, which has been corrected by | |
| rejecting a request without an argument. | |
| (merge dd6b35ff71 en/serve-promisor-remote-fix later to maint). | |
| * Various tests in 't7900-maintenance.sh' have been updated to use a | |
| throwaway repository, and auto-detaching of maintenance tasks is now | |
| disabled for these tests to fix flaky races with concurrent background | |
| maintenance jobs. | |
| (merge 2775d8bcd1 ps/t7900-deflake-maintenance later to maint). | |
| * The help text for the '-l' option of 'git diff' has been updated. | |
| (merge 764243bdf4 en/diff-l-opt-help later to maint). | |
| * 'git -C <dir> diff fi<TAB>' did not complete 'file', which has | |
| been corrected. | |
| (merge 354d1bf3a0 jc/complete-diff-tracked-paths later to maint). | |
| * 'git -C <dir> checkout fi<TAB>' did not complete 'file', which has | |
| been corrected. | |
| (merge 05e2ab1f31 jc/complete-checkout later to maint). | |
| * The trailer parsing machinery has been updated to avoid mistaking | |
| lines that begin with a URL (e.g., 'https://...') as trailer lines. | |
| This prevents intended textual URLs from being mangled or mistakenly | |
| treated as metadata keys. | |
| * The instructions for deprecated commands emitted by | |
| you_still_use_that() have been reworded to clarify that the removal | |
| decision is final and to provide more assertive guidance on finding | |
| a replacement. | |
| (merge 8ace32221c jc/you-still-use-that later to maint). | |
| * The zsh completion script (in 'contrib/') has been updated to | |
| correctly locate the Git command after global options like '-C' by | |
| properly skipping them, similar to how the bash completion does. | |
| * The git worktree repair command failed to rewrite the .git file of | |
| a working tree from a relative path to an absolute path when the | |
| command was run in the working tree itself. The | |
| read_gitfile_gently() function was modified to also return whether | |
| the path originally recorded in the file was absolute, and this new | |
| capability is used to correctly detect such mismatches. | |
| * GitHub Actions CI workflow runs triggered by pull requests have | |
| been configured to cancel older runs when a new push is made to the | |
| same pull request. | |
| (merge a251b1bd21 hn/ci-cancel-stale-pr-runs later to maint). | |
| * The string extraction logic for the branch name and worktree name | |
| from the given path in 'git worktree add' has been corrected and | |
| simplified to avoid out-of-bounds reads and improper handling of | |
| trailing slashes. | |
| (merge 2e8a9d94b0 rs/worktree-add-basename-fixes later to maint). | |
| * The CI job for Debian 11 has been updated to use Debian 12, as the | |
| former is now out of the LTS period. | |
| (merge 00fa850235 jk/ci-bump-debian-to-12 later to maint). | |
| * The CI script to install dependencies for the documentation build | |
| has been updated to install asciidoctor directly via the system | |
| package manager instead of pinning to an older version via gem. | |
| Additionally, an obsolete variable used for retired Azure Pipelines | |
| environments has been removed. | |
| * The error path in 'git submodule--helper' has been updated to plug a | |
| memory leak when a repository handle could not be obtained, | |
| leveraging an updated idempotent repo_clear(). | |
| (merge 2c03739705 jk/submodule-error-leak later to maint). | |
| * Two members in "struct pathspec_item" were of type "char *", but | |
| nobody updated the string through these pointers. They have been | |
| made "const char *" instead. | |
| (merge 88d06b1c91 jc/pathspec-match-const later to maint). | |
| * The gitdatamodel documentation page has been linked from a handful | |
| of key documentaiton pages. | |
| (merge ec602484bd kh/doc-datamodel later to maint). | |
| * Running "git history" in a corrupt repository can (unsurprisingly) | |
| segfault when a necessary tree object is not found, which has been | |
| made to die more gracefully. | |
| (merge 76621488e8 jc/history-missing-tree-errorfix later to maint). | |
| * The development helper script to lint gitlink references in the | |
| documentation has been updated to avoid a newer Perl regular | |
| expression syntax that breaks on older Perl versions. | |
| (merge 8a631963a9 ta/lint-gitlink-older-perl-fix later to maint). | |
| * The autostash fallback in 'git checkout -m' has been refined to only | |
| retry when there are local changes. Additionally, a blank line now | |
| visually separates autostash conflict advice from the subsequent | |
| branch-switch message. | |
| (merge 2ba77ea828 hn/checkout-m-autostash-refine later to maint). | |
| * The memory leak caused by not unusing the commit buffer returned by | |
| repo_logmsg_reencode() during the rewording operation in 'git | |
| history' has been plugged. | |
| * The pathspec matching logic has been updated to avoid out-of-bounds | |
| memory accesses when a negative pathspec is shorter than the common | |
| prefix of positive pathspecs. | |
| * Other code cleanup, docfix, build fix, etc. | |
| (merge 026636128f ss/submittingpatches-typofix later to maint). | |
| (merge d2af22cc21 jc/rerere-doc-typofix later to maint). | |
| (merge c486c1df72 hk/typofix later to maint). |