6 repos · 31 commands · 1 broken · 7 slow · 5 filed
As a team developer on macOS I ran shared-remote flows (git + grit clones, rebase onto a moving main, force-with-lease, prune/tracking, hotfix cherry-pick to a release branch, tags, cross-tool abort/continue, concurrent pushers), plus cargo/git-scale rebases, blobless/shallow clones and APFS case/unicode edge cases. Everyday collaboration is correct and interoperates with git (identical trees and fsck-clean). Main does not compile on macOS (#2270), and I filed three perf bugs (#2271 rebase over renamed paths, #2273 diff content, #2275 blobless diff fetch batching) plus a data-corruption hazard on directory-case collisions (#2272). All six 're-check' fixes verified fixed.
| repo | files | commits | .git | notes |
|---|---|---|---|---|
| rust-lang/cargo | 2,756 | 20,015 | 86 MB | bare mirror used as team remote (23.6k commits on master); feature branches feat1..feat4 forked 3641 commits back; blobless/shallow clones over file:// |
| git/git | 4,857 | 82,628 | 324 MB | stacked-branch rebase with merge, 600-commit fetch, diff ranges, https shallow clone |
| octocat/Hello-World | 1 | 3 | 1 MB | https clone smoke test |
| scratch/team (alice, bob, carol + bare remote) | 30 | 30 | 1 MB | 3-person flow with tags, release branch, symlinks, exec bit, unicode names |
| scratch/case-collision remotes | 7 | 1 | 1 MB | tree with README.md/readme.md, Docs/docs, NFC name; branches Release and release in packed-refs |
| scratch/concurrency (6 pushers) | 91 | 91 | 1 MB | 3 grit + 3 git pushing 15 commits each to one branch |
| command | repo | grit | git | grit/git | result | notes |
|---|---|---|---|---|---|---|
| grit clone <local bare> (cargo) | rust-lang/cargo | 250 ms | 280 ms | 0.9× | ok | fsck clean |
| grit rebase origin/master (60 commits editing src/cargo/lib.rs, +3641) | rust-lang/cargo | 10.61 s | 1.45 s | 7.3× | slow | #2271; identical tree |
| grit rebase origin/master (60 commits editing Cargo.toml) | rust-lang/cargo | 10.72 s | 1.23 s | 8.7× | slow | #2271 |
| grit rebase origin/master (60 add-only commits) | rust-lang/cargo | 620 ms | 1.44 s | 0.4× | ok | #2263 fixed |
| grit rebase origin/master (60 edits to untouched file) | rust-lang/cargo | 630 ms | 1.34 s | 0.5× | ok | |
| grit clone --blobs none file:// | rust-lang/cargo | 1.89 s | 2.16 s | 0.9× | ok | same missing-blob count as git |
| grit diff --shortstat HEAD~200 HEAD (blobless) | rust-lang/cargo | 5.66 s | 360 ms | 16× | slow | #2275: 552 packs vs 1 |
| grit blame Cargo.toml (blobless) | rust-lang/cargo | 38.12 s | 27.36 s | 1.4× | ok | both slow from per-blob round trips |
| grit log -p -n 30 -- Cargo.toml (blobless) | rust-lang/cargo | 410 ms | 620 ms | 0.7× | ok | |
| grit switch --detach HEAD~1000 (blobless) | rust-lang/cargo | 600 ms | 550 ms | 1.1× | ok | |
| grit clone --depth 5 / push / fetch --deepen 20 / --unshallow | rust-lang/cargo | 200 ms | — | — | ok | unshallow 0.20 s; fsck clean; shallow push accepted by git fsck |
| grit rebase origin/master (1 commit, +600) | git/git | 990 ms | 720 ms | 1.4× | ok | #2211 fixed |
| grit rebase origin/master (3-branch stack with merge, --update-refs default) | git/git | 720 ms | 840 ms | 0.9× | ok | git rebase --rebase-merges --update-refs: identical trees for s1,s2,s3,side |
| grit rebase -X theirs origin/master (12 conflicting commits) | git/git | 910 ms | 960 ms | 0.9× | ok | identical tree |
| grit diff --shortstat origin/master~100 origin/master | git/git | 1.25 s | 92 ms | 14× | slow | #2273 |
| grit diff --shortstat v2.40.0 v2.45.0 | git/git | 1.01 s | 220 ms | 4.6× | memory | #2273: 4.6x slower, 2.6x RSS |
| grit diff origin/master..origin/seen (453 commits) | git/git | 360 ms | 70 ms | 5.1× | slow | #2273 |
| grit diff origin/master...origin/seen | git/git | 350 ms | 130 ms | 2.7× | ok | |
| grit log --oneline origin/master..origin/seen | git/git | 10 ms | 10 ms | 1.0× | ok | |
| grit blame Makefile | git/git | 1.07 s | 940 ms | 1.1× | ok | |
| grit log --oneline -n 30 -- Documentation/git-rebase.adoc | git/git | 300 ms | 730 ms | 0.4× | ok | faster than git; #1619 no longer reproduces on this path |
| grit status / log -n 200 / branch -a / tag / fetch (noop) / push --dry-run / merge-base | git/git | 10 ms | 10 ms | 1.0× | ok | all <=10 ms on a clean tree |
| grit fetch origin (600 new commits, file://) | git/git | 910 ms | 2.30 s | 0.4× | ok | |
| grit push (500-commit branch / 3-commit branch) | git/git | 200 ms | 250 ms | 0.8× | ok | 3-commit branch: grit <10 ms vs git 50 ms |
| grit clone --depth 1 https://github.com/git/git | git/git | 5.01 s | 5.06 s | 1.0× | memory | 2.5x git's RSS; not filed (report cap) |
| grit fetch --deepen 50 (https, depth-1 clone) | git/git | 27.40 s | 98.87 s | 0.3× | ok | 3.6x faster than git; same 8428 commits |
| grit clone https://github.com/octocat/Hello-World | octocat/Hello-World | 1.00 s | 680 ms | 1.5× | ok | |
| grit clone / commit on case-colliding tree | scratch/case-collision remotes | — | — | — | wrong | #2272 |
| grit pick/merge/rebase --continue/--abort across git | scratch/team (alice, bob, carol + bare remote) | — | — | — | ok | |
| grit push (3 grit + 3 git concurrent, 90 commits) | scratch/concurrency (6 pushers) | — | — | — | ok | |
| grit --json / --markdown on 23 commands | scratch/team (alice, bob, carol + bare remote) | — | — | — | ok | all outputs parse; usage errors are JSON too |