Features

Managed Git — Cloning Repos and Worktrees

Last updated: 2026-09-17

Managed Git, part 1 of 2.

→ Part 2 of 2: Managed Git — Publishing and Reviewing Changes

RepoGo can put a GitHub repository onto any environment for you — your Android device, a paired Mac, a machine you run the RepoGo host on yourself, or a Cloud Sandbox — without you ever opening a terminal. We call these managed checkouts: RepoGo clones them, tracks them, lists them, and removes them on request.

You get to a managed checkout from the environment picker: choose an environment, tap Clone Repo, pick a GitHub account, a repository, and a branch, then choose Clone or New Worktree.

Clone vs. worktree#

Both give you a working copy of the repo. The difference is how many you can have and what branch they sit on.

CloneWorktree
What it isOne folder per repo and branchAn extra, isolated working copy of the same repo
BranchThe branch you pickedA new branch created off the branch you picked
Repeat useCloning the same repo + branch again reuses the existing folderEvery worktree you create is brand new
Disk costA full copy each timeShares history on Mac, server, and cloud hosts; Android currently stores a full isolated clone
Best forYour normal day-to-day copy of a projectRunning several agents on the same repo at once, without them stepping on each other

Pick Clone when you just want the project on the machine. Cloning acme/web on main gives you one folder; asking again later doesn't re-download it — RepoGo fetches and updates the folder you already have.

Pick New Worktree when something is already in progress and you want a second, independent copy. Say an agent is mid-task on main and you want to try a different approach: a worktree gives you a separate folder on its own fresh branch (main-a91c4f), so both can run at the same time with no conflicts. Mac, server, and cloud hosts share the Git history; Android currently downloads a full isolated copy.

Git will not let the same branch be checked out twice, which is why each worktree gets its own new branch instead of the one you picked. That's also what lets you create several worktrees from the same base branch.

Where the folders go#

RepoGo keeps managed checkouts in its own predictable place, separate from anything you cloned yourself. Mac, server, and cloud hosts use the three-tree layout below. Android keeps the same repos/<owner>/<repo>/<branch> and worktrees/<owner>/<repo>/<branch>-<id> shape inside app-private storage, without a shared bare/ tree.

Three separate trees:

TreeWhat's in itLayout
repos/Your clonesrepos/<owner>/<repo>/<branch>
worktrees/Your worktreesworktrees/<owner>/<repo>/<branch>-<id>
bare/Shared repo history that backs the worktrees — no files to edit, don't work in herebare/<owner>/<repo>.git

Keeping clones and worktrees in different trees is deliberate: a clone of acme/web@main and a worktree off main never collide, and either can be removed without disturbing the other.

On a paired Mac, or a machine you run the host on#

Everything lives under a plain, visible repogo folder in your home directory:

ruby
~/repogo/repos/acme/web/main            ← clone of acme/web on main
~/repogo/repos/acme/web/feature%2Flogin ← clone of the feature/login branch
~/repogo/worktrees/acme/web/main-a91c4f ← worktree, on its own new branch
~/repogo/bare/acme/web.git              ← shared history behind the worktrees

Two details worth knowing:

  • Branch names with slashes are escaped in the folder name. A branch named feature/login becomes the folder feature%2Flogin, so a branch never turns into nested directories. The branch inside the checkout is the real feature/login.
  • ~/repogo is not the same as ~/.repogo. The hidden ~/.repogo folder is RepoGo's own state — its settings and internal database. Your code is only ever in the visible ~/repogo.

If you run the host yourself, you can point these somewhere else with the REPOGO_REPOS_DIR, REPOGO_WORKTREES_DIR, and REPOGO_BARE_DIR environment variables before starting it.

On a Cloud Sandbox#

A Cloud Sandbox keeps clones on its persistent disk:

plain text
/vercel/sandbox/repos/acme/web/main

Same <owner>/<repo>/<branch> layout, same rules. Everything there is saved when the sandbox sleeps and restored when it wakes, so you clone once and it's still there days later.

The sandbox also has a /vercel/sandbox/internal folder — that's RepoGo's own host software, not yours. Leave it alone.

The temporary sandbox that spins up for a single task when you open a GitHub repo works differently: it's pinned to one repo at /vercel/sandbox/project for the life of that task, and isn't a managed checkout you clone into or remove.

On your phone#

Repositories stored on the phone itself aren't folders you browse outside RepoGo — they're kept inside the app's own storage. Android uses real JGit checkouts there, so clone, branch, diff, pull, commit, and push operate on the same workspace contract as every other host. An Android New Worktree is an independent clone on a fresh branch rather than a linked Git worktree, so it uses more storage. iPhone on-device repositories use RepoGo's internal workspace store instead of filesystem checkouts.

Repos you cloned yourself#

Managed checkouts are an option, not a requirement. On a Mac you can also use Pick Folder in the environment picker to open a repository that's already on your machine, wherever it lives. RepoGo works against it exactly the same way — it just doesn't manage its lifecycle, so it won't appear under Repos or Worktrees and can't be removed from the app.

Next steps#

  • Publishing a folder, reviewing changes, credentials, and removing checkouts: Part 2.
  • Working in the cloud? See Cloud Sandboxes.