70 lines
2.8 KiB
Markdown
70 lines
2.8 KiB
Markdown
---
|
|
summary: "Repository size findings, prevention checks, and the maintainer-only history cleanup runbook."
|
|
read_when:
|
|
- Adding large assets or release artifacts
|
|
- Investigating clone size
|
|
- Planning a Git history rewrite
|
|
---
|
|
|
|
# Repository size
|
|
|
|
The checked-out source tree is not the main cause of CodexBar's clone size. At commit `61ff9320`, tracked files total
|
|
22,292,801 bytes, while the packed Git object database is 103.91 MiB. `CHANGELOG.md` is 150,271 bytes in the current
|
|
tree and all of its historical blobs occupy about 0.55 MB compressed.
|
|
|
|
Most of the packed history comes from files that are no longer present on `main`:
|
|
|
|
| Historical path group | Approximate compressed bytes |
|
|
| --- | ---: |
|
|
| `screenshots/` | 39,023,716 |
|
|
| `Quotio/` | 23,141,837 |
|
|
| `CodexBar 2.app/` | 7,088,125 |
|
|
| `CodexBar-0.2.2.zip` | 2,296,323 |
|
|
|
|
The largest single blob is the retired `Quotio/Resources/Proxy/cli-proxy-api-plus` executable: 49,202,546 bytes
|
|
before compression and about 15.8 MB in the pack. Deleting these files in later commits stopped further growth but
|
|
did not remove their blobs from existing history.
|
|
|
|
## Prevention
|
|
|
|
`Scripts/check_repository_size.sh` runs under `make check`. It inspects the exact blobs in Git's index, not mutable
|
|
working-tree copies, and rejects:
|
|
|
|
- tracked files larger than 2 MiB;
|
|
- app bundles, dSYMs, Xcode results, IPAs, archives, deltas, disk images, and installer packages.
|
|
|
|
Publish release artifacts through GitHub Releases. Optimize required source images before committing them. If a
|
|
source asset genuinely must exceed the limit, discuss and review the limit change explicitly rather than bypassing
|
|
the check.
|
|
|
|
For a smaller local checkout when full history is unnecessary, use one of:
|
|
|
|
```bash
|
|
git clone --filter=blob:none https://github.com/steipete/CodexBar.git
|
|
git clone --depth=1 https://github.com/steipete/CodexBar.git
|
|
```
|
|
|
|
## One-time history cleanup
|
|
|
|
A normal pull request cannot reduce the size of already reachable Git objects. Maintainers can recover most of the
|
|
avoidable clone weight only with a coordinated history rewrite. Candidate paths that are absent from current
|
|
`main` are:
|
|
|
|
```text
|
|
screenshots/
|
|
Quotio/Resources/Proxy/cli-proxy-api-plus
|
|
CodexBar 2.app/
|
|
CodexBar_Dev.app/
|
|
CodexBar-0.2.2.zip
|
|
CodexBar6-2.delta
|
|
CodexBar6-4.delta
|
|
```
|
|
|
|
Use `git filter-repo` on a fresh mirror, validate all branches and tags, and force-push only during an announced
|
|
maintenance window. This changes commit and tag IDs and requires contributors to re-clone or carefully rebase, so
|
|
the rewrite must not be performed from a normal contributor branch.
|
|
|
|
An isolated mirror rehearsal using exactly the candidate paths above reduced the packed object database from
|
|
103.90 MiB to 41.99 MiB (59.6%) and passed `git fsck --full --no-dangling`. Treat this as a reproducible baseline,
|
|
not authorization to rewrite the canonical repository.
|