7 releases (stable)
3.0.0 | May 29, 2024 |
---|---|
2.1.0 | Mar 25, 2024 |
2.0.0 | Dec 4, 2023 |
1.0.1 | Jul 7, 2022 |
0.1.2 | Jul 11, 2021 |
#53 in Development tools
27KB
600 lines
⤵️
Git Grab
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
Install
Pre-compiled Binary
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 -
Package Manager
git-grab
is packaged in these package managers:
- Arch Linux:
git-grab
- Brew:
brew install git-grab
- Chimera Linux:
git-grab
Usage
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
With GitHub CLI
-
Configure an alias in the GitHub CLI:
gh alias set --shell grab 'git grab "[email protected]:$1.git"'
-
You can now grab a GitHub repo. For example:
gh grab wezm/git-grab
Build from Source
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)
From Git Checkout or Release Tarball
Build the binary with cargo build --release --locked
. The binary will be in
target/release/git-grab
.
From crates.io
cargo install git-grab
Credits
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.
Licence
This project is dual licenced under either of:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
Dependencies
~2–10MB
~92K SLoC