Scan your Git repositories in seconds

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

~/projects
$ reposcan
Repo Scan Report
Generated at: 2025-08-31T08:44:54+03:00
Total repositories: 3 | Dirty: 2
Repo     Branch  UnCommited  Ahead  Path
──────────────────────────────────────────────────────
empty     main       0         0    /home/me/projects/empty
habitsss  master     1         1    /home/me/projects/habitsss
reposcan  main       1         3    /home/me/projects/reposcan
Details:
Repo: habitsss
Path: /home/me/projects/habitsss
- internal/db/models.go
- README.md
Repo: reposcan
Path: /home/me/projects/reposcan
- api/handlers.go

✨ Key Features

Quickly identify the state of all your Git repositories

Uncommitted Files

Find repositories with changes that haven't been committed yet.

Unpushed Commits

Identify repositories with commits that haven't been pushed to remote.

Unpulled Changes

Discover repositories with changes available on remote that haven't been pulled.

Configurable

Customize scanning with config files and CLI flags.

Multiple Outputs

Get results in human-readable tables or machine-friendly JSON.

Fast Scanning

Quickly scan your entire filesystem for Git repositories.

Practical Use Cases

RepoScan helps you maintain better control over your development workflow.

Daily Cleanup

See which projects have dirty working trees before switching tasks or ending your workday.

Context Switching

Know which repos still have unpushed commits before you switch to another project or leave for the day.

Housekeeping

Find old repositories you forgot to commit or push, keeping your projects organized.

Automation

Export JSON reports to integrate with dashboards or other automation tools.

Development Roadmap

What's coming next in RepoScan

Done Functionalities

  • Filesystem scanning
  • Uncommitted files detection
  • Unpushed/Unpulled commits detection
  • Multiple output formats
  • Concurrent Scanning

In Development

  • Interactive terminal output

Future Plans

  • Support multiple branches in single git-repo
  • Support git bare repos
  • Bulk push/pull on multiple repos

📦 Installation

Get started with RepoScan in just a few steps

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

Powerful scanning with simple commands

Basic Commands

Scan your home directory

$ reposcan --root $HOME

Multiple roots

$ reposcan --root ~/Code --root ~/work

Available Flags

Flag Description
--root PATH Add a directory to scan (repeatable)
--only TYPE Filter repos: all|dirty
--output TYPE stdout, options=table|json|none
--json-output-path PATH Output scan report in json format to desired location

⚙️ Configuration

Customize RepoScan to fit your workflow

Configuration File

By default, reposcan looks for a config file in:

~/.config/reposcan/config.toml

Example Configuration

version = 1

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

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

# options:
# 1. `dirty`: git repos with un-commited changes or unpushed changes
# 2. `all`: all git repos
only = "dirty"

# print scan result to stdout. Options:
# 1. `json`: json object containing scan report struct
# 2. `table`: human readable representation of scan report
# 3. `non`: prints nothing
Output = "table"

# output scan reports to this folder. All nested folders will be created
# if they don't exist
JsonOutputPath = '/home/me/Documents/code/projects/Go/reposcan/output-samples'

You can still override everything via CLI flags.

Config lookup order:
1. load default config values
2. check config in ~/.config/reposcan/config.toml
3. check cli flags and override those in step 1

Frequently Asked Questions

Common questions about RepoScan

How does RepoScan detect Git repositories?

Can I exclude certain directories from scanning?

What's the difference between the table and JSON output formats?

How can I contribute to RepoScan?

Ready to dive in? Start scanning your repositories today.