6 repos · 33 commands · 5 broken · 1 slow · 5 filed
Played a team developer on win-x64: mixed git/grit clones of a shared bare remote and of grit serve over HTTP, rebase/merge/pick with conflicts, force-with-lease, prune, tags, worktree review, Windows-specific filesystem cases (autocrlf, case collisions, locked/read-only files, unicode), plus cargo and git/git scale checks. All 6 fixed issues re-verified as fixed. Core collaboration flows interoperate cleanly with git (fsck clean, identical trees to git rebase -r --update-refs); I filed 5 new problems (stuck rebase abort, D/F ref errors, history drop attribution, rebase marker labels, slow rebase apply).
| repo | files | commits | .git | notes |
|---|---|---|---|---|
| git/git | 4,857 | 82,605 | 323 MB | cloned --no-checkout, then local clones via git --no-local and grit |
| rust-lang/cargo | 3,078 | 23,588 | 81 MB | |
| octocat/Hello-World | 1 | 1 | 0.1 MB | depth 1, setup only |
| scratch/team (alice/bob/carol clones, remote.git) | 6 | 12 | 0.1 MB | mixed git/grit clones, CRLF, rebase/force-with-lease |
| scratch/cc2 (6 concurrent pushers) | 3 | 100 | 0.2 MB | |
| scratch/misc (case collisions, unicode, md, ro, ab, hd, df*, cf) | 8 | 6 | 0.1 MB |
| command | repo | grit | git | grit/git | result | notes |
|---|---|---|---|---|---|---|
| grit clone (local path, full) | rust-lang/cargo | 1.84 s | 1.08 s | 1.7× | ok | git used hardlinked local clone |
| grit clone (local path vs git --no-local) | git/git | 6.96 s | 29.80 s | 0.2× | ok | grit 4x faster |
| grit clone over HTTP from grit serve | rust-lang/cargo | 4.50 s | 5.96 s | 0.8× | ok | git peak not measurable via wrapper; server peak WS 336 MB |
| grit push master over HTTP to grit serve | rust-lang/cargo | 10.11 s | — | — | ok | |
| grit clone --depth 5 | rust-lang/cargo | 1.55 s | 2.33 s | 0.7× | ok | |
| grit clone --blobs none | rust-lang/cargo | 11.27 s | 19.80 s | 0.6× | ok | same object counts as git --filter=blob:none (server ignores filter) |
| grit fetch (40 new commits, new branch) | rust-lang/cargo | 300 ms | 330 ms | 0.9× | ok | |
| grit fetch (no-op) | rust-lang/cargo | 20 ms | 305 ms | 0.1× | ok | |
| grit status (clean) | rust-lang/cargo | 179 ms | 155 ms | 1.2× | ok | |
| grit status (clean) | git/git | 97 ms | 36 ms | 2.7× | ok | 2.7x, under the 3x bar; see #1702 |
| grit revs HEAD~20..HEAD | git/git | 17 ms | 33 ms | 0.5× | ok | |
| grit revs --count A...B | git/git | 13 ms | 44 ms | 0.3× | ok | |
| grit log --oneline -- builtin/commit.c | git/git | 574 ms | 596 ms | 1.0× | ok | |
| grit blame builtin/commit.c | git/git | 667 ms | 591 ms | 1.1× | ok | |
| grit blame Makefile | git/git | 1.36 s | 1.07 s | 1.3× | ok | attribution of builtin/rebase.c identical to git (1938/1938 lines) |
| grit diff v2.40.0 v2.45.0 --stat | git/git | 329 ms | 379 ms | 0.9× | ok | |
| grit revs --count HEAD | git/git | 734 ms | 606 ms | 1.2× | ok | |
| grit switch --detach v2.30.0 / back to master | git/git | 1.44 s | 1.51 s | 1.0× | ok | back: 1596 vs 1650 |
| grit reset --hard across 1451 changed files | git/git | 510 ms | 790 ms | 0.6× | ok | |
| grit rebase master (60 commits, master +600) | git/git | 9.04 s | 3.17 s | 2.8× | slow | #2211; 1 commit: 6547 vs 1106 ms |
| grit rebase master --dry-run / --check | git/git | 885 ms | — | — | ok | planning is fast; apply phase is slow |
| grit rebase main-moving (9 commits, merge + dup, update-refs) | rust-lang/cargo | 501 ms | — | — | ok | tree identical to git rebase -r --update-refs |
| grit merge --no-ff (121-file conflict) / -X theirs | rust-lang/cargo | 457 ms | — | — | ok | |
| grit pick -x with conflict + --continue | rust-lang/cargo | — | — | — | ok | |
| grit fetch (D/F ref conflict, no prune) | scratch/df3 | — | — | — | error | #2198 raw 'corrupt ref store: I/O error: Access is denied' |
| grit branch rel (rel/1.0 exists) | scratch/dfy | — | — | — | error | #2198 |
| grit rebase --abort after exec_dirty + moved ref | scratch/ab2 | — | — | — | error | #2197 repo stuck |
| grit history drop topic~1 (sibling branch conflict) | scratch/hd | — | — | — | wrong | #2204 unattributed conflict |
| grit rebase (conflict markers) | scratch/ab | — | — | — | wrong | #2207 label is file path |
| grit push --atomic over HTTP with update hook | scratch/srv | — | — | — | ok | |
| grit push --force-with-lease (stale, then after fetch) | scratch/team | — | — | — | ok | |
| grit worktree add/remove/list with spaces in path | scratch/cc2 | — | — | — | ok | |
| grit switch with login.txt locked (FileShare.None) | scratch/team | — | — | — | ok | clear error, nothing partially applied |