geet install <template-repo-url> MyAppThis command:
- Runs
git clone <template-repo-url> MyApp - Automatically runs
initin the cloned directory - Runs post-init hooks (if present)
git clone <template-repo-url> MyApp
cd MyApp
geet init- Moves the cloned template repo:
./.git→./.geet/dot-git - Initializes a fresh app repo at
./.git - Compiles include/exclude rules
- Runs post-init hook (if present)
- Leaves you with:
- normal app repo
- live template layer wired up
Idempotency: Re-running init is safe — it detects prior setup and:
- If the template layer already exists (
dot-git/present), it runsrefreshinstead - If the template directory exists but needs setup, it runs
refreshto ensure everything is up to date - This makes
initsafe to run multiple times without fear of breaking your setup
Nothing changes from normal Git:
git status
git commit
git pushYou work exactly as you always have.
The refresh (alias: checkout) command ensures your template repo is properly set up and switches to a specific ref:
# Refresh to current tracked ref (uses TEMPLATE_GIT_* environment variables)
geet refresh
# Switch to a specific branch
geet checkout main
geet checkout feature-branch
# Switch to a tag
geet checkout v1.2.3
# Switch to a specific commit
geet checkout abc123
# Switch to a remote branch
geet checkout origin/developWhat refresh/checkout does:
- Ensures template repo exists — if
dot-git/doesn't exist, clones the template repo - Ensures origin remote exists — adds SSH or HTTPS remote if missing
- Fetches from origin — pulls latest refs from the remote
- Safety checks — refuses to switch refs if template has uncommitted changes (like
git checkout) - Pre-switch cleanup — removes template-only tracked files that won't exist in new ref
- Updates HEAD/refs — switches to the target ref (branch-like or detached)
- Exports snapshot — extracts files from the new ref
- Applies mappings — copies files according to
.geetincludemappings - Syncs ignore blocks — updates managed sections in
.gitignoreand.git/info/exclude
Use cases:
- First-time setup after cloning an app repo that tracks a template
- Switching template branches or tags
- Ensuring template repo is up to date
- Recovering from a corrupted template setup
When you want template changes:
geet pull
# Or: geet git pull
# Then commit the changes with normal git:
git commit -am "Update template"What happens:
- Template repo pulls + merges updates into the working tree
- You commit the result with normal git
- No generators, no manual sync, no path changes
Templates can include a one-time setup script that runs after initialization.
Pass arguments during install:
geet install <repo> MyApp -- --app-name "My App" --bundle-id com.example.myappArguments after -- are passed to the post-init hook.
GEET_RUN_POST_INIT=0 geet install <repo> MyAppgeet tree # tracked files (default)
geet tree all # all whitelisted filesgeet tree contains app/index.tsxOutput tells you if the file is included and why/why not.
geet doctorChecks:
- app repo health
- layer initialization
- include/exclude compilation
dot-gitnot tracked- detects all layers
Run this whenever something feels "off".
Template changes aren't showing up:
geet status # Check template repo status
geet pull # Pull template updatesConfused about what's tracked:
geet tree contains <path> # Check specific file
geet tree tree # See all tracked files