Repository navigation
v0.5.21
What's changed
- grit-bench: add gc-loose scenarios (5ec1fbe)
- pack-objects: stream the delta search instead of loading every object (b43da69)
- Merge branch 'factory/ingest-pack-into-store' (ca4bdb1)
- docs: receiving packs into a custom object store (f80b2e5)
- unpack_objects: apply received packs to any object store (4438f0f)
- Honour shallow boundaries in repack, gc, prune, bitmaps and fsck (f7224da)
- Merge branch 'factory/commit-reject-unknown-flags' (4b11c2a)
- commit: reject unknown flags instead of using them as the message (deaf84b)
- Fixes #1915: report worktree file I/O failures with path and hint (d628740)
- Merge branch 'factory/pull-check-speed' (ce3fb94)
- Merge branch 'factory/composite-corrupt-error' (287deb3)
- docs: describe lazy v2 fetch negotiation and its git.git benchmark (60825cd)
- fetch: negotiate protocol v2 in lazy rounds instead of walking all history first (33f85c7)
- odb: report a damaged copy from CompositeStore instead of calling the object missing (8891e76)
- hooks: give Windows hooks plain repository paths and Git's tool PATH (f7c2260)
- Merge branch 'factory/commit-autostage-single-scan' (279719f)
- bench: record daily commit rows after the single-scan auto-stage commit (d9639b9)
- commit: scan the work tree once when auto-staging (7eed756)
- Merge branch 'factory/dead-diff-handle-paths' (96ffd3d)
- bench: record the 2026-10-24 regression rows before and after (591df8b)
- fetch: walk local haves only as far as the v2 rounds send (64cc3a7)
- log: read each listed commit once on the paged log walk (150e243)
- add: read each restaged file once (91da693)
- add: keep tracked restage parallel on large indexes (b490700)
- bench: add a both-sides content-merge daily scenario and document the merge speedup (746d6fe)
- merge: load attribute rules once per tree merge, not per merged path (f8eb35d)
- diff: delete Diff handle methods nothing calls (fc6f843)
- merge: drop the never-emitted set_upstream result (943979e)
- Merge branch 'factory/rename-rename-conflict' (680af8a)
- merge: stop re-merging a base path the current branch renamed away (0428b46)
- history: report conflicted paths in sorted order (d073c45)
- merge: report rename/rename (1to2) as a conflict instead of keeping both copies (4403bc0)
- Merge branch 'factory/stash-pop-conflict-hints' (96e4867)
- restore: report unmerged paths as a guided unmerged_paths error (f24fa9e)
- stash: tell users how to finish a conflicted pop or apply (af0a2a8)
- restore: refuse unmerged paths instead of calling them unknown (dae9a11)
- Merge branch 'factory/shallow-commit-graph' (0bd9f41)
- gc: skip the commit-graph in shallow, grafted and replaced repositories (60b7806)
- commit-graph: refuse to encode a parent that is not in the graph (43e1c99)
- Merge branch 'factory/stream-big-blobs' (22a99e3)
- grit-bench: add-big-file scenario with time and peak RSS (a3e9b71)
- grit-lib: stream files above core.bigFileThreshold into a pack when staging (62dd2bf)
- Merge branch 'factory/gc-auto' (4db386a)
- grit: run automatic maintenance after object-writing commands (fa73db2)
- maintenance: add gc_auto with Git's gc.auto heuristics and gc.pid lock (5e530ab)
- tests: pass the cancel argument status now takes (0fd66e8)
- Merge branch 'factory/revwalk-walk-symmetric' (0ce54f8)
- Merge branch 'factory/bitmap-writer-speed' (4e679b4)
- docs: describe the bitmap writer's walk and its cargo benchmark (29494fc)
- pack_bitmap: write bitmaps without reading blobs or re-walking history (0dc5e9c)
- test: use each reset fixture's target commit (edec764)
- reset: format rebased import ordering (f2cde73)
- docs: benchmarks for reset reusing the index it replaces (0a61eb6)
- index_from_tree: hand the walked rows to the index instead of re-pushing them (d44344c)
- reset --hard: flatten the target tree from the cache-tree and keep it (b78fed2)
- reset: rebuild the mixed-reset index from cached stat data and cache-tree (2307abc)
- Merge branch 'factory/head-commit-dedupe' (81f8a1d)
- Merge branch 'factory/midx-default-v1' (0d34158)
- gc midx: document midx.version and add a git round-trip regression test (be4b2ef)
- midx: write v1 by default and honour midx.version (b433cf4)
- fetch, pull: default to the current branch's remote instead of origin (3462ebd)
- state: add Repository::head_commit and use it for every HEAD-commit lookup (5d82041)
- history: convert library errors with one From impl instead of per-module adapters (e928c98)
- public-api: refresh log API snapshot ordering (cfc1808)
- benchmarks: record log pages on git.git against current main (118960f)
- grit-bench: time runs at child exit instead of at the next RSS poll (5fa57a5)
- log: hand the commits the walk already read to the output rows (fe01cff)
- packed-refs: decode record ids while validating them (57501c7)
- rev-parse: peel from object headers and read each dwim candidate once (242f98b)
- pack index: skip the forward scan when a monotonic probe jumps past it (7c0aaac)
- Merge branch 'factory/loose-write-unique-tmp' (c8c92a7)
- docs: note that concurrent object writes are idempotent (b8c80b9)
- odb: publish loose objects through unique temp files (438234f)
- Merge branch 'factory/repack-delta-reuse' (50fbc09)
- repack: guard time, memory and pack size against git (502e769)
- repack: balance the delta search and keep other packers' walk lean (379a0b7)
- repack, gc repack: add --force to recompute every delta (a400e42)
- repack: copy stored pack entries and search deltas in a bounded window (f964cb4)
- Merge branch 'factory/diff-typechange-status' (b14385a)
- diff: report file <-> symlink changes as type_changed in every diff mode (903d8b5)
- Merge branch 'factory/first-push-error-hints' (2a0855e)
- grit: say what happened and the next command for first-push, pull and merge errors (10df37c)
- grit-lib: typed errors for missing remotes, credentials and dirty worktrees (7a7e6f3)
- Merge branch 'factory/add-untracked-linear' (d1ea53f)
- add: stage untracked directories in one walk instead of one walk per directory (f0e6c89)
- grit-bench: add-many-dirs suite for initial add . over many directories (1a64baa)
- grit switch: warn about commits left behind on a detached HEAD (aa22e1e)
- rev_parse: tell a ref names a commit without inflating it (8866ead)
- orphans: stop the left-behind walk early when generations allow it (933ae51)
- switch: report commits left behind when leaving a detached HEAD (469185f)
- porcelain: share the orphaned-commit walk between reset and switch (f80126c)
- Merge branch 'factory/replay-outcome-subjects' (fce0b9c)
- Merge branch 'factory/commit-autostage-ad' (f94e695)
- commit: persist auto-staged index when nothing is left to commit (d02c2c6)
- Merge branch 'factory/fsck-streaming-memory' (cf333d0)
- pick, revert: share one --empty value enum (a3b829c)
- replay_sequence: report subjects and change ids so pick/revert stop re-reading commits (5d47ca2)
- bench: refresh fsck-medium baseline after streaming pack fsck (d309f6a)
- grit-bench: fail the fsck suite on a peak-memory regression (257a021)
- fsck: stream pack verification instead of holding every object (229134c)
- pack: share the depth-first delta walk between index-pack and fsck (38ad6e9)
- Merge branch 'factory/post-op-hooks' (da3bd7c)
- docs: document post-checkout, post-merge and post-rewrite on switch, merge, commit, rebase and history (6420b08)
- switch: add hooks_run to the JSON schema and output snapshots (ebe9536)
- test: post-operation hooks after switch, merge, amend and rebase (36f1573)
- hooks: run post-checkout, post-merge and post-rewrite after switch, merge, amend and rebase (2817d25)
- Merge branch 'factory/split-index-skiphash' (be736c0)
- split index: give the shared index a real checksum under index.skipHash (84f680a)
- split index: look up shared-index positions by binary search (e21fcec)
- Merge branch 'factory/rm-cached-safety' (66b5719)
- grit-lib: regenerate public-api.txt snapshot (70848db)
- rm: let --cached untrack files edited since commit (5a8f22b)
- Merge branch 'factory/thin-pack-idx-trailer' (515b23f)
- tests: thin pack completion must keep pack, idx and name consistent (20f4eae)
- Merge branch 'factory/upload-pack-deepen-not-wanted-refs' (4b928ba)
- upload-pack: send wanted-refs for want-ref and advertise only v2 features (4c45320)
- upload-pack: resolve deepen-not ref names and exclude them correctly (7fa0bad)
- docs: pack receive memory, thin-pack completion and benchmarks (5d51368)
- bench: record peak RSS on network scenarios and add clone/full@git-git (c1a1ef7)
- test: gate pack ingest peak RSS against git index-pack (0b2e41c)
- index-pack: keep received packs out of RSS and complete thin packs in place (42198cc)
- pack index: sort entries in place and stream the .idx to disk (c11cb19)
- Merge branch 'factory/remote-unreadable-exit' (82e0002)
- grit: exit 128 with kind remote_unreadable when the remote cannot be read (cd88845)
- grit-lib: report unreachable remotes as a typed Error::RemoteUnreadable (f1049a8)
- stash: never sign stash commits (eb67993)
- stash: reuse stat data and cache-trees in push and pop (d153a56)
- diff: reuse config and attributes across worktree-vs-index content checks (847c5dd)
- Merge branch 'factory/porcelain-api-cleanup' (b83c306)
- ident: typed Signature identities and Repository::identity (8b6150c)
- history: move squash-message helpers out of porcelain::rebase (5c4624e)
- stash: make RepositoryStash the one stash API (6d84a3d)
- porcelain: report detached HEAD as branch None in commit and switch outcomes (7fc55e2)
- Merge branch 'factory/merge-any-revision' (ecf4ab4)
- grit merge: accept tags, commit ids and revision expressions (7fa7cb5)
- grit-lib: resolve merge sources from any revision (e120cf1)
- Merge branch 'factory/ls-refs-prefix-first' (06a3ecf)
- bench: upload-pack ls-refs and v0 advertisement on the 100k-ref fixtures (cae8d36)
- serve: list only the requested ref prefixes and peel on demand (5963bcb)
- refs: skip loose refs outside a partial-name listing prefix (34d070d)
- docs: filtered upload-pack serving and blobless benchmarks (d52d28e)
- grit-bench: time blobless partial clone serving (6b46c7c)
- upload-pack: apply partial clone filters in the pack enumeration walk (6cae56b)
- rev-list: keep every annotated tag of a commit in object walks (91e7fa6)
- Merge branch 'factory/foreign-rebase-guard' (0ae050c)
- switch, status: refuse switching and report the branch during paused operations (ae10a06)
- rebase: recognise rebases git started and stop in a state git can finish (d43ccc3)
- Keep sparse-checkout paths out of the work tree on checkout (157a05d)
- tests: pass a Cancel to status() in the core.symlinks=false tests (3b629c9)
- diff: read a plain-file symlink entry by content (2b10df1)
- docs: describe core.symlinks=false staging and the WorktreeModePolicy API (98ada1f)
- index: keep symlink entries as 120000 when core.symlinks=false (df27a62)
- site: reject grit_lib paths in the docs that are not public API (d1ffc33)
- docs: point library guides at public grit_lib paths (d21d69a)
- grit add: test parallel processes and document index.lock behavior (0208224)
- index: read the index under index.lock in add, rm and tracked staging (8fdbdec)
- Merge branch 'factory/clone-checkout-cpu' (b7e20e4)
- grit-bench: list clone/checkout@synth-100k in the daily matrix doc (b064d7f)
- grit-bench: track wide-tree clone checkout in the daily matrix (5aff444)
- checkout: build the cache tree once for a populated-tree checkout (8de3516)
- Merge branch 'factory/fetch-tag-follow-fast' (489f267)
- Merge branch 'factory/hook-output-capture' (5d61d87)
- fetch: decide tag following from pack membership, not an object walk (a2e214e)
- hooks: hand hook output to the caller instead of printing it (e26bb26)
- rev-list, crlf: drop GIT_TRACE lines written straight to process stderr (245e065)
- bench: record show HEAD rows before and after (bca7736)
- repo caches: skip canonicalizing when the local config path already matches (afcae9b)
- odb: recognize the empty tree by constant instead of hashing on every read (22d178b)
- show: skip ref decorations unless the output renders them (da9beed)
- diff: run single-entry content diffs without probing the thread policy (8beda38)
- Merge branch 'factory/pathspec-attr-repo' (d96ea56)
- pathspec: honor attr macros and core.ignorecase, reject malformed attr magic (4b7e885)
- pathspec: load attributes once per filter pass with PathspecMatcher (7913ac3)
- docs: point the pathspec guide at PathspecMatcher (e5193f3)
- docs: attribute pathspecs in grit diff and the library matcher (fba86b8)
- pathspec: evaluate attr magic in Repository::paths_match_pathspecs (7762dca)
- Merge branch 'factory/remote-remove-batch-delete' (ffb6822)
- refs: preserve batch duplicate validation after rebase (b430b84)
- refs: delete large batches in linear time on the files backend (bdff90f)
- bench: record branch and tag daily rows on many-refs around the packed-refs search (f37fe03)
- refs: trust the packed-refs sorted trait and search the file in place (75c4b56)
- fsck: test the packedRefUnsorted check end to end (54659c2)
- refs: index packed-refs without decoding the whole file (b7e2bf1)
- Merge branch 'factory/revs-range-listing' (2657344)
- rev-list: honour use_commit_graph in hide-bounded range walks (4315303)
- merge-base: skip unreadable history behind excluded tips in range walks (6761e2b)
- rev-list: bound unlimited A..B listings by the excluded tips (48e3335)
- revwalk: queue parents on first discovery in range walks, like git rev-list (b67ae9b)
- Merge branch 'factory/issue-1704-api-219d' (2f4b7d0)
- fix: cleanup failed clone after RemoteRefNotFound (048229f)
- bundle: stream the pack with serve settings instead of push settings (9ac763c)
- tests: complete thin packs in an isolated receiver repository (1db4632)
- bench: add bundle/create-all@git-git daily scenario (955f6e0)
- pack-objects: reuse on-disk deltas against bases the peer holds (8147101)
- Merge branch 'factory/commit-msg-race' (cb27c72)
- Stress concurrent path commits and document the guarantees (6211543)
- Build each commit on the HEAD read before its index (5f464db)
- Keep the requested commit message unless commit-msg ran (163e896)
- Lock the index before a partial or patch commit writes anything (54e0cfc)
- Merge branch 'factory/credential-helper-url' (37c2ba0)
- fix: resolve add.v2.json merge conflict markers (e9b1ebb)
- docs: describe what credential helpers receive over HTTPS (40a739d)
- Send credential helpers only protocol, host and repository path (cf47eff)
- Merge branch 'factory/filter-shell-resolve' (1c01643)
- command_runner: mark the inherited PATH read as a spawn-boundary exemption (1517538)
- filters: never store unfiltered content when a required filter fails (8215768)
- command_runner: resolve the shell for every sh -c spawn like Git (0039f61)
- fix: NeverCancel at remaining test and pull call sites (79ab795)
- fix: clippy on cancel threading (too_many_arguments, must_use) (d5bdd14)
- Fix streaming repack idx rows, pack+loose deltify, and disk staging (10f19cd)
- fix: rebase follow-ups after cancel epic merge with main (fa97a96)
- fix: green grit-cli schema checks; index-pack cancel polls and tests (43a215a)
- grit-lib: cancel through index-pack; fix call sites and docs (ac034b1)
- Clippy: merge identical pack_opts branches in maintenance repack (90eb801)
- Fix streaming repack reuse: fallback when delta base excluded, O(1) offset lookup (45d61de)
- Stream verbatim repack when one pack and zero loose objects (46304c2)
- Address review: explicit repack always runs; rewrite when packs exist (0f694ec)
- Fixes #1684: skip or reuse packs on gc/repack when Git would (9735b51)
- grit-lib: finish cancel threading for status, bundle, fetch_all (697bdec)
- tests: fix NeverCancel imports after fetch_remote wiring (a6247a6)
- tests: import NeverCancel for fetch_remote call sites (165f6ad)
- grit-lib: complete cancel on push/fetch/status; refresh public-api (4ae8685)
- grit-lib: cancellation, typed switch/clone errors, export hunk bundle (e2a5b07)
- Merge branch 'factory/refstore-backend-authoring' (3c2c979)
- grit-lib: update the public API snapshot (8f4cdfa)
- docs: writing a ref backend, and opening with no git directory (90ae570)
- repo: open with injected backends without a git directory layout (6ebdae4)
- test-support: public RefStore conformance suite (fccbc9e)
- refs: public backend helpers for custom RefStore implementations (49bc643)
- Merge branch 'factory/odb-contains-result' (17c00f9)
- Propagate object store failures from existence checks in decision paths (45bb088)
- odb: add fallible Odb::contains next to the lenient exists probes (3ce84b1)
- Merge branch 'factory/global-repo-options' (8e9e4e0)
- skill: describe -C and -c without spelling them as grit commands (05cab44)
- cli: global -C, -c, --git-dir, --work-tree and -q on clone and push (0a9f62c)
- environment: typed command-line config overrides and git-dir/work-tree builders (06069d6)
- Merge branch 'factory/upload-pack-streaming' (51496d8)
- docs: describe pack.depth 0, base ordering and batched pack writes (b859569)
- upload-pack: test full-clone serving against system git (d1450e5)
- pack-objects: encode pack batches on long-lived workers (8c8a1d7)
- pack-objects: report verbatim reuse from the streaming pack writer (7a4761c)
- pack-objects: write delta bases before their targets (3a6ba73)
- upload-pack: keep sending on-disk deltas when pack.depth is 0 (f90f142)
- pack-reuse: resolve one delta base instead of remapping every offset (3d58c3b)
- Merge branch 'factory/fast-delete-checkout' (9504e94)
- docs: delete-heavy switch and hard reset benchmarks (cfdcf8b)
- bench: daily rows for delete-heavy switch and hard reset (ff77445)
- reset --hard: one stat pass, no content reads for deletions (59aebc9)
- switch: hash racily clean paths in parallel from the guard's scan stats (8fc6bf8)
- revwalk: list A...B as a symmetric difference in RevWalk::walk (1dc4795)
Full Changelog: v0.5.20...v0.5.21