remove
Removes a clone once it holds nothing you would miss.
gitto remove <name> [--archive]Removes a clone once it holds nothing you would miss.
What it refuses
Uncommitted changes. Commits no remote has. Worktrees living outside the clone whose history its submodules hold, because removing it would leave each of them a directory of files with no repository.
$ gitto remove auth-fix
gitto: auth-fix hosts the history of worktrees that live outside it:
/Users/you/work/storefront-docs
removing it would leave each of them without a repository.Both counts read the submodules as well as the checkout. A commit made inside a
submodule and pushed nowhere is invisible to git status at the top level once
its pointer has been committed, and it is the copy no remote holds:
$ gitto remove auth-fix
gitto: auth-fix holds 1 commits no remote has, in it or in a submodule.
push them, or keep them with 'gitto remove auth-fix --archive'.Keeping what it holds
--archive removes the clone and leaves what it held in
<canonical>.gitto-archive/<name>-<timestamp>: one bundle for the checkout, one
for each submodule, and a manifest naming the branch and commit each bundle
carries.
$ gitto remove spike-oauth --archive
removed storefront-spike-oauth, and what it held is in
/Users/you/work/storefront.gitto-archive/spike-oauth-20260925-104233Work that was never committed is committed first, onto
refs/gitto-archive/uncommitted, so the bundle carries it too. Every bundle is
read back with git bundle verify before anything is deleted, and a bundle that
does not verify stops the removal with the clone still there.
Read one back with a fetch:
git init recovered && cd recovered
git fetch ../storefront.gitto-archive/spike-oauth-20260925-104233/superproject.bundle \
'refs/*:refs/*'The archive carries what git would carry. Ignored files are not in it, which is the same 9 GB of build output that made the clone cheap to begin with.
doctor
Reports what still points outside a clone after the copy: symbolic links into the canonical, virtual environments holding the old path, submodule history that did not come along, worktrees the clone hosts for someone else, and settings files in fixed places that name the clone by path.
shell-init
Emits a shell function and completions for bash and zsh. The function moves you into a clone as it is made and adds `gitto cd`: