Multi-Repo Changesets
Large automotive and AOSP projects are spread across many Git repositories. A single logical change, say a new API plus its client and its tests, often needs to land in several repos at once. Doing that with separate, manually coordinated merge requests is error-prone: one merges, another fails, and your main branches are left inconsistent.
Null Autos solves this with atomic cross-repository changesets, driven by the
nullctl multirepo tool.
The idea
A changeset groups related changes across repos and merges them as a unit. If any repository's merge fails, already-merged changes are rolled back in reverse order, so your repositories never end up half-updated.
Workspace model
multirepo works inside a manifest-based workspace, a layout where a single
manifest lists all the repositories that make up the project. This lets you check
out, sync, and operate on the whole project as one.
Typical workflow
# Initialize and sync the workspace from a manifest
nullctl multirepo init -u <manifest-repo-url>
nullctl multirepo sync
# Start a changeset across the repos you will touch
nullctl multirepo start add-new-api api frontend cli
# ...edit and commit in each affected repo...
# Push branches and open merge requests everywhere at once
nullctl multirepo upload add-new-api --title "feat: add new api"
# Check aggregate readiness (pipelines, approvals, conflicts)
nullctl multirepo status add-new-api
# Merge atomically (rolls back on failure)
nullctl multirepo merge add-new-api
To walk away from a changeset, nullctl multirepo abandon <name> closes its
merge requests and deletes its branches.
How readiness is judged
Before merging, multirepo aggregates the state of every merge request in the
changeset (pipeline status, required approvals, merge conflicts, and code-owner
review) and reports whether the whole set is ready. The platform's control plane
exposes this readiness so it can also be evaluated in CI.
Where it runs
- On your machine or in a workspace as a CLI for day-to-day cross-repo work.
- In CI, where it can reconstruct changeset state purely from merge-request metadata to gate and perform atomic merges.
nullctl multirepo is developer and platform tooling for teams working across
many repositories. It complements, and is distinct from, the device and emulator
workflows covered elsewhere in these docs.