#git-repository #git #git-clone #domain-name #location #path #automatic

app git-grab

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

6 releases (stable)

2.1.0 Mar 25, 2024
2.0.0 Dec 4, 2023
1.0.1 Jul 7, 2022
0.1.2 Jul 11, 2021

#44 in Development tools

Download history 2/week @ 2024-02-20 7/week @ 2024-02-27 2/week @ 2024-03-12 127/week @ 2024-03-19 45/week @ 2024-03-26 71/week @ 2024-04-02

245 downloads per month


310 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

$ lsd --tree ~/src
└── github.com
   └── wezm
      └── git-grab
         ├── Cargo.lock
         ├── Cargo.toml
         └── src
            ├── args.rs
            ├── grab.rs
            └── main.rs


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/2.1.0/git-grab-2.1.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


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.

    git grab [OPTIONS] [URL]... [--] [GIT OPTIONS]

        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.

    -h, --help
            Prints help information

        --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

    -n, --dry-run
            Don't clone the repository but print what would be done.

    -V, --version
            Prints version information

    Arguments after `--` will be passed to the git clone invocation.
    This can be used supply arguments like `--recurse-submodules`.

        See --home

With GitHub CLI

  1. Configure an alias in the GitHub CLI:

    gh alias set --shell grab 'git grab "git@github.com:$1.git"'
  2. 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.

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


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


This project is dual licenced under either of:

at your option.


~106K SLoC