5 repos · 29 commands · 4 broken · 5 slow · 5 filed
Git power user on macOS 15 / M3: alternated git and grit on git-built repos with MIDX+bitmaps, split index, commit-graph (changed paths), sparse-checkout cone + sparse index, linked worktrees, submodules, reftable, hooks, config includes, CRLF/filters/ident/UTF-16, and ran git gc --auto / git commit concurrently with grit commit/gc. On-disk interop is very solid (git fsck --strict clean everywhere, byte-identical trees for attribute/filter/symlink/odd-name cases, all 6 fixed issues verified). The problems are in behavior a git user relies on: a hasconfig includeIf identity bug, stale gitlinks in the index after switch/merge, missing merge/commit hooks, no ORIG_HEAD, and log -S/-G rename false positives. 5 issues filed.
| repo | files | commits | .git | notes |
|---|---|---|---|---|
| rust-lang/cargo | 3,078 | 23,588 | 87 MB | also used for local clones, partial clone, gc/reflog tests |
| git/git | 4,857 | 82,605 | 340 MB | commit-graph with changed paths written by git |
| scratch/adv (git-built: midx+bitmap, split index, commit-graph, submodule, worktree, hooks) | 435 | 1,509 | 3 MB | |
| octocat/Hello-World | 1 | 3 | 1 MB | cloned, not otherwise used |
| scratch/* (attrs, fs, case, sparse, reftable, hooks, pickaxe, in-progress-ops) | — | — | — | small synthetic repos created with git and grit |
| command | repo | grit | git | grit/git | result | notes |
|---|---|---|---|---|---|---|
| grit status | rust-lang/cargo | 20 ms | 20 ms | 1.0× | ok | with Git-written midx; 14.8 MB without |
| grit status | git/git | 10 ms | 130 ms | 0.1× | ok | git first run was cold |
| grit log -n 20000 | rust-lang/cargo | 150 ms | 100 ms | 1.5× | memory | 2.9x git's peak RSS |
| grit log -n 10000 | git/git | 70 ms | 60 ms | 1.2× | ok | |
| grit log -- src/cargo/core/resolver | rust-lang/cargo | 110 ms | 90 ms | 1.2× | ok | |
| grit log -n 200 -- cache.h | git/git | 20 ms | 19 ms | 1.1× | ok | |
| grit revs --count HEAD | git/git | 20 ms | 10 ms | 2.0× | ok | |
| grit blame builtin/commit.c | git/git | 230 ms | 140 ms | 1.6× | ok | |
| grit blame Cargo.toml | rust-lang/cargo | 60 ms | — | — | ok | 65 MB peak |
| grit log -S the_repository -- builtin/ | git/git | 3.98 s | 948 ms | 4.2× | slow | 4.2x; also returns 2 extra commits (renames), filed #2203 |
| grit log -S sha1_file -n 20 -- cache.h | git/git | 490 ms | 133 ms | 3.7× | slow | 3.7x, #2203 |
| grit log -S sha1_file -n 50 | git/git | 8.03 s | 4.97 s | 1.6× | ok | 1.6x |
| grit log -G '^static int cmd_' -n 30 -- builtin/commit.c | git/git | 280 ms | 100 ms | 2.8× | ok | 2.8x, just under threshold |
| grit fsck | rust-lang/cargo | 910 ms | 4.19 s | 0.2× | ok | detects flipped pack byte (badPackChecksum, corruptObject) like git |
| grit fsck --connectivity-only | rust-lang/cargo | 7.50 s | 540 ms | 14× | slow | 14x slower than git and 8x slower than grit's own full fsck; 'Checked 0 objects'. Not filed (rarely used flag) |
| grit fsck | git/git | 9.49 s | 26.72 s | 0.4× | ok | only the legacy missingTaggerEntry issue, same as git |
| grit fsck --connectivity-only | git/git | 133.90 s | 2.58 s | 52× | slow | 52x slower than git; unfiled (see above) |
| grit gc (4-month-old reflog entries) | rust-lang/cargo | 2.27 s | 1.07 s | 2.1× | ok | verified #2192 |
| grit reflog expire --all | rust-lang/cargo | 10 ms | — | — | ok | |
| grit add (all files touched) | rust-lang/cargo | 80 ms | 90 ms | 0.9× | ok | verified #2190, 0 loose objects |
| grit gc / grit repack (offline partial clone) | rust-lang/cargo | 890 ms | 530 ms | 1.7× | ok | verified #2065 |
| grit commit / switch / merge / stash / gc interleaved with git | scratch/adv | — | — | — | ok | fsck --strict clean; hooks ran; split index kept |
| grit merge (ff or real) with checked-out submodule ahead | scratch/adv | — | — | — | wrong | #2200 stale gitlink in index |
| grit merge with pre-merge-commit/commit-msg hooks | scratch/adv | — | — | — | wrong | #2201 |
| grit config user.email (hasconfig includeIf) | scratch/adv | — | — | — | wrong | #2199 |
| grit reset --hard / merge / rebase then ORIG_HEAD | scratch/adv | — | — | — | wrong | #2202 |
| grit worktree add/switch/reset (reftable) | scratch/adv | — | — | — | ok | verified #2062 |
| grit commit/switch/merge/reset in cone sparse index repo | scratch/adv | — | — | — | ok | |
| grit clone (case-colliding tree) | scratch/adv | 32 ms | — | — | ok | collision warning, same state as git |