Glossary
Opaque Git state
Definition
Opaque Git state is a repository's .git directory moved between machines as raw encrypted bytes, without any tool interpreting, wrapping, or rewriting Git. Branches, history, stashes, and the index all travel intact, so the repository behaves identically on the next machine while Git itself remains the only thing that reads or writes it.
A repository is more than its checked-out files. The .git directory holds the commit history, branches, tags, stashes, reflog, and index: the state that makes the working tree a repository rather than a folder. If a sync tool carries the files but drops or mangles .git, the project arrives broken, with the wrong branch, a corrupt index, or lost local commits.
Treating Git state as opaque means carrying .git verbatim, as encrypted bytes, without a tool trying to understand or rewrite it. Nothing reinterprets your commits, edits .gitignore, stages files, or manages remotes. The bytes move; Git stays the only thing that reads or writes them. The repository on the next machine is the same repository, not a reconstruction of it.
Why it matters
The moment a sync layer starts interpreting Git, it can disagree with Git, and a repo that opens on the wrong branch or with a broken index is a subtle, expensive failure. Keeping Git state opaque draws a clean line: your git, jj, and forge workflows run unchanged because nothing reaches into them.
In practice
You stash work and switch branches on your laptop, then open the project on another machine. With opaque Git state the stash, the branch, and the reflog are all present, and git stash pop works exactly as it would have on the laptop.
How Bowline relates
Bowline syncs .git as opaque Git state: encrypted bytes carried as workspace state, never interpreted as Git. It is a sync engine, not a Git wrapper: it does not run Git commands, edit .gitignore, stage, commit, or manage remotes. Source control stays entirely with your tools.
Related terms
Your ~/Code, on every machine and every agent.
Install bowline and your projects follow you. It just works.
curl -fsSL https://install.bowline.sh | shmacOS app · Linux CLI. Then run bowline login.