Skip to content

lipoyl/sip

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sip

A small command-line utility to download files, directories, or entire repositories from GitHub. Works with public and private repositories. Uses sparse checkout for efficient directory retrieval and discovers the default branch when none is specified. Accepts both OWNER/REPO style arguments and full GitHub URLs.

Requirements

  • git and curl in PATH
  • C++17 compiler (for building)
  • On Windows: MinGW-w64 with GCC (recommended) or MSVC with getopt compatibility

Build

Linux/macOS

g++ -std=c++17 -O3 -Wall -Wextra -o sip sip.cpp
./sip --version

Windows

# Using MinGW-w64 (recommended)
g++ -std=c++17 -O3 -Wall -Wextra -static-libgcc -static-libstdc++ -o sip.exe sip.cpp

# Or using the Makefile
make

Windows builds use static linking to avoid DLL dependency issues. The resulting executable is self-contained and doesn't require external runtime libraries. Note: Windows executables will be larger (~2MB) due to included standard libraries.

Install

Copy the sip (or sip.exe on Windows) binary somewhere on your PATH, e.g.:

Linux/macOS

install -m755 sip /usr/local/bin/

Windows

Copy sip.exe to a directory in your PATH, or use it directly from the build directory.

Synopsis

sip [OPTION]... OWNER/REPO [PATH]
sip [OPTION]... https://github.com/OWNER/REPO
sip [OPTION]... https://github.com/OWNER/REPO/tree/BRANCH/PATH
sip [OPTION]... https://github.com/OWNER/REPO/blob/BRANCH/PATH

If PATH is omitted, the repository is cloned. If PATH ends with “/”, the named directory is downloaded via sparse checkout. Otherwise PATH is treated as a single file to download.

Options

-o, --output-dir=DIR     write output to DIR
-b, --branch=REF         branch, tag, or commit SHA (auto-detected if omitted)
-t, --timeout=SECONDS    curl timeout (default: 10)
-q, --quiet              suppress output
-v, --verbose            verbose output
    --help              show help
    --version           show version

Environment

GITHUB_TOKEN             Personal access token for private repositories

Examples

Download a file from the default branch:

sip torvalds/linux CREDITS

Download a directory into ./arch:

sip torvalds/linux arch/ -o ./arch

Download from a tag:

sip torvalds/linux -b v6.0 CREDITS

Download using a specific commit:

sip owner/repo -b 0123abcd path/to/file.txt

Use full GitHub URLs:

sip https://github.com/torvalds/linux/
sip https://github.com/torvalds/linux/tree/master/arch/

Behavior

  • Files are fetched from raw.githubusercontent.com with redirects followed.
  • Directories are fetched by shallow, filtered clone + sparse checkout.
  • The default branch is discovered automatically when -b is not given.
  • Output paths must not already exist; choose a different destination.
  • For URL inputs, branch in the URL is honored unless it is a common default (master/main), in which case auto-detection is used.

Exit status

Returns 0 on success. Non-zero indicates failure; details are printed to stderr. Typical causes: 22 (curl HTTP error), 128 (git error).

License

MIT License.

About

Alternative to git clone for selective GitHub downloads

Resources

License

Stars

Watchers

Forks

Packages

No packages published