# gitskan
A CLI tool for scanning directories and displaying Git repository status information. `gitskan` is a fork of [gits-statuses](https://github.com/nicolgit/gits-statuses) which provides a comprehensive overview of all your Git repositories in a clean, tabular format.
Notes:
- This fork was catalyzed by this [GitHub issue](https://github.com/nicolgit/gits-statuses/issues/1)
- This is meant to implement the exact functionality but in a single CLI executable
- Renamed to `gitskan` as to not conflict with `gits-statuses` and to further simplify CLI command
- Executable name in CLI: `gsk`
## Features
This scans your directories and displays:
**Standard View:**
- Repository name
- Current branch
- Commits ahead of remote
- Commits behind remote
- Changed files count
- Untracked files count
- Only shows repositories with changes (clean repos are hidden)
**Detailed View:**
- All columns from standard view
- Total commits count
- Status summary (e.g., "↑1 ~2 ?3" for 1 ahead, 2 changed, 3 untracked)
- Remote URL
- Shows ALL repositories (including clean ones)
**Enhanced Summary:**
- Total repositories found
- Repositories with changes
- Repositories ahead of remote
- Repositories behind remote
- Repositories with untracked files
## Installation
### Prerequisites
- [uv](https://docs.astral.sh/uv/)
### Install with uv (Recommended)
Note: This is only being temporarily published as an OS CLI tool to PyPi to showcase how it can be distributed and used. The hope is to merge this fork!
```bash
# Install uv if you haven't already
pip install uv # or brew install uv on mac
# Install gitskan
uv tool install gitskan
# Verify installation
gsk --version
```
## Usage
### Basic Commands
```bash
# Basic usage - scan current directory
gsk
# Detailed view with remote URLs and total commits
gsk --detailed
# Scan a specific directory
gsk --path /path/to/projects
# Show help
gsk --help
```
### Examples
**Standard view (shows only repositories with changes):**
```
Repository | Branch | Ahead | Behind | Changed | Untracked
-------------------------------------------------------------
gits-statuses | main | 1 | | 1 | 1
my-project | dev | 2 | | 3 | 2
web-app | main | | 2 | 1 |
Summary:
Total repositories: 5
Repositories with changes: 3
Repositories ahead of remote: 2
Repositories behind remote: 1
Repositories with untracked files: 2
```
**Detailed view (shows all repositories):**
```
Repository | Branch | Ahead | Behind | Changed | Untracked | Total Commits | Status | Remote URL
---------------------------------------------------------------------------------------------------------------
api-service | main | | | | | 45 | Clean | https://github.com/user/api-service
gits-statuses | main | 1 | | 1 | 1 | 9 | ↑1 ~1 ?1 | https://github.com/nicolgit/gits-statuses
my-project | dev | 2 | | 3 | 2 | 67 | ↑2 ~3 ?2 | https://github.com/user/my-project
utils-lib | main | | | | | 23 | Clean | https://github.com/user/utils-lib
web-app | main | | 2 | 1 | | 102 | ↓2 ~1 | https://github.com/user/web-app
Summary:
Total repositories: 5
Repositories with changes: 3
Repositories ahead of remote: 2
Repositories behind remote: 1
Repositories with untracked files: 2
```
## Status Symbols
- **↑n**: n commits ahead of remote
- **↓n**: n commits behind remote
- **~n**: n changed files (modified/added/deleted)
- **?n**: n untracked files
- **Clean**: Repository has no pending changes
Examples:
- `↑2 ~1 ?3` = 2 commits ahead, 1 changed file, 3 untracked files
- `↓1 ~2` = 1 commit behind, 2 changed files
- `Clean` = No changes, fully synchronized
Raw data
{
"_id": null,
"home_page": null,
"name": "gitskan",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "git, repository, status, cli, scanner",
"author": "Nicola Delfino, Jairus Martinez",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/91/51/0208b357f0249974a4692fdefa44b894d26fb63364dc46d82eaa815152a6/gitskan-0.0.5.tar.gz",
"platform": null,
"description": "# gitskan\n\nA CLI tool for scanning directories and displaying Git repository status information. `gitskan` is a fork of [gits-statuses](https://github.com/nicolgit/gits-statuses) which provides a comprehensive overview of all your Git repositories in a clean, tabular format.\n\nNotes:\n- This fork was catalyzed by this [GitHub issue](https://github.com/nicolgit/gits-statuses/issues/1)\n- This is meant to implement the exact functionality but in a single CLI executable\n- Renamed to `gitskan` as to not conflict with `gits-statuses` and to further simplify CLI command\n - Executable name in CLI: `gsk`\n\n## Features\n\nThis scans your directories and displays:\n\n**Standard View:**\n- Repository name\n- Current branch\n- Commits ahead of remote\n- Commits behind remote \n- Changed files count\n- Untracked files count\n- Only shows repositories with changes (clean repos are hidden)\n\n**Detailed View:**\n- All columns from standard view\n- Total commits count\n- Status summary (e.g., \"\u21911 ~2 ?3\" for 1 ahead, 2 changed, 3 untracked)\n- Remote URL\n- Shows ALL repositories (including clean ones)\n\n**Enhanced Summary:**\n- Total repositories found\n- Repositories with changes\n- Repositories ahead of remote\n- Repositories behind remote\n- Repositories with untracked files\n\n## Installation\n\n### Prerequisites\n- [uv](https://docs.astral.sh/uv/)\n\n### Install with uv (Recommended)\nNote: This is only being temporarily published as an OS CLI tool to PyPi to showcase how it can be distributed and used. The hope is to merge this fork!\n\n```bash\n# Install uv if you haven't already\npip install uv # or brew install uv on mac\n\n# Install gitskan\nuv tool install gitskan\n\n# Verify installation\ngsk --version\n```\n\n## Usage\n\n### Basic Commands\n\n```bash\n# Basic usage - scan current directory\ngsk\n\n# Detailed view with remote URLs and total commits\ngsk --detailed\n\n# Scan a specific directory\ngsk --path /path/to/projects\n\n# Show help\ngsk --help\n```\n\n### Examples\n\n**Standard view (shows only repositories with changes):**\n```\nRepository | Branch | Ahead | Behind | Changed | Untracked\n-------------------------------------------------------------\ngits-statuses | main | 1 | | 1 | 1 \nmy-project | dev | 2 | | 3 | 2 \nweb-app | main | | 2 | 1 | \n\nSummary:\n Total repositories: 5\n Repositories with changes: 3\n Repositories ahead of remote: 2\n Repositories behind remote: 1\n Repositories with untracked files: 2\n```\n\n**Detailed view (shows all repositories):**\n```\nRepository | Branch | Ahead | Behind | Changed | Untracked | Total Commits | Status | Remote URL \n---------------------------------------------------------------------------------------------------------------\napi-service | main | | | | | 45 | Clean | https://github.com/user/api-service\ngits-statuses | main | 1 | | 1 | 1 | 9 | \u21911 ~1 ?1 | https://github.com/nicolgit/gits-statuses\nmy-project | dev | 2 | | 3 | 2 | 67 | \u21912 ~3 ?2 | https://github.com/user/my-project\nutils-lib | main | | | | | 23 | Clean | https://github.com/user/utils-lib\nweb-app | main | | 2 | 1 | | 102 | \u21932 ~1 | https://github.com/user/web-app\n\nSummary:\n Total repositories: 5\n Repositories with changes: 3\n Repositories ahead of remote: 2\n Repositories behind remote: 1\n Repositories with untracked files: 2\n```\n\n## Status Symbols \n\n- **\u2191n**: n commits ahead of remote\n- **\u2193n**: n commits behind remote \n- **~n**: n changed files (modified/added/deleted)\n- **?n**: n untracked files\n- **Clean**: Repository has no pending changes\n\nExamples:\n- `\u21912 ~1 ?3` = 2 commits ahead, 1 changed file, 3 untracked files\n- `\u21931 ~2` = 1 commit behind, 2 changed files\n- `Clean` = No changes, fully synchronized\n",
"bugtrack_url": null,
"license": null,
"summary": "A CLI tool to scan directories for Git repositories and display their status information.",
"version": "0.0.5",
"project_urls": null,
"split_keywords": [
"git",
" repository",
" status",
" cli",
" scanner"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "99879f04f9b785c7c3396e8753db305666e5ee85231b51e6100527b281c69bfb",
"md5": "d53d7a05698c59c8ca277ca6f9f01755",
"sha256": "587c418a2a7c1740c3aadcd4c81f713fc529489d81f0a7d700bf44c84318d515"
},
"downloads": -1,
"filename": "gitskan-0.0.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d53d7a05698c59c8ca277ca6f9f01755",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 10875,
"upload_time": "2025-07-09T18:47:37",
"upload_time_iso_8601": "2025-07-09T18:47:37.882021Z",
"url": "https://files.pythonhosted.org/packages/99/87/9f04f9b785c7c3396e8753db305666e5ee85231b51e6100527b281c69bfb/gitskan-0.0.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "91510208b357f0249974a4692fdefa44b894d26fb63364dc46d82eaa815152a6",
"md5": "84e7d6b2f9f6ca8fc67d6c5695a2e087",
"sha256": "6f9eff2cd3caa3b94d957ef5297b62d72d6d5bdb2b29b2fe309c89d9675fbc95"
},
"downloads": -1,
"filename": "gitskan-0.0.5.tar.gz",
"has_sig": false,
"md5_digest": "84e7d6b2f9f6ca8fc67d6c5695a2e087",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 10484,
"upload_time": "2025-07-09T18:47:38",
"upload_time_iso_8601": "2025-07-09T18:47:38.965446Z",
"url": "https://files.pythonhosted.org/packages/91/51/0208b357f0249974a4692fdefa44b894d26fb63364dc46d82eaa815152a6/gitskan-0.0.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-09 18:47:38",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "gitskan"
}