#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

MIT/Apache

18KB
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
/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/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

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

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

  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

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

~1–11MB
~106K SLoC