Skip to content

Releases: gitbutlerapp/grit

v0.3.99

09 Jun 08:35

Choose a tag to compare

v0.3.99 — what changed since v0.3.94

A very large compatibility & refactoring release: 710 commits, ~175k insertions across 1,823 files. The focus was (1) extracting grit's core into a reusable library, and (2) closing hundreds of behavioral gaps against upstream git (validated against git 2.52.0).

Highlights

grit_lib — library-ification
The bulk of grit's plumbing and porcelain logic was extracted out of the CLI into a reusable grit_lib crate, with domain views (object_store, references, worktree_index, revision, diffing, merging, configuration) and a porcelain/plumbing/prelude layout. Cores extracted this release include: status, blame, diff, apply, am, notes, pathspec, stash, checkout, log, merge, rebase, cherry-pick, revert, tag, and format-patch.

New examples
Added a grit examples crate with simple example binaries showing how to drive grit_lib directly.

Test-tool scaffolding is now gated behind a default-on test-tools feature.

Compatibility fixes (467 fixes across 215+ test areas)

Hundreds of behavioral fixes to match upstream git exactly. Notable areas:

  • Interactive add / add -p / add -i — colorized hunks + diff.diffFilter, no-newline-at-EOF preservation, -U/--inter-hunk-context in reset/commit/stash -p, hunk-edit via the git editor, width-2 file numbering, wildcard/at-any-depth pathspecs.
  • Rebase (interactive, --root, --rebase-merges, fixup/squash) — --exec weaving, autosquash rearrange, fixup -C squash-section handling, merge-commit parent preservation, reflog old-value correctness, abbreviate-commands.
  • rev-parse@{push} via push refspecs, ^{/!...} search, --symbolic-full-name/--bisect ordering.
  • Config / repo-format — unsupported repo-version warn/fail, split-index shared-index writes, dedup of GIT_INDEX_VERSION warnings.
  • Reftable — single-transaction worktree branch ref+reflog writes, GIT_TEST_DEFAULT_REF_FORMAT precedence.
  • Sparse-checkout, clone (template dirs, intact-repo-on-failure), filter-branch, hash-object --path, editor fallbacks, status/porcelain-v2, cherry-pick/revert sequencer state, and more.

Test suite

27 upstream test files ported for portability (BSD wc/head, TERM=dumb, cwd-leak fixes, etc.), plus dashboard/baseline refreshes — all differentially verified against git 2.52.0.


Merged PRs

Full Changelog: v0.3.94...v0.3.99

v0.3.94

05 Jun 07:59

Choose a tag to compare

What's Changed

Full Changelog: v0.3.0...v0.3.94

grit v0.3.0

04 Jun 08:44

Choose a tag to compare

grit v0.3.0

A massive correctness release: 845 commits since v0.2.1, driving compatibility with upstream Git's test suite from 53.6% to 93.4% of subtests passing.

Git test-suite compatibility

v0.2.1 v0.3.0
Subtests passing 22,417 / 41,831 (53.6%) 39,430 / 42,220 (93.4%)
Fully passing test files 437 1,150 / 1,372

Highlights

Rebase (t34xx) — completed the rebase mega-family: --skip, merge backend, --update-refs (including worktree handling), quiet mode, malformed-todo handling, and abort/continue flows.

Diff & log (t4xxx) — true combined diffs (-c/--cc with @@@ hunks), --combined-all-paths with per-parent rename detection, word diff (--word-diff, POSIX word regexes), whitespace error highlighting (--ws-error-highlight), rename detection fixes (--no-abbrev raw format, same-path exact-rename suppression), diff-files unmerged-stage diffs and diffstat Unmerged lines, diff-tree --root --check, and reading .gitattributes from the index in bare/worktree-less repos.

Merge (t6xxx) — recursive-merge corner cases: rename/rename (1→2) content merges, directory/file conflicts (virtual D/F bases, relocated rename destinations, symmetric conflicts), nested virtual merge-base conflict preservation, criss-cross submodule conflicts, and fork-point cherry-pick filtering.

Plumbing & porcelainls-files --format placeholders, -k (killed), and submodule-aware -m; update-index --chmod no longer touches the worktree; apply -b, --ignore-space-at-eol, --ignore-cr-at-eol; add -p now honors -U/--inter-hunk-context/diff.context, renders additions like Git, and reports "Only binary files changed."; explicit divergent-pull exit codes; partial directory-pathspec deletes.

Other

  • New root Makefile wrapping cargo and test-harness workflows
  • Hundreds of additional fixes across revision walking (t1xxx), transport/pack (t5xxx), submodules (t7xxx), blame/annotate (t8xxx), and fast-import/export (t9xxx)

Full changelog: v0.2.1...v0.3.0

What's Changed

  • docs: verify t8 test family fully passing (105/105) by @schacon in #777
  • fix: make t7800-difftool fully pass (95/95) by @schacon in #776
  • T9 family tests passing by @schacon in #778
  • T1 tests passing by @schacon in #779
  • T2 family test passing by @schacon in #780
  • fix(clean): make t7300-clean fully pass by preserving harness config and surfacing unreadable-dir failures by @schacon in #782
  • fix: t7600/t7601/t7611 merge tests fully pass by @schacon in #781
  • fix: t7 family test improvements (t7418, t7505 rebase hooks) by @schacon in #784
  • T1 tests passing by @schacon in #785
  • Add grit-http-server PoC and fix upload-pack ref advertisement by @schacon in #783
  • fix: materialize empty tree in unpack-objects (t5300-unpack-objects 2… by @schacon in #786
  • T5 tests passing by @schacon in #788
  • T3 tests passing by @schacon in #787

Full Changelog: v0.2.1...v0.3.0

v0.2.1

01 Jun 12:01

Choose a tag to compare

A small follow-up to v0.2.0.

What's new

grit update — self-update

A new grit-specific command that updates grit to the latest release:

grit update            # upgrade the running install in place
grit update --dir DIR  # install into a specific directory

It runs the official installer at https://grit-scm.com/install (so platform detection
and asset naming stay single-sourced), defaulting INSTALL_DIR to the directory of the
running grit binary. Requires sh and curl.

grit -v shows the grit version

git version output now includes the grit crate version:

git version 2.47.0.grit-0.2.1

applied consistently to -v / --version / version / version --build-options,
and the bugreport / diagnose reports.

Full Changelog: v0.2.0...v0.2.1

Full Changelog: v0.2.0...v0.2.1

v0.2.0

01 Jun 11:40

Choose a tag to compare

Grit v0.2.0 is a large feature release — 321 commits since v0.1.6 — extending the
grit-lib engine and the grit CLI to cover most commonly-used, non-interactive Git
workflows. Each area below is validated against the upstream Git test suite (tests/).

Highlights

🔏 Signing (GPG + SSH) — new

  • New grit-lib/src/signing.rs and push_cert.rs (from scratch).
  • commit -S / commit.gpgsign, annotated tag -s/-u, verify-commit, verify-tag.
  • log/rev-list %G?/%GS/%GK/… and show --show-signature.
  • push --signed with HMAC nonce + GIT_PUSH_CERT* env.
  • Verify chooses format from the signature armor (SSH commits verify even with gpg.format unset).
  • Harness: t7510 28/28, t7528 26/29, t7031 14/14, t5534 13/13.

🌓 Sparse checkout

  • Cone + non-cone pattern load/save, sparse-directory index entries, read-tree/checkout materialization.
  • add/rm/mv/status respect the sparse specification.
  • Harness: t1091 76/77, t3705/t3602/t1011/t1090/t6428 green; t1092 64/106.

📦 Partial clone / promisor / lazy objects

  • filter=blob:none|tree:0|sparse|combine on clone/fetch, lazy fetch on touch, backfill/promisor-hydrate.
  • Harness: t0410 38/38, t5620 10/10, t4067 9/9, t6110 2/2; t5616 44/47.

🪝 Hooks

  • Multihook ordering, core.hooksPath, full v1 hook set wired with correct stdin/stdout/env.
  • Harness: t1800 44/44, t7503 22/22, t5571 11/11, t5401/2/3/4 green; t5407/t7505 improved.

🔀 Core workflows (non-interactive)

  • checkout/restore/reset, merge, cherry-pick/revert/rerere, status v1/v2, log.
  • gc/repack/maintenance run with scheduler backends, incremental/geometric repack, midx expire.
  • Harness: t7201-co 46/46, t7102 38/38, t7508-status 121/126, cherry-pick family green,
    t7600-merge 81/83, t7900-maintenance 71/72, t6500-gc 34/35.

🧩 Submodules

  • init/update/sync/deinit/status/foreach (non-interactive), gitlink handling.
  • Harness: t7400-submodule-basic 49→111/124, t7403 18/18, t7406 43/70, t7407 21/23.

🏗️ Foundation & quality

  • Repository session/discovery hardening (t1510 109/109, t1517 191/191).
  • Workspace-wide clippy cleanup: ~180 unwrap/expect deny-lint errors converted to proper
    error handling (behavior-preserving). cargo fmt clean; grit-lib lib tests 229/0; clippy green.

Scope & known limitations

See docs/v1-scope.md for the full
in-scope/out-of-scope breakdown. Out of scope for now: interactive modes (-p/rebase -i),
complex HTTP auth (Digest/NTLM/Negotiate), fsmonitor, and server-side daemons. Partial areas:
submodule --recurse-submodules checkout, sparse-index lazy expansion (t1092), and some log formats.

Full Changelog: v0.1.6...v0.2.0

What's Changed

  • remove plans by @schacon in #760
  • Library worktree support and t2402 harness by @schacon in #761
  • fix: handle gitfile GIT_DIR in repo setup by @krlvi in #762
  • fix: handle diff outside repo by @krlvi in #763
  • fix: format rev-parse git paths by @krlvi in #764
  • fix: deduplicate commit-tree parents by @krlvi in #765
  • fix: honor full log decorations from config by @krlvi in #766
  • fix: honor disabled reflog auto creation by @krlvi in #767
  • fix: validate loose objects in pack-objects by @krlvi in #768
  • fix: handle invalid double-star wildmatch by @krlvi in #769
  • fix: avoid duplicate update-ref transaction hooks by @krlvi in #770
  • fix: honor long magic pathspecs in add by @krlvi in #771
  • Worktree: linked HEAD, submodules, config, and harness by @schacon in #772
  • fix: sparse-checkout worktree config and apply (t1091 54/77) by @schacon in #773

New Contributors

Full Changelog: v0.1.6...v0.2.0

v0.1.6

11 May 13:35

Choose a tag to compare

What's Changed

Full Changelog: v0.1.3...v0.1.6

v0.1.3

11 May 08:22

Choose a tag to compare

What's New

  • Renamed crate from grit-rs to grit-clicargo install grit-cli now installs the grit binary
  • Shell installercurl -fsSL https://grit-lib.com/install | sh for macOS and Linux
  • GitHub Actions release workflow — pre-built binaries for macOS (x86_64 + ARM), Linux (x86_64 + ARM), and Windows on every tagged release
  • Updated website — install section with copy-to-clipboard, "Try the CLI" hero CTA

Full Changelog: v0.1.2...v0.1.3