ggit
An interactive TUI to scan directories for git repositories and get a quick overview of their status.
Install
Homebrew
brew install denrou/ggit/ggit
pip / uv
uv tool install ggit
Usage
Launch the TUI scanning the current directory:
ggit
Scan a specific directory:
ggit ~/code
The TUI displays a table of all discovered repositories with their branch, status, origin, PR counts, and last commit date. Use the keyboard to navigate, sort, filter, and view details.
JSON mode (non-interactive)
Print a machine-readable report to stdout instead of launching the TUI — handy for scripts, cron jobs, or LLM agents:
ggit --json ~/code
ggit --json --dirty # only repos that need attention
ggit --json --no-prs # skip GitHub PR lookups (faster, offline)
The report includes, per repository:
- working-tree state (modified/staged/untracked counts,
git status --shortlines) - ahead/behind counts against the tracking branch
- stashes (index, date, message)
- local branches, flagged when merged into the default branch or when their upstream is gone
- remote branches already merged into the default branch
- worktrees (path, branch, dirty, prunable)
- origin, detected default branch, and open PR counts (via the
ghCLI)
--dirty keeps only repositories with something to clean up: a dirty working tree, stashes, merged or gone branches, or stale worktrees.
Configuration
ggit reads an optional config file from ~/.config/ggit/config.toml (or $XDG_CONFIG_HOME/ggit/config.toml):
# Directories scanned when no path argument is given (default: current directory)
paths = ["~/code"]
# Look up open PR counts via the gh CLI (default: true)
github_prs = true
With paths set, running ggit (or ggit --json) from anywhere scans your usual code directories. Command-line paths always take precedence, and --config FILE points at an alternative file.
Keybindings
| Key | Action |
|---|---|
| j / k | Move cursor down / up |
| Enter | Show detailed info for selected repo |
| Space | Toggle select current row |
| x | Toggle select all visible rows |
| f | Fetch selected repos (or cursor row) |
| p | Prune selected repos (or cursor row) |
| s | Cycle sort: Name → Branch → Last Commit |
| r | Toggle reverse sort |
| d | Filter: dirty repos only |
| c | Filter: clean repos only |
| a | Show all repos (clear filter) |
| q | Quit |
| Escape | Back (from detail screen) |
Status symbols
✓cleanMmodified+staged?untracked↑ahead of remote
Detail screen
Press Enter on any repo to see detailed info: branches, last fetch, and authors. Press Escape to go back.
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ggit-0.6.0.tar.gz.
File metadata
- Download URL: ggit-0.6.0.tar.gz
- Upload date:
- Size: 130.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c391cf4f2f4db766e54f66054f67148b6f90cc110d04595641a86d194c57fee0
|
|
| MD5 |
926c19a72a5424878ba7798795b4542a
|
|
| BLAKE2b-256 |
58b3a65dacf4862d779904cb6653b94ed2fab40cdcb37e98a342e64a30e189c9
|
Provenance
The following attestation bundles were made for ggit-0.6.0.tar.gz:
Publisher:
python-publish.yml on denrou/ggit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ggit-0.6.0.tar.gz -
Subject digest:
c391cf4f2f4db766e54f66054f67148b6f90cc110d04595641a86d194c57fee0 - Sigstore transparency entry: 2218572293
- Sigstore integration time:
-
Permalink:
denrou/ggit@50d5624790e5155228c2e42845d6a026cac8340c -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/denrou
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@50d5624790e5155228c2e42845d6a026cac8340c -
Trigger Event:
release
-
Statement type:
File details
Details for the file ggit-0.6.0-py3-none-any.whl.
File metadata
- Download URL: ggit-0.6.0-py3-none-any.whl
- Upload date:
- Size: 16.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec87c88f29c6499820c182bafd9109c359ea4d34c70da3a0c4866f664419a15f
|
|
| MD5 |
bddf25d9da723b33bb8764f2ae0a07e0
|
|
| BLAKE2b-256 |
cc4037035c74d921776c028fca933bb690651b3226d3fa6b60f5f103b030440e
|
Provenance
The following attestation bundles were made for ggit-0.6.0-py3-none-any.whl:
Publisher:
python-publish.yml on denrou/ggit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ggit-0.6.0-py3-none-any.whl -
Subject digest:
ec87c88f29c6499820c182bafd9109c359ea4d34c70da3a0c4866f664419a15f - Sigstore transparency entry: 2218572316
- Sigstore integration time:
-
Permalink:
denrou/ggit@50d5624790e5155228c2e42845d6a026cac8340c -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/denrou
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@50d5624790e5155228c2e42845d6a026cac8340c -
Trigger Event:
release
-
Statement type: