.
C Releases\swithout\sa\scopy\sin\severy\sclone
D 2026-10-02T15:22:30.689
E 2026-10-02T15:22:30 24630a5cb00c5a3dace1139b777021164dbd6440
N text/x-markdown
U dmestas
W 1570
# Releases without a copy in every clone
Fossil keeps a project's downloads as unversioned files: no history, synced
with `fossil sync -u`, served from the repository. zit's own releases have
been published that way, to a stock Fossil server.
The plan was for zit to do what Fossil does: an unversioned table in every
repository, synced alongside the history. Halfway into the design it stopped
making sense. quarry, zit's forge, keeps a repository's unversioned files in
its own storage and answers Fossil's protocol for them itself. A copy in
every zit repository would be a second home for the same bytes, and a store
format change that older zit could not open, for nothing quarry needs.
So 0.3.36 has the client half and no store:
```
zit uv list URL [-l]
zit uv pull URL NAME... [-o DIR]
zit uv push URL FILE... [--as NAME]
zit uv rm URL NAME...
```
Files move between the server and plain files; nothing is written to the
repository. It speaks Fossil's protocol, so the server can be quarry or a
stock `fossil server`, and the smoke suite checks it against the latter: what
`zit uv push` sends is exactly what `fossil uv cat` serves.
One thing it does differently from Fossil. A Fossil server keeps whichever
copy of a file is newer, and when it keeps its own it says nothing. `zit uv`
refuses an older push with a message, and reads the catalog back after every
change to confirm the server took it.
The same release adds the `main-branch` setting. Fossil never syncs it, so a
mirror reports `trunk` until someone sets it, and now zit can say and set it.
Z a876a1598ff598a2dc57c2529a28fa06