Keep using GitHub while you evaluate
The bidirectional bridge, its namespaces, and what it refuses to do.
Written By Dustin
Last updated 27 minutes ago
You do not have to choose on day one. The bridge keeps a TOVIO repository in step with a GitHub, GitLab, Gitea, or bare Git remote.
tovio git bridge <remote> --bidirectional--bidirectional is required. There is no one-way bridge mode: without the flag the command refuses and tells you so. The flag is an explicit consent gate, not a mode switch, because the bridge writes to your Git remote.
The namespaces are the whole design
Git and TOVIO stay independent authorities, so neither side's branch names are ever overwritten by the other. The bridge exchanges through two reserved namespaces:
Nothing is force-pushed and neither native namespace is touched. You merge between the namespaces with your ordinary review and land workflow, which means every crossing is a decision someone made rather than something the tool did overnight.
Re-running is idempotent: content addressing deduplicates the imports, and the deterministic export is a fast-forward on the Git side.
Keeping it running
tovio git bridge <remote> --bidirectional --watchtovio git bridge <remote> --bidirectional --watch 300--watch repeats the cycle on an interval in the foreground — 60 seconds if you give no value. It is not a daemon: Ctrl-C stops it, and only lanes that actually advanced are republished each cycle. A failed cycle is reported and the watcher keeps going, so you can reconcile without restarting it.
A realistic evaluation setup
- Import your Git history into a fresh TOVIO repository.
- Bridge to the existing Git remote, bidirectionally.
- Work in TOVIO. Colleagues who have not switched keep using Git against the same host.
- CI keeps running against the Git host, unchanged.
This lets one person evaluate without asking the team to move.
What it refuses
- A partial clone. The bridge must translate complete history and content, so it refuses to run in a promisor-backed repository — one cloned with
--blobless,--blob-limit,--depthor--no-attachments. Runtovio fetch --completefirst. (A--sparseclone is a path scope rather than a promisor, so it is not caught by that check; bridge from a complete clone anyway, or the Git side sees only your scope.) - A non-fast-forward publish. If the remote
refs/heads/tovio/*advanced since the last cycle, publishing is refused withTVO-MIG-006rather than forced. Both sides' work is safe; reconcile it through review and land. - Anything it cannot do over the installed
git. Transport and credentials are delegated to your Git client on purpose, so HTTPS and SSH credential helpers work exactly as they already do. A transport, credential, timeout or translation failure isTVO-MIG-004.
What to watch
- Protected paths. Content covered by a read policy crosses to Git as ciphertext, never decrypted. That is correct, and surprising if you did not expect it.
- Change identity. It does survive: change ids and agent provenance ride as commit-message trailers, and an import reads them back. What does not survive is anything a trailer cannot hold.