Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/agilecreativity/github-cloner
Clone/list multiple Github repositories for a given user/organization including private repos easily.
https://github.com/agilecreativity/github-cloner
Last synced: 3 months ago
JSON representation
Clone/list multiple Github repositories for a given user/organization including private repos easily.
- Host: GitHub
- URL: https://github.com/agilecreativity/github-cloner
- Owner: agilecreativity
- License: mit
- Archived: true
- Created: 2016-04-06T05:55:11.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2021-05-08T14:41:44.000Z (over 3 years ago)
- Last Synced: 2024-04-24T19:02:21.500Z (7 months ago)
- Language: Ruby
- Size: 18.6 KB
- Stars: 4
- Watchers: 4
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
## GithubCloner
Export/clone Github repository (public/private) by user or organization name
[![Gem Version](https://badge.fury.io/rb/github-cloner.svg)][gem]
[![Dependency Status](https://gemnasium.com/agilecreativity/github-cloner.png)][gemnasium][gem]: http://badge.fury.io/rb/github-cloner
[gemnasium]: https://gemnasium.com/agilecreativity/github-cloner### Start with Why
- Be able to get grab all of interesting codes from a given user quickly
- Be able to clone specific language for a given user/organization
- Be able to clone all of organization/users in one go if desired
- Be able to clone private/public repositories for a given user/organization
- Be able to learn quickly or look at how something works from the source code
- I am too lazy to do this manually or through some other shell script### Installation
```sh
# Install the gem
gem install github-cloner# refresh your gem just in case
rbenv rehash# Get list of options just type the name of the gem
github-cloner
```You should see something like
```
Usage: github-cloner [options]Specific options:
-b, --base-dir BASE_DIR where BASE_DIR is the directory where the repositories will be cloned to (mandatory)
If not specified, current directory will be used
-u, --user USER The Github USER that will be cloned from (mandatory)
-o, --org [ORG] The Github's organization name to be used if specified (optional)
where ORG is the organization that the user belongs to
-t, --oauth-token [OAUTH_TOKEN] The Github's oauth_token for authentication (optional - only required to list/clone private repositories)
where OAUTH_TOKEN is from the user's Github setting
-l, --language [LANG] Clone only project of type LANG (optional)
where LANG is main language as shown on Github
-a, --[no-]all-repos All repository only (optional)
default to original/non-forked repositories only
-c, --[no-]clone Clone the repositories to the path specified (optional)
default to --no-clone e.g. dry-run onlyCommon options:
-h, --help Show this message
```- List repositories by user or organization id
```sh
# List all original/non-forked repositories by `awesome_user`
$github-cloner --user awesome_user## List all original/non-forked repositories of a user `awesome_user` that belongs to `AwesomeCo`
$github-cloner --user awesome_user --org AwesomeCo## List all origina/non-forked repositories by user `awesome_user` including private repository
# Note: for this to work you will need to have the proper access with the right token
$github-cloner --user awesome_user --oauth-token GITHUB_TOKEN_FOR_THIS_USER## List all repositories by user `awesome_user` include forked repositories
$github-cloner --user awesome_user --oauth-token GITHUB_TOKEN_FOR_THIS_USER
```- List and clone repositories by user or organization id using `--clone` option
```sh
## Clone all original (non-fork) public `JavaScript` repositores for user `awesome_user` to `~/Desktop/github`
# Note: --base-dir is optional, if not specified then the current directory will be used
# --languages must be quoted if the value include any spaces e.g. "Emacs Lisp" for this to to work properly
$github-cloner --user awesome_user \
--base-dir ~/Desktop/github \
--languages "JavaScript" \
--clone## Clone all public/private repositories for `awesome_user` which are member of `AwesomeCo` organization to `~/Desktop/github`
# Note: the option `--all` to include all forked repositories
$github-cloner --user awesome_user \
--org AwesomeCo \
--all-repos \
--base-dir ~/Desktop/github \
--oauth-token GITHUB_TOKEN_FOR_AWESOME_USER \
--clone## Clone specific type of projects (e.g. `Java` and `Emacs Lisp` in this case) public/private repositories for `awesome_user`
## which are member of `AwesomeCo` organization to `~/Desktop/github`
$github-cloner --user awesome_user \
--org AwesomeCo \
--all-repos \
--languages "Java,Emacs Lisp" \
--base-dir ~/Desktop/github \
--oauth-token GITHUB_TOKEN_FOR_AWESOME_USER \
--clone
```### Example Sessions
- List repositories by a given user (dry-run)
```
$github-cloner -b ~/Desktop/projects -u littlebee -l Ruby
------------------------------------------
List of languages by littlebee
Makefile
CoffeeScript
Ruby
JavaScript
Arduino
------------------------------------------
------------------------------------------
List of all repositories by littlebee
1/15: littlebee/Makefile/arduino-mk
2/15: littlebee/CoffeeScript/bumble-build
3/15: littlebee/CoffeeScript/bumble-docs
4/15: littlebee/CoffeeScript/bumble-strings
5/15: littlebee/CoffeeScript/bumble-test
6/15: littlebee/CoffeeScript/bumble-util
7/15: littlebee/CoffeeScript/git-log-utils
8/15: littlebee/CoffeeScript/git-status-utils
9/15: littlebee/CoffeeScript/git-time-machine
10/15: littlebee/CoffeeScript/notjs
11/15: littlebee/CoffeeScript/publish
12/15: littlebee/CoffeeScript/react-focus-trap-amd
13/15: littlebee/Ruby/got
14/15: littlebee/JavaScript/selectable-collection
15/15: littlebee/Arduino/solar-sunflower
------------------------------------------
FYI: dry-run only, no action taken!!
Process 1 of 1 : git clone [email protected]:littlebee/got.git /Users/bchoomnuan/Desktop/projects/Ruby/littlebee/got
```- List and clone repositories for a given user (e.g. `--clone` option used)
```
$github-cloner -b ~/Desktop/projects -u littlebee -l Ruby -c
------------------------------------------
List of languages by littlebee
Makefile
CoffeeScript
Ruby
JavaScript
Arduino
------------------------------------------
------------------------------------------
List of all repositories by littlebee
1/15: littlebee/Makefile/arduino-mk
2/15: littlebee/CoffeeScript/bumble-build
3/15: littlebee/CoffeeScript/bumble-docs
4/15: littlebee/CoffeeScript/bumble-strings
5/15: littlebee/CoffeeScript/bumble-test
6/15: littlebee/CoffeeScript/bumble-util
7/15: littlebee/CoffeeScript/git-log-utils
8/15: littlebee/CoffeeScript/git-status-utils
9/15: littlebee/CoffeeScript/git-time-machine
10/15: littlebee/CoffeeScript/notjs
11/15: littlebee/CoffeeScript/publish
12/15: littlebee/CoffeeScript/react-focus-trap-amd
13/15: littlebee/Ruby/got
14/15: littlebee/JavaScript/selectable-collection
15/15: littlebee/Arduino/solar-sunflower
------------------------------------------
Process 1 of 1 : git clone [email protected]:littlebee/got.git /Users/bchoomnuan/Desktop/projects/Ruby/littlebee/got
```### TODO
- [ ] Replace system call with the ruby library like [grit](https://github.com/mojombo/grit) or something similar
- [ ] Allow the `https` when performing the clone### Related Projects
- [github_cloner](https://github.com/nashby/github_cloner) by Vasiliy Ermolovich
### Contributing
1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request[Thor]: https://github.com/erikhuda/thor
[Minitest]: https://github.com/seattlerb/minitest
[RSpec]: https://github.com/rspec
[Guard]: https://github.com/guard/guard
[Yard]: https://github.com/lsegal/yard
[Pry]: https://github.com/pry/pry
[Rubocop]: https://github.com/bbatsov/rubocop