{"id":14069295,"url":"https://github.com/peap/git-global","last_synced_at":"2025-07-30T05:32:01.945Z","repository":{"id":13976134,"uuid":"75557847","full_name":"peap/git-global","owner":"peap","description":"Keep track of all your git repositories.","archived":false,"fork":false,"pushed_at":"2025-06-03T02:06:04.000Z","size":370,"stargazers_count":25,"open_issues_count":2,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-03T17:31:03.148Z","etag":null,"topics":["crate","developer-tools","git","git-addons","rust","subcommands"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/git-global","language":"Rust","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/peap.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-12-04T19:06:35.000Z","updated_at":"2025-06-03T02:05:02.000Z","dependencies_parsed_at":"2022-08-07T07:16:04.415Z","dependency_job_id":"62bdcb91-400d-4a04-a9fe-37e223692406","html_url":"https://github.com/peap/git-global","commit_stats":{"total_commits":102,"total_committers":5,"mean_commits":20.4,"dds":0.3137254901960784,"last_synced_commit":"d81d48407e8711ad40a8c6723821d3a9d8643430"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/peap/git-global","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peap%2Fgit-global","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peap%2Fgit-global/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peap%2Fgit-global/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peap%2Fgit-global/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peap","download_url":"https://codeload.github.com/peap/git-global/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peap%2Fgit-global/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267815187,"owners_count":24148356,"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","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["crate","developer-tools","git","git-addons","rust","subcommands"],"created_at":"2024-08-13T07:06:49.248Z","updated_at":"2025-07-30T05:32:01.935Z","avatar_url":"https://github.com/peap.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# git-global\n\n[![Crates.io](https://img.shields.io/crates/v/git-global.svg)](https://crates.io/crates/git-global)\n[![Crates.io](https://img.shields.io/crates/d/git-global.svg)](https://crates.io/crates/git-global)\n[![Build](https://github.com/peap/git-global/actions/workflows/rust.yml/badge.svg)](https://github.com/peap/git-global/actions)\n\nUse `git-global` to keep track of all the git repositories on your machine.\n\nThis is a Rust program that you can install with `cargo install git-global`.\n(To obtain `cargo` and Rust, see https://rustup.rs.) Once installed, you can\noptionally install the manpage with `git global install-manpage`\n\nOnce installed, you gain an extra git subcommand that you can run from anywhere\nto check up on all your git repos: `git global`.  Use `git global \u003csubcommand\u003e`\nto:\n\n* `git global ahead`: show repos where branches contain commits that are not\n  present on any of the remotes\n* `git global info`: show meta-information about git-global itself\n  (configuration, number of known repos, etc.)\n* `git global install-manpage`: (non-functional) attempt to install\n  git-global's manpage\n* `git global list`: show list of all known repos\n* `git global scan`: update the cache of known repos by searching your\n  filesystem\n* `git global staged`: show status of the git index for repos with such changes\n* `git global stashed`: show stashes for all repos that have them\n* `git global status`: show `git status -s` for all your repos with any changes\n* `git global unstaged`: show status of the working directory for repos with\n  such changes\n\n## Command-line flags\n\nIn addition to config-file-based options, there are a set of global\ncommand-line flags that take precedence:\n\n* `--json`: Print subcommand results in a JSON format.\n* `--untracked`: Show untracked files in subcommand results, e.g., for the\n  `status`, `staged`, and `unstaged` subcommands.\n* `--nountracked`: Don't show untracked files in subcommand results, e.g., for\n  the `status`, `staged`, and `unstaged` subcommands.\n\n## Configuration\n\nTo change the default behavior of `git-global`, you can do so with --- wait for\nit --- [git's global\nconfiguration](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration)!\n\nTo set the root directory for repo discovery to something other than your home\ndirectory:\n```\ngit config --global global.basedir /some/path\n```\n\nTo add patterns to exclude while walking directories:\n```\ngit config --global global.ignore .cargo,.vim,Library\n```\n\nThe full list of configuration options supported in the `global` section of\n`.gitconfig` is:\n\n* `basedir`: The root directory for repo discovery (default: `$HOME`)\n* `follow-symlinks`: Whether to follow symbolic links during repo discovery\n  (default: `true`)\n* `same-filesystem`: Whether to stay on the same filesystem as `basedir`\n  during repo discovery\n  ([on Unix or Windows only](https://docs.rs/walkdir/2.2.8/walkdir/struct.WalkDir.html#method.same_file_system))\n  (default: `true` on Windows or Unix, `false` otherwise)\n* `ignore`: Comma-separated list of patterns to exclude while walking\n  directories (default: none)\n* `default-cmd`: The default subcommand to run if unspecified, i.e., when\n  running `git global` (default: `status`)\n* `show-untracked`: Whether to include untracked files in output (default:\n  `true`)\n\n## Manpage generation\n\nAn up-to-date copy of the manpage lives in the repository at\n[doc/git-global.1](doc/git-global.1). To generate it from a local clone of the\nrepo, run:\n\n```\ncargo run --bin generate-manpage --features=manpage \u003e doc/git-global.1\n```\n\n## Ideas\n\nThe following are some ideas about future subcommands and features:\n\n* `git global dirty`: show all repos that have changes of any kind\n* `git global branched`: show all repos not on `master` (TODO: or a different\n  default branch in .gitconfig)\n* `git global duplicates`: show repos that are checked out to multiple places\n* `git global remotes`: show all remotes (TODO: why? maybe filter by hostname?)\n\n* `git global add \u003cpath\u003e`: add a git repo to the cache that would not be found in a scan\n* `git global ignore \u003cpath\u003e`: ignore a git repo and remove it from the cache\n* `git global ignored`: show which git repos are currently being ignored\n* `git global monitor`: launch a daemon to watch git dirs with inotify\n* `git global pull`: pull down changes from default tracking branch for clean repos\n\n* `git global cd \u003cfuzzy repo\u003e`: change to the directory of the matched repo (#6)\n\n* stream results to `STDOUT` as the come in (from `git global status`, for\n  example, so we don't have to wait until they're all collected)\n* use `locate .git` if the DB is populated, instead of walking the filesystem\n* make a `Subcommand` trait\n* do concurrency generically, not just for the `status` subcommand\n\n## Release Notes\n\n* 0.6.6 (2025-02-07)\n  * Fix an alignment issue with the `--verbose` flag's output.\n* 0.6.5 (2025-02-07)\n  * Add a `-v`/`--verbose` flag, so far just used to indicate progress during\n    `scan`'s directory walking. Useful for identifying patterns that should be\n    omitted from scans.\n* 0.6.4 (2025-01-01)\n  * Various dependency updates.\n* 0.6.3 (2024-08-10)\n  * Make the `ahead` subcommand work with corrupted references (#105). Thanks,\n    koalp!\n  * Various dependency updates.\n* 0.6.2 (2024-06-08)\n  * Various dependency updates, including `json` --\u003e `serde_json`.\n* 0.6.1 (2023-08-10)\n  * Various dependency updates.\n* 0.6.0 (2023-05-10)\n  * Update to Rust 2021 edition.\n  * Update, replace, or remove several dependencies.\n* 0.5.1 (2022-03-17)\n  * Add the `generate-manpage` binary and (non-functional) `install-manpage`\n    subcommand.\n* 0.5.0 (2021-07-12)\n  * Add the `ahead` subcommand - thanks, koalp!.\n* 0.4.1 (2021-06-03)\n  * Fix crashes when a cached repo has been deleted.\n* 0.4.0 (2021-04-19)\n  * Update to Rust 2018 edition (Thanks, koalp!).\n  * Replace the `dirs` and `app_dirs` crates with `directories`.\n    * Previously created cache files may be ignored after upgrading to this\n      version, so the cache might need to regenerated during the first command\n      run after upgrading to this version. However, we no longer panic if the\n      cache file can't be created.\n* 0.3.2 (2020-11-13)\n  * Update dependencies.\n* 0.3.1 (2020-04-25)\n  * Update dependencies.\n* 0.3.0 (2019-08-04)\n  * Add subcommands:\n    * `staged`\n    * `stashed`\n    * `unstaged`\n  * Add config options:\n    * `default-cmd`\n    * `show-untracked`\n    * `follow-symlinks`\n    * `same-filesystem`\n  * Add command-line flags:\n    * `--untracked`\n    * `--nountracked`\n  * Add options to follow symlinks and stay on the same filesystem while\n    scanning directories; both are `true` by default. (Thanks, pka!)\n* 0.2.0 (2019-03-18)\n  * Include untracked files in status output.\n  * Expand documentation and package metadata.\n  * Update and change several dependencies.\n  * Add some tests.\n  * Several public API changes, such as:\n    * Rename `GitGlobalConfig` to `Config`.\n    * Rename `GitGlobalResult` to `Report`.\n    * Move `get_repos` `find_repos`, and `cache_repos` functions to `Config`.\n    * Split the `core` module into `config`, `repo`, and `report`.\n  * Merge bug fix for scanning directories when nothing is configured to be\n    ignored ([#1](https://github.com/peap/git-global/pull/1)).\n* 0.1.0 (2017-01-31)\n  * Initial release with these subcommands: help, info, list, scan, status.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeap%2Fgit-global","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeap%2Fgit-global","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeap%2Fgit-global/lists"}