5 repos · 37 commands · 5 broken · 5 slow · 5 filed
Played a git power user on a Linux cloud VM: git-built repos (commit-graph with changed-paths, MIDX+bitmaps, split index, packed refs, worktrees, LFS, config includes, bare, separate-git-dir), alternating git and grit through a day of work, hook/reflog/history-edit/rebase/stash interop, kill -9 and concurrency, and cargo + git/git perf. On-disk interop is very solid (git fsck --strict stayed clean after every mixed session, git continued a grit-stopped rebase and vice versa), but path-limited log/revs is badly broken for cwd-relative and wildcard pathspecs, plus several config/rev-syntax compat gaps. 5 of 6 'fixed' issues verified; #2230 still reproduces with the default page limit.
| repo | files | commits | .git | notes |
|---|---|---|---|---|
| rust-lang/cargo | 3,078 | 23,596 | 81 MB | |
| git/git | 4,857 | 82,616 | 330 MB | with commit-graph --changed-paths |
| octocat/Hello-World | 1 | 3 | 1 MB | cloned, not used |
| scratch/adv (cargo clone with bitmap+MIDX+split index+commit-graph) | 3,082 | 23,612 | 86 MB | |
| scratch/hist, xop, st, pg, r2, slash, rt, attr, crlf, fn, lfsrepo, super, s256, wtm, hk (small scenario repos) | 8 | 75 | 2 MB |
| command | repo | grit | git | grit/git | result | notes |
|---|---|---|---|---|---|---|
| grit status (clean) | git/git | 8.2 ms | 6.9 ms | 1.2× | ok | |
| grit log -n 100000 --oneline | git/git | 714 ms | 654 ms | 1.1× | ok | 1.75x RSS |
| grit revs --count HEAD | git/git | 27 ms | 47 ms | 0.6× | ok | |
| grit blame -L 1,50 builtin/log.c | git/git | 181 ms | 221 ms | 0.8× | ok | |
| grit blame builtin/log.c | git/git | 330 ms | 312 ms | 1.1× | ok | |
| grit diff HEAD~100..HEAD --stat | git/git | 102 ms | 204 ms | 0.5× | ok | |
| grit show --stat HEAD~5 | git/git | 3.3 ms | 2.6 ms | 1.3× | ok | |
| grit log -S blame_entry -n 20 --oneline | git/git | 8.44 s | 12.93 s | 0.7× | ok | |
| grit merge-base HEAD~5000 HEAD~3000 | git/git | 6.6 ms | 31 ms | 0.2× | ok | |
| grit log --since=2025-06-01 --author=nomatch --oneline (default page) | git/git | 648 ms | 52 ms | 13× | slow | #2230 not fixed; with -n 100000: 44.5 ms |
| grit log --since=2026-10-01 --oneline -- Makefile (default page) | git/git | 251 ms | 3.4 ms | 74× | slow | #2230 |
| grit log --since=2025-01-01 --oneline -- builtin/log.c | git/git | 127 ms | 12 ms | 11× | slow | #2230 (10x) |
| grit log --oneline -- builtin/log.c | git/git | 134 ms | 117 ms | 1.1× | ok | |
| grit log -- '*/log.c' (wildcard pathspec) | git/git | — | — | — | wrong | No commits yet.; git lists commits (#2299) |
| grit log -- log.c (from builtin/) | git/git | — | — | — | wrong | No commits yet. (#2298) |
| grit switch --detach HEAD~20000 | git/git | 380 ms | 300 ms | 1.3× | ok | |
| grit switch master (back, 20000 commits) | git/git | 820 ms | 340 ms | 2.4× | ok | 2.4x slower, 1.7x RSS; below the 3x bar |
| grit reset --hard HEAD~3000 | git/git | 420 ms | 350 ms | 1.2× | ok | |
| grit merge (c1ab07b^2 into c1ab07b^1, 4850 files) | git/git | 700 ms | 990 ms | 0.7× | ok | identical result tree |
| grit add + commit (986 modified .c/.h files) | git/git | 150 ms | 270 ms | 0.6× | ok | add 80 ms + commit 70 ms vs git add 260 ms + commit 10 ms; tree identical |
| grit clone --depth 50 file:// | git/git | 8.16 s | 8.07 s | 1.0× | ok | |
| grit clone --blobs none file:// | git/git | 7.56 s | 8.78 s | 0.9× | ok | |
| grit status (clean) | rust-lang/cargo | 14 ms | 12 ms | 1.2× | ok | 2.9x RSS but absolute 18 MB |
| grit log -n 100000 --oneline | rust-lang/cargo | 198 ms | 172 ms | 1.1× | memory | 2.6x RSS |
| grit revs --count --all | rust-lang/cargo | 188 ms | 148 ms | 1.3× | ok | |
| grit diff HEAD~1000..HEAD --stat | rust-lang/cargo | 200 ms | 312 ms | 0.6× | ok | |
| grit fsck (vs git fsck --connectivity-only) | rust-lang/cargo | 1.56 s | 469 ms | 3.3× | slow | 3.3x; grit fsck does a fuller check (vs git fsck --strict 5.7 s on adv, grit 1.6 s) so not filed |
| grit log -S Workspace -n 10 | rust-lang/cargo | 113 ms | 188 ms | 0.6× | ok | |
| grit gc (--shared clone) | rust-lang/cargo | 580 ms | 720 ms | 0.8× | ok | #2223 fixed |
| grit gc (all-into-one with loose objects) | rust-lang/cargo | 1.90 s | — | — | ok | ignores pack.writeBitmaps/gc.writeCommitGraph/gc.packRefs (#2301) |
| grit clone https://github.com/rust-lang/cargo | rust-lang/cargo | 2.54 s | 4.09 s | 0.6× | ok | fsck --strict clean, refs identical |
| grit history reword/drop/squash/fixup/split/absorb/undo | scratch/hist | 80 ms | — | — | ok | fsck --strict clean, incl. rewriting below a merge commit |
| grit rebase (conflict) then git rebase --continue | scratch/xop | — | — | — | ok | |
| grit status during git bisect / cherry-pick on detached HEAD | rust-lang/cargo | — | — | — | wrong | empty branch name, operation unnamed (UX; not filed, cap reached) |
| grit worktree add <path> master (bare repo) | scratch/bare | — | — | — | error | #2305 |
| grit resolve ':/feature' | scratch/slash | — | — | — | wrong | #2300 |
| grit commit with commit.gpgsign=true via ssh signing helper | scratch/hist | — | — | — | ok | environment's signing helper intermittently took 4-20 s; grit holds index.lock while signing (git does not stall here since its commits were unsigned in this env); not a grit bug per se |