#git #cli

app git-grab

A small tool to clone git repositories to a standard location, organsised by domain name and path

4 releases (2 stable)

1.0.1 Jul 7, 2022
1.0.0 Jul 4, 2022
0.1.2 Jul 11, 2021
0.1.1 Jul 11, 2021

#94 in Development tools

MIT/Apache

16KB
295 lines

⤵️
Git Grab

A small tool to clone git repositories to a standard location, organised by domain name and path. It runs on BSD, Linux, macOS, Windows, and more.


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

$ exa --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/1.0.1/git-grab-1.0.1-x86_64-unknown-linux-musl.tar.gz | tar zxf -

Package Manager

git-grab is packaged in these package managers:

  • Arch Linux: git-grab

Usage

USAGE:
    git grab [OPTIONS] [URL]...

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/git-grab are also accepted.

OPTIONS:
    -h, --help
            Prints help information

        --home [default: ~/src]
            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

ENVIRONMENT
    GRAB_HOME
        See --home

Build from Source

Minimum Supported Rust Version: 1.51.0

git-grab is implemented in Rust. See the Rust website for instructions on installing the toolchain.

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

Licence

This project is dual licenced under either of:

at your option.

Dependencies

~2MB
~61K SLoC