Fabric
You're on the list! We'll be in touch when we launch.
Please enter a valid email address.
Something went wrong. Please try again.

Import & export

Fabric is a door, not a cage. You can bring an existing Git repository in with its history intact, and you can always take a clean Git repo back out.

Import a Git repo

fabric import ./my-project

This replaces your repo with the project’s full history: Fabric runs git fast-export for you and maps commits, trees, and blobs into native ops with a per-commit frontier. Each original Git SHA is preserved as an attribute, so history stays faithful (authors and dates included). The repo is also relabeled with the source folder’s name (importing ./my-project names the repo my-project).

import advances your trunk to the imported head and blocks until the mint finishes. To get the imported files onto disk afterward, clone trunk directly:

fabric clone --at trunk      # read-only snapshot of the imported tree

To start editing, fork a change off the new trunk and clone that:

fabric change create "tidy imports"
fabric clone

A bare fabric clone (no change create) materializes the most-recent change, which may be an existing change rather than your import. After an import, use fabric clone --at trunk or fork a change first.

To nest the imported project under a subfolder instead of replacing the repo:

fabric import ./my-project --into packages/legacy

No repo setup is needed beforehand. Fabric provisions your repository on first use. See fabric import --help for the full set of options.

Export back to Git

Exporting walks a frontier’s checkpoint spine back into a clean Git repository via a git fast-import stream. It’s the one-time off-ramp, deliberately lossy (op identity and live-collaboration conflicts are dropped), because the result is a plain Git repo, not a bridge back into Fabric.

Why this matters

Import + export means adopting Fabric is reversible. You can move an existing project in to try the live, append-only model, and if it isn’t for you, walk out with a normal Git repo. No data is held hostage.