# zit 0.3.5
zit 0.3.5 makes a checkout mean the same thing to `fossil` and to `zit`. A
repository carries its policy in `.fossil-settings/` — what is ignored, what
is binary, which line endings and encodings are tolerated, whether dotfiles
show. Fossil honoured all of it; zit honoured part of it, with its own glob
parser and its own idea of what a binary file is. A developer running stock
`fossil` against a zit server could have a file accepted at commit and
refused at push. That is closed (zit#174).
No artifact, tag namespace, or sync message changed.
## One checkout, two tools (zit#174)
Every versionable setting Fossil 2.28 recognizes is now read at every tier
— versioned file, repository, global, and `--flag` — from either
`.fossil-settings/` or `.zit-settings/`:
- **Glob lists** follow Fossil's tokenizer: comma or whitespace separators,
single or double quotes, and a line is a comment only when its first byte
is `#`. `crnl-glob` is accepted as the alias of `crlf-glob`.
- **`clean-glob`** works as in Fossil: `zit clean` deletes matching
untracked files without `--force`, and `keep-glob` wins over it. A file
Fossil would delete is deleted; nothing is undoable on either side.
- **`empty-dirs`** are created on `open`, `update`, and `checkout`.
- **`encoding-glob`** exempts named files from the encoding check, and `*`
disables it.
- **`dotfiles`** is honoured, and so is `mimetypes`.
- **`manifest`** accepts Fossil's spellings (`on`, `1`, `true`, `yes`) as
well as the letter form.
- **`.fossil-settings/<name>.no-warn`** silences the tier warning, in
either directory.
Fossil's own checkout-state names — `.fslckout`, `_FOSSIL_`, `.fos`, their
`-journal`/`-wal`/`-shm` sidecars, and the `manifest` stamps — are control
names now: never listed as extras and never addable while stamps are on.
Content is classified the way Fossil's `lookslike.c` does it. A UTF-16 file
is a Unicode file, not a binary one, and an invalid-UTF-8 file that
`encoding-glob` permits is permitted — on the commit gate and on the push
gate alike, from one shared classifier. A file zit committed is a file a zit
server accepts.
The differential smoke now carries a checkout holding every
`.fossil-settings` name and requires both tools to read it identically:
the same extras with and without dotfiles, the same clean preview, the same
tree after update.
## Behaviour changes
- **Dotfiles are hidden by default**, as in Fossil. `add`, `addremove`,
`extras`, `clean`, and `status` skip them unless `--dotfiles` is given or
`dotfiles` is on; `.zitignore` itself is hidden the same way.
- **`clean` deletes `clean-glob` matches without `--force`.** Set
`keep-glob` for anything that must survive.
- A global-tier `ignore-glob` now reaches the sweep, and `.zitignore`
combines with the setting instead of shadowing it.
- A UTF-16 file is no longer reported as binary by commit or by a server's
push policy.
- `autosync` is no longer treated as versionable; a versioned value is
ignored with a note.
## Known gap
zit does not open a Fossil checkout in place: `.fslckout` is a SQLite
database zit will not read. `zit open` the repository into a fresh directory
instead. The remaining corners — glob class negation, a versioned-only
`manifest` at `open`, root-name case on Linux — are collected in zit#175.
## Compatibility
- Artifacts, tags, and the sync protocol are unchanged; Fossil RFC
revision 00 remains the target.
- No on-disk format changed (the image schema stays at version 6).
- Flags added: `--dotfiles` on `add`, `addremove`, `extras`, `clean`, and
`status`. Output changes only where the section above says so.
## Qualification
`zig build test`, `e2e`, `smoke` (Fossil interop against a real `fossil`,
now with the settings-parity scenario), `muscle` (41 differential steps),
`git-import-e2e`, `git-export-e2e`, and `dst`, plus the three-runner CI
battery (macOS ARM64, Linux x86-64, Linux ARM64). The glob tokenizer and the
content classifier were each verified by differential test against the
`fossil` binary.