gh-repo-clone-all
v2.0.9
Published
Addition to GitHub CLI that clones all public and private repositories. It uses GitHub CLI and its authentication system and passes the filter options through to gh repo list.
Downloads
27
Maintainers
Readme
gh-repo-clone-all
Addition to GitHub CLI that clones all public and private repositories. It uses GitHub CLI and its authentication system and passes the filter options through to gh repo list.
Install
# npm
$ npm install -g gh-repo-clone-all
# Yarn
$ yarn global add gh-repo-clone-all
Usage
First of all, you need to have GitHub CLI installed. You can find out by running gh version
. Also make sure that you are logged in so that gh-repo-clone-all
can fetch the repository list. You can find out by running gh auth status
.
Now we can run the command like this:
Usage: gh-repo-clone-all [directory] [options] [gh repo list options]
You can pass the supported options through from gh repo list. The options below are additional.
Options:
-b, --branch <branch> The branch to checkout
-h, --help display help for command
See the gh repo list docs for details about the filtering options.
Cloning
The simplest case is to just clone into the current directory (which has to be empty):
$ gh-repo-clone-all
Cloning into /Users/foobar/repos …
Successfully cloned john-doe/repo1.
Successfully cloned john-doe/repo2.
Successfully cloned john-doe/repo3.
Successfully cloned john-doe/repo4.
Done!
Usually you will want to provide a directory name, which is then created:
$ gh-repo-clone-all my-repos
gh repo list
has a default limit of 30, which is rather low. So let's put it up to clone more repositories:
$ gh-repo-clone-all my-repos --limit 100
You can actually just put a very high limit to clone everything:
$ gh-repo-clone-all my-repos --limit 9999
Checking Out a Branch
Instead of the default branch, you can checkout a specific branch like this:
$ gh-repo-clone-all my-repos --branch renovate/lock-file-maintenance
Note that if a branch cannot be checked out by a repository, the repository will not be cloned.
Filtering
You can use the filtering options from gh repo list to filter the repositories you would like to clone:
# Clone only archived repositories
$ gh-repo-clone-all --archived
# Clone only forks
$ gh-repo-clone-all --fork
# Clone only repositories of a language
$ gh-repo-clone-all --language lang
# Clone up to a limit
$ gh-repo-clone-all --limit x
# Do not clone archived repositories
$ gh-repo-clone-all --no-archived
# Clone only private repositories
$ gh-repo-clone-all --source
# Clone only public repositories
$ gh-repo-clone-all --public
# Clone only non-forks
$ gh-repo-clone-all --source
The Git Protocol
gh-repo-clone-all
uses the protocol defined in GitHub CLI to clone repositories. You can find out which via gh config get git_protocol
, and you can set it via gh config set git_protocol [ssh,https]
.
Contribute
Are you missing something or want to contribute? Feel free to file an issue or a pull request! ⚙️
Support
Hey, I am Sebastian Landwehr, a freelance web developer, and I love developing web apps and open source packages. If you want to support me so that I can keep packages up to date and build more helpful tools, you can donate here:
Thanks a lot for your support! ❤️