Workspace git tree scanner
Project description
gstree
gstree scans a workspace directory for Git repositories and shows their status as a compact tree.
projects
├── aurora [main] ~2 ?1
├── bonsai [main] +3 ~1
├── cedar [main] clean
│ └── roots [main] ↓2
└── drift [feat/glow] ~1 ↑1
Features
- Tree view of all Git repos in a directory, including submodules
- Compact status tokens for staged, modified, untracked, ahead, and behind state
--dirtyflag to show only repositories with uncommitted changes- JSON output for downstream scripting
- Zero runtime dependencies beyond Python stdlib and
git - Built-in
--upgradeflow for publishedpipanduvinstalls plus source checkouts
Status Tokens
| Token | Meaning |
|---|---|
+N |
N staged changes |
~N |
N modified tracked files |
?N |
N untracked files |
↑N |
N commits ahead of upstream |
↓N |
N commits behind upstream |
clean |
Nothing to do |
Install
Published release (PyPI):
pip install gstree
Published release with uv tool install:
uv tool install gstree
Published release with uvx (no install):
uvx gstree ~/source
From source (current checkout / unreleased main):
git clone https://github.com/tmsjngx0/gstree.git ~/.local/share/gstree
uv tool install ~/.local/share/gstree
Usage
# Show all repos
gstree ~/source
# Show only repos with changes
gstree --dirty ~/source
# Fetch remotes before showing status
gstree --fetch ~/source
# JSON output for scripting
gstree --json ~/source
gstree -j ~/source
# Limit scan depth (default: 2)
gstree --depth 3 ~/source
# Check version
gstree --version
Upgrade
If gstree was installed with pip install gstree, upgrade in place:
gstree --upgrade
If gstree was installed with uv tool install gstree, the same command delegates to uv tool upgrade gstree:
gstree --upgrade
If you run gstree via uvx, request the latest published version explicitly:
uvx gstree@latest ~/source
For source installs from a cloned checkout, gstree --upgrade pulls the repo and reinstalls the tool:
gstree --upgrade
Override the repo path with GSTREE_REPO_PATH if you cloned elsewhere:
GSTREE_REPO_PATH=/custom/path/gstree gstree --upgrade
Release
Tagged releases publish to PyPI through GitHub Actions Trusted Publishing. Use the publish workflow's manual dispatch to test against TestPyPI before pushing a release tag.
Contributing
See CONTRIBUTING.md.
Project details
Release history Release notifications | RSS feed
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 gstree-0.1.4.tar.gz.
File metadata
- Download URL: gstree-0.1.4.tar.gz
- Upload date:
- Size: 14.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa1a60e9b3a5354988f13d4581a8ac6127ca8886348102cb75967e660742070f
|
|
| MD5 |
3272a94ceab3ee3490c19102447252e3
|
|
| BLAKE2b-256 |
903f8d579d495d19ab13b9118f05b664995260f5289fe1abf163f02886cb784d
|
Provenance
The following attestation bundles were made for gstree-0.1.4.tar.gz:
Publisher:
publish-to-pypi.yml on tmsjngx0/gstree
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gstree-0.1.4.tar.gz -
Subject digest:
aa1a60e9b3a5354988f13d4581a8ac6127ca8886348102cb75967e660742070f - Sigstore transparency entry: 1856254436
- Sigstore integration time:
-
Permalink:
tmsjngx0/gstree@5a96cd055c5c0a75fef6aa29426bed045f56926d -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/tmsjngx0
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@5a96cd055c5c0a75fef6aa29426bed045f56926d -
Trigger Event:
push
-
Statement type:
File details
Details for the file gstree-0.1.4-py3-none-any.whl.
File metadata
- Download URL: gstree-0.1.4-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdaa5898a90101076b008352b3a320d725845d5e20f1b658972d905c083a9079
|
|
| MD5 |
5f15e309b5aa158dd863cc2e8a04b094
|
|
| BLAKE2b-256 |
c6d38051091586348b79bb056fcc08c8f35d9fd1fffa767be17ba8f7e4b50dd8
|
Provenance
The following attestation bundles were made for gstree-0.1.4-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on tmsjngx0/gstree
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gstree-0.1.4-py3-none-any.whl -
Subject digest:
bdaa5898a90101076b008352b3a320d725845d5e20f1b658972d905c083a9079 - Sigstore transparency entry: 1856254496
- Sigstore integration time:
-
Permalink:
tmsjngx0/gstree@5a96cd055c5c0a75fef6aa29426bed045f56926d -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/tmsjngx0
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@5a96cd055c5c0a75fef6aa29426bed045f56926d -
Trigger Event:
push
-
Statement type: