{"id":20858710,"url":"https://github.com/thesephist/superstat","last_synced_at":"2025-08-02T07:14:59.943Z","repository":{"id":50251940,"uuid":"518548786","full_name":"thesephist/superstat","owner":"thesephist","description":"Git status + diff across every repo in a directory","archived":false,"fork":false,"pushed_at":"2022-08-10T19:21:11.000Z","size":211,"stargazers_count":33,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2023-03-02T12:41:38.888Z","etag":null,"topics":["git","oaklang"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thesephist.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-27T17:16:26.000Z","updated_at":"2023-02-27T07:51:47.000Z","dependencies_parsed_at":"2022-08-26T08:41:04.834Z","dependency_job_id":null,"html_url":"https://github.com/thesephist/superstat","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thesephist%2Fsuperstat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thesephist%2Fsuperstat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thesephist%2Fsuperstat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thesephist%2Fsuperstat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thesephist","download_url":"https://codeload.github.com/thesephist/superstat/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225130753,"owners_count":17425506,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","oaklang"],"created_at":"2024-11-18T04:47:03.677Z","updated_at":"2024-11-18T04:47:04.229Z","avatar_url":"https://github.com/thesephist.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Git `superstat` 🎡\n\nI, like a lot of developers, put all my git repositories in a single folder on my computer. (For me, that's `$HOME/src`.) Sometimes my work leads me to making changes in a few different repositories on my machine during a single work session, and I often want to answer the question:\n\n\u003eWhat are all the projects I just made changes in, and what un-pushed changes are in each?\n\n**Superstat** is a tool I wrote to answer that question quickly and concisely. It runs **git status + diff across every git repository in a folder**, and presents a nice visual summary, like this:\n\n![Superstat output](docs/superstat.png)\n\nEach line has the format `repo | branch | date-when-I-last-worked-on-it`, followed potentially by a list of files with un-committed changes. The repo name is _yellow_ if it has non-committed changes, and the branch name is _red_ if it has commits that haven't been pushed upstream.\n\n## How to use `superstat`\n\nTyping `superstat --help` tells us the following:\n\n```\nSuperstat: git status + diff every repo in a workspace.\n\nUsage\n\tsuperstat [rootDir] [options]\n\nOptions\n\t--[h]elp      Show this help message\n\t--[v]ersion   Print version information and exit\n\t--no-[c]olor  Use letters instead of colors to indicate info\n\t--no-[f]iles  Do not list non-committed file changes\n\nLegend\n\t[repo-name] [branch] [last-worked-on-timestamp]\n\t            [non-committed-changes]\n\n\t- repo-name is yellow (or followed by \"*\") if there are non-committed\n\t  changes.\n\t- branch is red (or followed by \"!\") if there are unsynced changes (if\n\t  local is ahead of remote).\n\t- If no rootDir is provided, Superstat falls back to $SUPERSTAT_ROOT\n\t  if defined in the environment.\n```\n\nIf you keep all your git repositories in `~/workspace/`, for example, a basic usage looks like:\n\n```sh\nsuperstat ~/workspace\n```\n\nYou can also set the `SUPERSTAT_ROOT` environment variable to your git-repository folder to save yourself some typing every time you use Superstat:\n\n```sh\n# somewhere in your ~/.profile or ~/.bashrc\nexport SUPERSTAT_ROOT=~/workspace\n\n# later, in your shell\nsuperstat\n```\n\nHere are what the `--no-color` and `--no-files` options look like. When using `--no-color`, instead of using text color to indicate each repo's status, Superstat uses little characters `*` and `!`.\n\n![Superstat --no-color output](docs/superstat-c.png)\n\nThe `--no-files` option simply hides the lists of files with non-committed changes, for a more concise view that just shows which repos may need your attention.\n\n![Superstat --no-files output](docs/superstat-f.png)\n\n## Install\n\nIf you have [Oak](https://oaklang.org) installed, you can build from source (see below). Otherwise, I provide pre-built binaries for macOS (x86 and arm64) and Linux (x86) on the [releases page](https://github.com/thesephist/superstat/releases). Just drop those into your `$PATH` and you should be good to go.\n\nInstructions for Mac (other systems will differ):\n\n1. Download the pre-built binary on the releases page\n2. Rename the binary from the download name (e.g. `superstat-macos-arm64`) to just `superstat`\n3. Make it executable by running `chmod +x superstat` (add `sudo` to the beginning if it doesn't let you)\n4. Move the binary to somewhere in your `$PATH` like `/usr/local/bin/`\n5. Restart Terminal\n6. Run `superstat` to get the security prompt that it can't run because the developer is unverified. Check the Security \u0026 Privacy section in System Preferences where it should prompt you to allow `superstat` to run. If you run `superstat` again it should work!\n\n## Build and development\n\nSuperstat is built with my [Oak programming language](https://oaklang.org), and I manage build tasks with a Makefile.\n\n- `make` or `make build` builds a version of Superstat at `./superstat`\n- `make install` installs Superstat to `/usr/local/bin`, in case that's where you like to keep your bins\n- `make fmt` or `make f` formats all Oak source files tracked by Git\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthesephist%2Fsuperstat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthesephist%2Fsuperstat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthesephist%2Fsuperstat/lists"}