Riftri

Backing out

Riftri manages worktrees, so before adopting it, understand what happens when you stop using it. This page explains how to return to ordinary Git.

View .md / Copy .md

Your work is never trapped

A Riftri-managed worktree is an ordinary Git linked worktree. Git created it, Git tracks it, Git can remove it. Riftri only changed how the files were materialized — copy-on-write clones instead of a full copy.

On APFS, reflink, and ReFS backends, clones are independent files that happen to share unchanged blocks. Those blocks live as long as any file references them, so removing Riftri does not reach into your worktree.

Verified on macOS/APFS:

You do thisYour worktree
Stop running riftriUnaffected
riftri disableUnaffected
Delete the immutable basesAll content intact, git status clean
Delete .git/riftri entirelyCommit, branch, merge still work
git worktree remove with plain GitWorks without Riftri

Bases are read-only on purpose, so a stray rm -rf fails rather than quietly succeeding. Use gc to reclaim them properly.

OverlayFS differs. That backend is a live mount with the base as its lower layer, so the base must stay while the view exists. Remove those views with riftri worktree remove first.

Removing it cleanly

riftri worktree list            # find managed worktrees
riftri worktree remove ../task-1  # for each; refuses dirty views
riftri gc --apply --yes         # reclaim the bases
riftri disable                  # drop riftri.enabled from Git config
rm -rf "$(git rev-parse --git-common-dir)/riftri"

Once gc has reclaimed the bases, the state directory deletes without permission errors and the repository is left exactly as Git would have it.

Keeping the worktrees but dropping Riftri works too: run riftri disable and leave them in place. They keep working; new ones simply cost a full checkout again.

Deactivating interception

eval "$(riftri shell deactivate zsh)"   # this shell
riftri disable                           # this repository
riftri shell status                      # confirm

Riftri never edits shell startup files, so remove the hook line yourself if you added one.

What you give up

Journaled recovery, machine-readable failure receipts, pre-mutation compatibility checks, and per-worktree allocation reporting have no plain git worktree equivalent. Re-running riftri enable opts back in, and worktrees created afterwards are optimized again — but existing ones stay ordinary, since Riftri does not adopt them.


Edit on GitHub