6 repos · 30 commands · 5 broken · 0 slow · 4 filed
As a solo developer on macOS (APFS, case-insensitive) I re-checked all six fixed issues (five are fixed; #2236 stat/numstat is still off by one against grit's own patch and was reopened), then ran the daily loop, macOS filesystem cases, interrupts, a 100k-file tree, hooks/odd content and a small grit-lib program. Speed and memory are mostly at or better than git; I filed four new bugs (#2244, #2247, #2253, #2262), mostly state/integrity problems around commit, hooks, binary patches and case handling.
| repo | files | commits | .git | notes |
|---|---|---|---|---|
| rust-lang/cargo (git clone) | 3,078 | 23,591 | 81 MB | |
| rust-lang/cargo (grit clone) | 3,078 | 23,591 | 90 MB | fsck clean; same 218 refs |
| scratch/wide-100k | 100,000 | 3 | 16 MB | 400 dirs x 250 small files |
| scratch/big-600mb | 1 | 1 | 573 MB | one 600 MB random blob |
| scratch/bin | 2 | 2 | 9 MB | binary patch repro |
| octocat/Hello-World | 1 | 3 | 1 MB |
| command | repo | grit | git | grit/git | result | notes |
|---|---|---|---|---|---|---|
| grit status | rust-lang/cargo (git clone) | 21 ms | 40 ms | 0.5× | ok | |
| grit diff | rust-lang/cargo (git clone) | 8.1 ms | 7.5 ms | 1.1× | ok | |
| grit log -n 50 --oneline | rust-lang/cargo (git clone) | 4.0 ms | 5.2 ms | 0.8× | ok | |
| grit log --oneline -- src/util/workspace.rs | rust-lang/cargo (git clone) | 76 ms | 73 ms | 1.0× | ok | |
| grit blame src/util/workspace.rs | rust-lang/cargo (git clone) | 45 ms | 64 ms | 0.7× | ok | |
| grit log -S CargoResult -n 100000 --json | rust-lang/cargo (git clone) | 1.06 s | 1.93 s | 0.5× | ok | 1154 commits, same as git; -G, --grep -i, date range and --first-parent counts also identical |
| grit diff --stat A B (3000..2900 back) | rust-lang/cargo (git clone) | — | — | — | wrong | counts off by one on several files (#2236 not fixed) |
| grit reset --hard master (from master~3000) | rust-lang/cargo (git clone) | 308 ms | — | — | ok | SIGINT/TERM: clean cancel |
| grit restore --source master~3000 -- . | rust-lang/cargo (git clone) | 655 ms | — | — | ok | prints one 'Restored <path>' line per file (3000 lines) |
| grit stash / stash pop (2879 modified files) | rust-lang/cargo (git clone) | 866 ms | — | — | ok | pop 271 ms; SIGINT ignored until done |
| grit gc | rust-lang/cargo (git clone) | 230 ms | 1.08 s | 0.2× | ok | already-packed repo |
| grit clone https://github.com/rust-lang/cargo | rust-lang/cargo (grit clone) | 32.51 s | 107.97 s | 0.3× | ok | network bound; git run was earlier and slower, not a controlled comparison |
| grit status (first, after clone) | rust-lang/cargo (grit clone) | 22 ms | 39 ms | 0.6× | ok | |
| grit commit -m big (100000 new files) | scratch/wide-100k | 7.92 s | 28.01 s | 0.3× | ok | git add -A took 28 s (git commit extra 0.77 s) |
| grit status | scratch/wide-100k | 114 ms | 105 ms | 1.1× | ok | |
| grit diff --stat | scratch/wide-100k | 68 ms | 65 ms | 1.0× | ok | |
| grit add d010/f010.txt | scratch/wide-100k | 71 ms | 39 ms | 1.8× | ok | 1.8x; known #1682 family |
| grit commit -m x (1 modified file) | scratch/wide-100k | 260 ms | 110 ms | 2.4× | ok | 2.4x time, 2.0x memory; known #1884 |
| grit clone <local 100k-file repo> | scratch/wide-100k | 3.92 s | — | — | ok | |
| grit diff / diff --stat / show / log -p after editing 100 bytes of a 600 MB blob | scratch/big-600mb | 340 ms | 11.98 s | 0.0× | ok | #2237 fixed |
| grit diff --patch-text A B (modified binary) | scratch/bin | — | — | — | wrong | 'literal 0' binary patch, git apply fails (#2244) |
| grit add blob.bin (600 MB) | scratch/big-600mb | 9.81 s | 11.27 s | 0.9× | ok | |
| grit commit x6 + grit gc (100 MB asset, 1 KB edits) | scratch/big-600mb | 6.99 s | 4.13 s | 1.7× | ok | commits 7 s vs git 13 s; .git 96 MB vs 97 MB after gc |
| grit commit (auto-stage) after dir case rename | scratch/case | — | — | — | wrong | renames tracked paths (#2247) |
| grit commit with failing pre-commit hook | scratch/hk | — | — | — | wrong | index left auto-staged (#2253) |
| grit commit after resolving a pick conflict | scratch/pc | — | — | — | wrong | author lost, CHERRY_PICK_HEAD left (#2262) |
| grit push / pull / pull --ff-only / push --force-with-lease | scratch/solo | — | — | — | ok | local bare remote; exit codes 1 (rejected) and 128 (not ff); remote fsck clean |
| grit history reword/drop/undo/squash, rebase, pick | scratch/rb | — | — | — | ok | fsck clean, change-id preserved |
| grit blame --json vs git blame --porcelain (60 files) | rust-lang/cargo (git clone) | — | — | — | ok | 17 files with default and -w: 0 differences; -C -C differs from git on 66 of 115 files (heuristic, not filed) |
| commit_worktree with FlagCancel (library) | scratch/wide-100k | 352 ms | — | — | ok | cancel at 100 ms honoured at 352 ms; cancel at 20 ms at 77 ms; at 900 ms at 901 ms |