Install¶
git-city is a small Python CLI managed with uv. It is in early/pre-release, so there is no PyPI package yet — you install it from source. This page covers the prerequisites, installing the git-city tool, how it becomes a git subcommand, the developer workflow, and how to verify your install.
Prerequisites¶
| Requirement | Version | Why |
|---|---|---|
| Python | >= 3.12 |
Runtime for git-city |
| Git | any recent version | git-city drives Git under the hood |
| uv | recent | Builds, installs, and runs the tool |
git-city's runtime dependencies (the cyclopts CLI framework and InquirerPy for interactive pickers) are installed for you — you do not need to manage them by hand.
Note
git-city has no forge integration yet. It works fully against a plain Git remote, or with no remote at all. See forge-agnostic and the roadmap for what is and is not built.
Install from source¶
Clone the repository, then install it as a uv tool from the project directory:
uv tool install . builds git-city and installs the git-city executable onto your PATH in an isolated environment, so it is available from any repository on your machine.
Tip
If git-city is not found after install, make sure uv's tool directory is on your PATH. Run uv tool update-shell and restart your shell.
git city is a Git subcommand¶
The executable is named git-city. Git automatically treats any executable named git-<something> on your PATH as a subcommand, so once installed you can call it either way:
The two are equivalent. This documentation uses the git city <cmd> form throughout because it reads naturally alongside the rest of your Git workflow.
Developer usage (uv run)¶
If you are working on git-city itself, you do not need to install it globally. Run it straight from a checkout with uv, which resolves the project's environment on the fly:
Both forms run the in-tree code, so your edits take effect immediately without reinstalling.
Verify it works¶
Check that the tool is installed and callable:
Then, from inside any Git repository, run the read-only dashboard:
(Bare git city, with no command, prints the grouped command menu — handy for discovering what is available.)
In a repository with a feature branch, you will see something like this:
git-city · my-project
trunk: main
remote: origin
on ● add-login (feature, parent: main)
working tree: clean
vs main: ↑2 ↓0
vs origin/add-login: ↑0 ↓0
stack:
main (trunk)
└─ ● add-login ↑2 ↓0
The dashboard is completely read-only — it never touches your branches — so it is a safe first command to confirm everything is wired up.
Note
On a fresh repository, run git city init first to record your trunk branch. It auto-detects main/master, or lets you pick on a TTY.
Next steps¶
You are installed and ready to go.