Skip to content
zit zit 0.8.1
Login

zit 0.8.1

zit 0.8.1 makes pull request refs safe to fetch for a Git mirror. In 0.8.0, a source clone holding refs/pull/*/head exported every pull request's commits into the import (open, closed unmerged and fast-forwarded alike), mostly as stray forks of trunk. Now only the pull requests a squash merge took are imported. Each lands on a branch of its own, closed at the head the squash took, and every other pull request ref is ignored.

This release is from trunk. Stores and the wire are unchanged from 0.8.0.

Only the pull requests a squash took are imported

0.8.0 records a squash merge as a cherry-pick of the pull request head it took, which needs that head in the import. But import-git exported every ref in the source, so fetching refs/pull/*/head for that purpose also brought in every pull request a repository ever had. On a repository with hundreds of pull requests, each one became check-ins on trunk with nothing to join them.

The export now leaves refs/pull/ out, then names only the heads that a squash on the default branch pairs with. Those commits are imported on a branch named pull/N and closed at the head, the same way a branch that a merge commit names is closed once Git deleted it. An open pull request, one closed without merging, and one merged by fast-forward or merge commit are never imported from their ref. A pull request whose branch still exists is imported from that branch, as before, and keeps its branch's name. The squash's Q card points at the head either way.

Pull request refs are also left out of the refs an import records and reconciles with --into. They are read only to pair squashes.

A mirror can now fetch +refs/pull/*/head:refs/pull/*/head with this release.

Compatibility

Stores and the wire are unchanged from 0.8.0. A source without refs/pull/ refs imports exactly as 0.8.0 imports it. A store 0.8.0 wrote from a source with pull refs keeps every check-in it holds, because zit never rewrites one. A fresh import gives the history this release describes.

Qualification

The release manifest records native qualification against the exact tagged source archive on macOS ARM64, Linux x86-64 and Linux ARM64, using the pinned Zig 0.17.0 toolchain. Publication is gated on unit and end-to-end tests, Git differentials, deterministic simulation, seeded fuzzing, and Fossil interoperability checks on every distributed target.

For the basis of the conformance claim, see the 0.1.0 release notes.