Skip to content

reposcan -- A fast CLI tool to scan your system for Git repositories and report uncommitted files, unpushed commits, and unpulled changes.

License

Notifications You must be signed in to change notification settings

mabd-dev/reposcan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RepoScan

reposcan is a simple command-line tool written in Go that scans your filesystem for Git repositories and reports their status.
It helps you quickly find:

  • Repositories with uncommitted files
  • Repositories with unpushed commits (ahead of upstream)
  • Repositories with unpulled changes (behind upstream)

It outputs results in both human-friendly tables and machine-friendly JSON, so you can use it interactively or integrate with scripts and future UIs.

🖼 Demo

Screen.Recording.2025-11-06.at.12.34.12.PM.online-video-cutter.com.mp4

✨ Use cases

  • Daily cleanup: See which projects have dirty working trees before switching tasks.
  • Context switch: Know which repos still have unpushed commits before you leave for the day.
  • Housekeeping: Find old repos you forgot to commit/push.
  • Automation: Export JSON reports to integrate with dashboards or other tools.

📦 Installation

Go install (latest)

go install github.com/mabd-dev/reposcan@latest

Make sure $GOPATH/bin (or $HOME/go/bin) is in your $PATH.

From source

git clone https://github.com/mabd-dev/reposcan.git
cd reposcan
go build -o reposcan ./cmd/reposcan

🚀 Usage

Scan your home directory

reposcan -r $HOME

Multiple roots

reposcan -r ~/Code -r ~/work

Common flags

-d, --dirIgnore stringArray     # (default [$HOME])
-f, --filter string             # Repository filter: all|dirty|uncommitted|unpushed|unpulled (default "dirty")
-h, --help                      # help for reposcan
    --json-output-path string   # Write scan report JSON files to this directory (optional)
-w, --max-workers int           # Number of concurrent git checks (default 8)
-o, --output string             # Output format: json|table|interactive|none (default "table")
-r, --root stringArray          # Root directory to scan (repeatable). Defaults to $HOME if unset in config. (default [$HOME])
  , --debug                     # Enable/Disable debug mode

Help

reposcan --help

More details on flags and config mapping can be found in docs/cli-flags.md.

⚙️ Configuration

By default, reposcan looks for a config file in:

~/.config/reposcan/config.toml

Example

version = 1
debug = false

# directories to search for git repos inside
roots = ["~/Code", "~/work"]

only = "dirty"

# Skip these directories (glob patterns)
dirIgnore = [
  "/node_modules/",
  "/.cache/",
  "/.local/"
]


[output]
type = "interactive"
jsonPath = "/somewhere/nice"

You can still override everything via CLI flags.

check sample/config.toml for detailed configuration with examples

Config lookup order

  1. Load default values
  2. Config in ~/.config/reposcan/config.toml (if exists)
  3. Cli flags (if exists) Each step overrides the one before it

🛣 Roadmap

  • Scan filesystem for repos
  • Detect uncommitted files, unpushed commits and unpulled commits
  • Stdout Ouput in 3 formats: json, table, interactive, none
  • Read user customizable config.toml file
  • Export Report to json file
  • Support dirignore
  • Worker pool for speed
  • Support git worktrees
  • Perform git push/pull/fetch on repos
  • Show branches with their states on each repo

🤝 Contributing

PRs, bug reports, and feature requests are welcome.

About

reposcan -- A fast CLI tool to scan your system for Git repositories and report uncommitted files, unpushed commits, and unpulled changes.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages