{"id":13902970,"url":"https://github.com/grdl/git-get","last_synced_at":"2026-01-13T21:59:17.412Z","repository":{"id":50127317,"uuid":"268070213","full_name":"grdl/git-get","owner":"grdl","description":"A better way to clone, organize and manage multiple git repositories","archived":false,"fork":false,"pushed_at":"2025-08-24T08:01:34.000Z","size":332,"stargazers_count":85,"open_issues_count":7,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-08-24T09:00:37.488Z","etag":null,"topics":["cli","git","golang"],"latest_commit_sha":null,"homepage":"","language":"Go","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/grdl.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2020-05-30T11:55:54.000Z","updated_at":"2025-08-24T08:01:37.000Z","dependencies_parsed_at":"2024-06-20T04:24:28.969Z","dependency_job_id":"4b9be957-bea1-4b3c-8d9f-0c7bf3941cbf","html_url":"https://github.com/grdl/git-get","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/grdl/git-get","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grdl%2Fgit-get","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grdl%2Fgit-get/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grdl%2Fgit-get/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grdl%2Fgit-get/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grdl","download_url":"https://codeload.github.com/grdl/git-get/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grdl%2Fgit-get/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28400397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cli","git","golang"],"created_at":"2024-08-06T22:01:31.688Z","updated_at":"2026-01-13T21:59:17.382Z","avatar_url":"https://github.com/grdl.png","language":"Go","funding_links":[],"categories":["cli"],"sub_categories":[],"readme":"\n# git-get\n\n![build](https://github.com/grdl/git-get/workflows/build/badge.svg)\n[![Go Report Card](https://goreportcard.com/badge/github.com/grdl/git-get)](https://goreportcard.com/report/github.com/grdl/git-get)\n\n`git-get` is a better way to clone, organize and manage multiple git repositories. \n\n- [git-get](#git-get)\n  - [Description](#description)\n  - [Installation](#installation)\n    - [macOS](#macos)\n    - [Linux](#linux)\n    - [Windows](#windows)\n  - [Usage](#usage)\n    - [git get](#git-get-1)\n    - [git list](#git-list)\n    - [Dump file](#dump-file)\n  - [Configuration](#configuration)\n    - [Env variables](#env-variables)\n    - [.gitconfig file](#gitconfig-file)\n  - [Contributing](#contributing)\n  - [Acknowledgments](#acknowledgments)\n\n## Description\n\n`git-get` gives you two new git commands:\n- **`git get`** clones repositories into an automatically created directory tree based on repo's URL, owner and name (like golang's [`go get`](https://golang.org/cmd/go/)).\n- **`git list`** shows status of all your git repositories.\n\n![Example](./docs/example.svg)\n\n## Installation\n\nEach release contains two binaries: `git-get` and `git-list`. When put on PATH, git automatically recognizes them as custom commands and allows to run them as `git get` or `git list`.\n\n### macOS\n\nUse Homebrew:\n```\nbrew install grdl/tap/git-get\n```\n\n### Linux\n\nDownload and install `.deb` or `.rpm` file from the [latest release](https://github.com/grdl/git-get/releases/latest).\n\nOr install with [Linuxbrew](https://docs.brew.sh/Homebrew-on-Linux):\n```\nbrew install grdl/tap/git-get\n```\n\n### Windows\n\nGrab the `.zip` file from the [latest release](https://github.com/grdl/git-get/releases/latest) and put the binaries on your PATH.\n\n\n## Usage\n\n### git get\n```\ngit get \u003cREPO\u003e [flags]\n\nFlags:\n  -b, --branch              Branch (or tag) to checkout after cloning.\n  -d, --dump                Path to a dump file listing repos to clone. Ignored when \u003cREPO\u003e argument is used.\n  -h, --help                Print this help and exit.\n  -t, --host                Host to use when \u003cREPO\u003e doesn't have a specified host. (default \"github.com\")\n  -r, --root                Path to repos root where repositories are cloned. (default \"~/repositories\")\n  -c, --scheme              Scheme to use when \u003cREPO\u003e doesn't have a specified scheme. (default \"ssh\")\n  -s, --skip-host           Don't create a directory for host.\n  -v, --version             Print version and exit.\n```\n\nThe `\u003cREPO\u003e` argument can be any valid URL supported by git. It also accepts a short `USER/REPO` format. In that case `git-get` will automatically use the configured host (github.com by default).\n\nFor example, `git get grdl/git-get` will clone `https://github.com/grdl/git-get`.\n\n\n### git list\n```\nUsage:\n  git list [flags]\n\nFlags:\n  -f, --fetch               First fetch from remotes before listing repositories.\n  -h, --help                Print this help and exit.\n  -o, --out                 Output format. Allowed values: [dump, flat, tree]. (default \"tree\")\n  -r, --root                Path to repos root where repositories are cloned. (default \"~/repositories\")\n  -v, --version             Print version and exit.\n```\n\n`git list` provides different ways to view the list of the repositories and their statuses.\n\n- **tree** (default) - repos printed as a directory tree.\n\n![output_tree](./docs/out_tree.png)\n\n- **flat** - each repo (and each branch) on a new line with full path to the repo.\n\n![output_flat](./docs/out_flat.png)\n\n- **dump** - each repo URL with its current branch on a new line. To be consumed by `git get --dump` command.\n\n![output_dump](./docs/out_dump.png)\n\n### Dump file\n\n`git get` is dotfiles friendly. When run with `--dump` flag, it accepts a file with a list of repositories and clones all of them.\n\nDump file format is simply:\n- Each repo URL on a separate line.\n- Each URL can have a space-separated suffix with a branch or tag name to check out after cloning. Without that suffix, repository HEAD is cloned (usually it's `master`).\n\nExample dump file content:\n```\nhttps://github.com/grdl/git-get v1.0.0\ngit@github.com:grdl/another-repository.git\n```\n\nYou can generate a dump file with all your currently cloned repos by running:\n```\ngit list --out dump \u003e repos.dump\n``` \n\n## Configuration\n\nEach configuration flag listed in the [Usage](#Usage) section can be also specified using environment variables or your global `.gitconfig` file.\n\nThe order of precedence for configuration is as follows:\n- command line flag (have the highest precedence)\n- environment variable\n- .gitconfig entry\n- default value\n\n\n### Env variables\n\nUse the `GITGET_` prefix and the uppercase flag name to set the configuration using env variables. For example, to use a different repos root path run:\n```\nexport GITGET_ROOT=/path/to/my/repos\n```\n\n### .gitconfig file\n\nYou can define a `[gitget]` section inside your global `.gitconfig` file and set the configuration flags there. A recommended pattern is to set `root` and `host` variables there if you don't want to use the defaults. \n\nIf all of your repos come from the same host and you find creating directory for it redundant, you can use the `skip-host` flag to skip creating it.\n\nHere's an example of a working snippet from `.gitconfig` file:\n```\n[gitget]\n    root = /path/to/my/repos\n    host = gitlab.com\n    skip-host = true\n```\n\n\n## Contributing\n\nPull requests are welcome. The project is still very much work in progress. Here's some of the missing features planned to be fixed soon:\n- improvements to the `git list` output (feedback appreciated)\n- info about stashes and submodules\n- better recognition of different repo states: conflict, merging, rebasing, cherry picking etc.\n- plenty of bugfixes and missing tests\n\n\n## Acknowledgments\n\nInspired by:\n- golang's [`go get`](https://golang.org/cmd/go/) command\n- [x-motemen/ghq](https://github.com/x-motemen/ghq)\n- [fboender/multi-git-status](https://github.com/fboender/multi-git-status)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrdl%2Fgit-get","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrdl%2Fgit-get","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrdl%2Fgit-get/lists"}