Git Grab clones a repo into $GRAB_HOME, organised by domain and path. GRAB_HOME defaults to ~/src if not set or supplied via the --home argument. For example:
$ git grab github.com/wezm/git-grab Cloning into '/home/wmoore/src/github.com/wezm/git-grab'... remote: Enumerating objects: 30, done. remote: Counting objects: 100% (30/30), done. remote: Compressing objects: 100% (20/20), done. remote: Total 30 (delta 9), reused 27 (delta 7), pack-reused 0 Receiving objects: 100% (30/30), 12.50 KiB | 12.50 MiB/s, done. Resolving deltas: 100% (9/9), done. Grabbed https://github.com/wezm/git-grab to /home/wmoore/src/github.com/wezm/git-grab $ lsd --tree ~/src /home/wmoore/src └── github.com └── wezm └── git-grab ├── Cargo.lock ├── Cargo.toml └── src ├── args.rs ├── grab.rs └── main.rs Pre-compiled binaries are available for a number of platforms.
Example to download and extract a binary:
curl https://releases.wezm.net/git-grab/3.0.0/git-grab-3.0.0-x86_64-unknown-linux-musl.tar.gz | tar zxf - git-grab is packaged in these package managers:
- Arch Linux:
git-grab - Brew:
brew install git-grab - Chimera Linux:
git-grab
Once git-grab in installed you can use it via git grab. git automatically finds binaries named git-*, this also means that if you have a shell alias like alias g=git, g grab will also work.
USAGE: git grab [OPTIONS] [URL]... [--] [GIT OPTIONS] ARGS: <URL>... One or more git URLs to clone. Any URL accepted by `git` is valid. In addition, URLs without a scheme such as github.com/wezm/grab are also accepted. OPTIONS: -h, --help Prints help information -c, --clipboard Paste a URL to clone from the clipboard. --home [default: ~/src or $GRAB_HOME] The directory to use as "grab home", where the URLs will be cloned into. Overrides the GRAB_HOME environment variable if set. -n, --dry-run Don't clone the repository but print what would be done. -V, --version Prints version information GIT OPTIONS: Arguments after `--` will be passed to the git clone invocation. This can be used supply arguments like `--recurse-submodules`. ENVIRONMENT GRAB_HOME See --home -
Configure an alias in the GitHub CLI:
gh alias set --shell grab 'git grab "git@github.com:$1.git"' -
You can now grab a GitHub repo. For example:
gh grab wezm/git-grab
Minimum Supported Rust Version: 1.70.0
git-grab is implemented in Rust. See the Rust website for instructions on installing the toolchain.
Compile-time Options (Cargo Features)
git-grab supports the following compile-time options:
clipboard: enable support for cloning the URL on the clipboard- This feature is on by default
- On UNIX and UNIX-like systems such as BSD and Linux one of the following tools must be installed:
- wl-clipboard (Wayland)
- xclip or xsel (X11)
Build the binary with cargo build --release --locked. The binary will be in target/release/git-grab.
cargo install git-grab
This tool is inspired by grab by @jmhodges. A small comparison:
| Feature | Original | This Version |
|---|---|---|
| VCS Supported | Git, Mercurial, Subversion, and Bazaar | Git |
| Dependencies | None | git |
| Progress Information | No | Yes, provided by git |
git-grab incorporates clipboard code from clipp by bendn under the MIT licence.
This project is dual licenced under either of:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.