The 'NO_PARSEOPT' macro has been removed from a few commands that have
migrated to use the parse_options() API, so that they will be included
in the output of 'git --list-cmds=parseopt' for shell completion, and
'git fast-import' has been updated to handle shell completion requests
without blocking on standard input.
* tj/drop-no-parseopt:
t0012: catch builtins that keep NO_PARSEOPT after conversion
git.c: drop NO_PARSEOPT from builtins that use parse-options
parse-options: answer --git-completion-helper before command runs
The 'SubmittingPatches' document has been updated to discourage the
anti-pattern of adding a failing test in one commit and fixing it in
a subsequent one, advising contributors to combine the test and fix
into a single commit for easier review
* js/doc-test-fix-anti-pattern:
SubmittingPatches: avoid add-failing-test-then-fix anti-pattern
The index writer has been taught to check the untracked cache
against the filesystem when an FSMonitor trivial response is
received, preventing commands like 'git add' from saving a new token
while leaving stale untracked cache entries intact.
* ik/fsmonitor-untracked-cache-trivial-response:
fsmonitor: check the untracked cache after a trivial response
The git annotate command has been simplified to pass its arguments
down to git blame unchanged, as the redundant string array
manipulation was causing an issue with --git-completion-helper.
* tj/annotate-blame-args:
annotate: pass the arguments to blame unchanged
The Cirrus CI configuration file has been deleted, as the service
was shut down and the configuration is no longer functional.
* ta/ci-retire-cirrus-ci:
ci: delete defunct Cirrus CI configuration
The documentation for the parse-options API has been corrected to
restore a missing word.
* cu/doc-api-parse-options:
api-parse-options.adoc: restore a dropped word
Error handling in the object file writing paths has been polished to
properly surface failures when 'index-pack' exits abnormally, and to
issue a warning rather than failing silently when the cleanup of
temporary lockfiles fails.
* jt/object-file-error-handling:
object-file: return error on index-pack abnormal exit
object-file: warn on failed unlink
The 'path-walk' traversal has been corrected to allow revisiting paths
from tagged trees by removing processed paths from the queue
suppression set, ensuring objects introduced by tagged trees at
previously visited paths are no longer skipped.
* ds/path-walk-tagged-tree-revisit:
path-walk: allow revisiting paths from tagged trees
Various corner cases in the cruft-less MIDX feature have been fixed
to ensure reachability closure when writing reachability bitmaps,
such as properly retaining cruft packs after incremental repacks or
when containing kept packs.
* tb/repack-cruft-less-midx-corner-cases:
repack: include required packs in incremental MIDX writes
repack: defer allocating the append plan's write step
repack: track the preferred pack explicitly in MIDX write steps
repack: follow kept packs when omitting cruft from the MIDX
repack: use a sorted list for explicitly kept packs
repack: retain cruft packs in MIDXs after incremental repacks
pack-objects: ensure tree/tag closure with '--stdin-packs=follow'
pack-objects: introduce `stdin_packs_context` struct
CodingGuidelines has been updated to state that Perl 5.26.0 is
required these days, which is the case since late 2024.
* ta/cg-require-perl-5.26.0:
CodingGuidelines: update the required Perl version
The documentation for 'git branch' has been updated to consistently
use 'git switch -c' instead of 'git checkout -b' in its examples,
aligning with the earlier promotion of 'git switch'.
* jc/branch-doc-consistently-promote-switch:
branch doc: consistently promote 'switch'
Various refactoring patches around the commit-graph writing code have
been applied to modernize interfaces and consolidate parameters into a
single options structure, in preparation for pluggable commit-graph
backends.
* ps/commit-graph-write-refactor:
commit-graph: modernize function names
odb/source-files: verify commit-graphs as part of fsck
builtin/commit-graph: set flags directly
commit-graph: fix mixup of write/verify flags
commit-graph: move remaining write parameters into options
commit-graph: merge the two commit graph writers
commit-graph: drop redundant flags in write context
commit-graph: drop `NULL` checks for write options
commit-graph: pass writer flags via options
commit-graph: rename `struct commit_graph_opts`
The remote helper documentation for the 'pushcert' option has been
updated to mention that it can also take 'if-asked', reflecting the
existing implementation in the code.
* ll/doc-pushcert-if-asked:
doc: remote-helpers: option pushcert if-asked
The graph drawing logic has been updated to avoid indenting visual
roots when there are columns to their right, which prevents rendering
artifacts.
* cd/shift-root-in-graph-fix:
graph: do not indent visual roots with columns to their right
The code in 'git pack-objects' used to truncate object sizes on
platforms where 'long' is 32-bit but 'size_t' is larger (like 64-bit
Windows) when handling large objects exceeding 4GiB, which has been
corrected by using 'size_t' and 'off_t' appropriately.
* ep/pack-objects-streamed-large-blobs-fix:
pack-objects: use size_t for streamed large blobs
The GitHub Actions CI jobs have been updated to fix breakages caused
by the move to Ubuntu 26.04 runner images, including using 'apt-get'
instead of 'apt' for stable CLI output, elevating permissions when
replacing system binaries, and temporarily pinning the 'linux32' job
to Ubuntu 24.04 to avoid seccomp-related networking failures.
* hn/ci-ubuntu-26.04-fixes:
ci: pin linux32 to ubuntu-24.04 to restore networking
install-dependencies: work around a permission problem
ci: use apt-get in the linux32 job
The 'struct repo_config_values' structure has been documented to
explicitly discourage adding new members to it, pending a wider
cleanup of repository configuration and settings.
* jc/freeze-repo-config-values:
repo_config_values: freeze the structure for now
The connectivity check algorithm has been updated to ignore
replacement objects, aligning its behavior with operations like 'fsck'
and 'pack-objects' that also require the original underlying objects
to be present.
* kk/connectivity-check-ignore-replace:
rev-list: ignore replacements in the connectivity check
The temporary object directory migration logic, used for batch
fsyncing, has been updated to correctly merge the loose object index
file ('loose-object-idx') when migrating to the primary object
directory, fixing a migration failure when a compatibility hash is
enabled.
* jt/tmp-objdir-loose-idx-merge:
tmp-objdir: merge loose object index when migrating tmpdir
loose: lift loose object index writing logic into helper
loose: lift loose object index parsing logic into helper
loose: use finite timeout when locking "loose-object-idx" file
The process of parsing command-line options in commands that perform
an early scan over their arguments has been unified using a new
early-scan sub-API. The 'git fast-import' command has been converted
to use this API, safely parsing and skipping known options taking
separate values to prevent logic bugs.
* cc/early-scan-options:
fast-import: use early_scan_options() for --allow-unsafe-features
parse-options: add early_scan_options()
parse-options: extract lookup_long_opt() from parse_long_opt()
parse-options: add parse_options_takes_argument()
The configuration file writing machinery has been updated to inspect
the permission bits of the original configuration file and refrain
from overwriting a read-only file using its lockfile renaming
mechanism.
* jc/config-honor-file-permission:
config: honor file permission bits
A new document, gitsecurityboundary(7), has been added to clarify
the security boundaries Git guarantees and the responsibilities of
the user, aiming to provide a clear reference for what constitutes a
security vulnerability in Git.
* tc/security-boundary-doc:
Documentation: clarify Git's security boundary
The test environment setup in the CI scripts has been consolidated and
deduplicated to remove redundancies and simplify test flag management.
* ps/ci-consolidate-test-variables:
ci: don't override initial branch name in testbed job
ci/lib: add another NO_RUST build using glibc
t: honor default ref storage format
ci/lib: merge switches for specific job names
ci/lib: deduplicate test variables by pattern matching
ci/lib: always set GIT_TEST_USE_SET_E on Linux jobs
ci: consolidate setup of test environment
The code in 'git pack-objects' used to truncate object sizes on
platforms where 'long' is 32-bit but 'size_t' is larger (like 64-bit
Windows) when handling large objects exceeding 4GiB, which has been
corrected by using 'size_t' and 'off_t' appropriately.
* ep/pack-objects-streamed-large-blobs:
pack-objects: use size_t for streamed large blobs
The 'simple' push resolution in 'git rev-parse @{push}' has been
updated to mirror the behavior of 'git push'. When the configured push
remote differs from the fetch remote, it now resolves to the branch of
the same name on the push remote instead of failing.
* hn/remote-simple-push-triangular:
remote: resolve "simple" @{push} when pushing to another remote
remote: move "simple" @{push} resolution into a helper
Tests in 't5702' that grep the output of 'env' to check for the
'GIT_PROTOCOL' environment variable have been updated to explicitly
echo the variable instead, making them resilient to quoting changes
introduced in newer GNU coreutils.
* jk/test-env-quoting-fix:
t5702: be more resilient to env quoting
The 'range-diff' command has been updated to use the repository
context pointer from 'diff_options' instead of relying on the global
'the_repository' and 'the_hash_algo' variables, as part of the
libification effort.
* oa/range-diff-repo:
range-diff: use diffopt->repo instead of the_repository
The configuration parsing in the 'merge-ort' backend has been updated
to accept valueless settings for 'diff.renames', 'merge.renames', and
'merge.directoryRenames', which are now properly treated as true.
* tb/merge-ort-valueless-rename-config:
merge-ort: accept rename settings given without a value
Various functions and data structures that no longer need to be
globally visible, such as those exposed for the now-removed
'recursive' merge strategy, have been made file-scope static or
removed entirely to shrink the public API surface.
* jc/mark-static:
unpack-trees: hide verify_uptodate()
read-cache: hide refresh_cache_entry()
add -i: hide init/clear_add_i_state() functions
ident: remove unused author_ident_sufficiently_given()
Various cleanups in the 'commit-graph' builtin command, removing
global state and updating to not rely on the implicit
'the_repository' variable, in preparation for making the
commit-graph subsystem pluggable.
* ps/commit-graph-cleanups:
builtin/commit-graph: de-globalize options handling
builtin/commit-graph: de-globalize write options handling
builtin/commit-graph: simplify how we wire up common options
builtin/commit-graph: drop global "--object-dir=" switch
builtin/commit-graph: get rid of `the_repository`
builtin/commit-graph: drop declaration for `read_replace_refs`
builtin/commit-graph: rename subcommand functions
The 't1467-refs-rename.sh' test script has been updated to use the
'test_must_fail' helper instead of the '!' operator when checking for
expected command failures, ensuring that crashes are not silently
ignored.
* hk/test-t1467-refs-rename:
t/t1467: use test_must_fail in place of NOT operator
The beginner's tutorial in 'gittutorial.adoc' has been rewritten to
focus on a minimal set of commands needed to create a repository,
make commits, and push to a remote host, optimizing for a quick
one-hour learning experience.
* je/doc-new-git-tutorial:
doc: add new Git tutorial for beginners
doc: remove gittutorial
The object database files backend has been updated to reload
alternates when an object lookup fails on retry. This restores a lost
capability to find objects moved to a newly added alternate during a
concurrent repository rewrite, with caching and deduplication
optimizations to avoid performance regressions.
* ps/odb-reload-alternates:
odb/source-files: only reload alternates when the file has changed
odb/source-files: avoid stat'ing already-known alternates
odb/source-files: simplify directory duplication detection
odb/source-files: reload alternates on retry
odb/source-files: always load alternates via primary object directory
odb/source-files: rename alternates-related functions
The prune_packed_objects() API and its callbacks have been updated to
take a 'struct repository' pointer instead of relying on the global
'the_repository' variable, moving the subsystem closer to being fully
libified.
* sm/prune-packed-libification:
prune-packed: remove USE_THE_REPOSITORY_VARIABLE
The output from 'git init' has been corrected to display the
absolute path of the created repository, addressing a recent
regression.
* mh/init-show-abspath:
init: show absolute path of (re)initialized repository
Use of "test -e" and "! test -e" in t5402 have been updated
to use test_path_exists and test_path_missing.
* tk/t5402-test-path-helper:
t5402: use test_path_* helpers instead of test -e and test -f
The documentation for SSH signature verification has been updated to
clarify that key lifetime checks depend on spoofable dates.
* cr/doc-gpg-ssh-key-lifetime:
doc: gpg: say which date SSH key lifetimes are checked against
The 'git multi-pack-index write' command has been updated to silently
return success when there are no object entries to index. This avoids
writing empty 'multi-pack-index' layers, which previously caused
subsequent incremental midx writes using the '--bitmap' option to fail
when attempting to load the missing reverse index.
* pp/midx-write-skip-empty:
midx-write: skip writes with no object entries
Tests for the option precedence of '--allow-onelevel' and its
negated form have been added to 'git check-ref-format',
establishing the current behavior before a planned migration to the
'parse_options()' API.
* fd/check-ref-format-onelevel-tests:
t1402: test --no-allow-onelevel option precedence
A test script has been updated to use the test_path_exists helper
instead of a raw test -e command, improving diagnostic output on
failure.
* tk/t0410-test-path-exists:
t0410: use test_path_exists instead of test -e
Test updates (in 't5300') to use the 'test_path_is_file' helper for
checking file existence.
* ot/t5300-test-path-is-file:
t5300: modernize test path checks in t5300
The commit-graph fuzzer has been updated to supply a placeholder
'.gitdir' to the repository. This prevents early failures when
prepare_repo_settings() is called, allowing the fuzzer to proceed and
test optional chunks such as generation data and Bloom filters.
* sj/oss-fuzz-commit-graph-gitdir:
oss-fuzz: set a gitdir in the commit-graph fuzzer
The test script 't0001-init' has been updated to avoid piping the
output of 'git version' directly into 'sed', ensuring command failures
are properly caught.
* sp/t0001-avoid-pipe:
t0001: avoid pipes in test scripts
The object storage format has been made configurable via the
'extensions.objectStorage' configuration variable, allowing users
to specify the storage backend and an optional payload, mirroring
the design of 'extensions.refStorage'.
* ps/odb-object-storage-extension:
builtin/submodule: propagate "--object-storage-format="
builtin/clone: introduce "--object-storage-format="
builtin/init: introduce handling of object storage format
builtin: expose the object storage format
setup: allow overriding object storage format via environment
setup: introduce object storage extension
loose: drop unused `repo_write_loose_object_map()`
The post-fetch connectivity check in 'git fetch' has been corrected
to avoid passing alternate refs as positive revisions during a
deepening fetch, plugging a severe performance bug.
* iw/connected-deepen-fetch-no-alternate-refs:
odb: ignore refs of shallow and grafted alternates
connected: negate alternate refs in deepening fetches too
The GitLab CI configuration has been updated to disable shallow clones
for the 'check-whitespace' and 'check-style' jobs by setting
'GIT_DEPTH' to 0, preventing them from failing on large merge requests
that exceed the default shallow clone depth.
* ps/gitlab-ci-whitespace-job-shallow-clone-fix:
gitlab-ci: fix "check" jobs with large merge requests
The tag backfilling negotiation in 'git fetch' has been updated to
explicitly include the in-flight fetched tips as 'haves', preventing
the server from resending objects when batched reference updates are
used.
* kn/fetch-tag-backfill-batch-fix:
fetch: advertise fetched refs when backfilling tags
transport: add `transport_options_release()`
t5510: cover upstream info update on fetch failure
The output of 'git repo info' has been updated to use
'references.storageFormat' instead of 'references.format' for
consistency with recent ref-storage-format terminology updates.
* ps/repo-ref-storage-format-fix:
builtin/repo: rename "references.format" to "references.storageFormat"
The 'bundle-uri' subsystem has been updated to stop using the global
'the_repository' variable by passing down the repository context to
helper functions, allowing the removal of the
'USE_THE_REPOSITORY_VARIABLE' macro.
* oa/bundle-uri-drop-the-repository:
bundle-uri: stop using the_repository