LinuxCommandLibrary

gitremote-helpers

Access Git repositories using helper programs

SYNOPSIS

<git-remote-<helper>> <url> [fetch|push]

PARAMETERS

option verbosity {0|1|2}
    Set output verbosity: 0=silent, 1=progress, 2=verbose

option version {1|2}
    Protocol version; 2 adds features like progress

option objectformat {<hash-algo>}
    Repository object hash (e.g., sha256)

option quotepath {true|false}
    Quote paths containing special chars

option progress {true|false}
    Enable progress messages

option ipv4|ipv6
    Prefer IPv4 or IPv6 for connections

option trace {true|false}
    Enable protocol tracing

option dry-run {true|false}
    Simulate operations without changes

DESCRIPTION

Git remote helpers are external programs that extend Git's ability to interact with remote repositories using non-native protocols or storage systems.

They are invoked automatically by Git when a URL matches the helper's scheme, e.g., git-remote-foo for foo:// URLs. Git calls the helper with the URL and direction (fetch or push) on the command line, then communicates via a simple text-based protocol over stdin/stdout.

The protocol starts with the helper listing its capabilities (e.g., fetch, push, connect). Git then sends options and commands like list for refs, fetch <ref> <oid>, or push updates. Helpers must handle errors gracefully and support atomic pushes where possible.

This design keeps Git core lean while enabling support for HTTP, FTP, bzr, hg, AWS S3, and custom backends. Examples include git-remote-https, git-remote-bzr. Developers write helpers in any language, parsing input line-by-line. Extensible via option capability for parameters like verbosity or object format.

CAVEATS

Helpers are not invoked directly; Git discovers them as executables named git-remote-<name> in PATH. Must be robust to malformed input. Not all capabilities required for basic fetch/push.

CAPABILITIES

Core: fetch, push, list, option. Advanced: connect <service> for smart protocols (upload-pack/receive-pack), reflog, see-ref.

INVOCATION

Git runs git remote-get <name> to find helper path, then execs with args. Configure via remote.<name>.helper.

HISTORY

Introduced in Git 1.6.6 (2008) for extensibility; protocol version 1 basic, version 2 (Git 2.0+) adds progress/atomic-push. Evolved with hash support in Git 2.28+.

SEE ALSO

git-remote(1), git-fetch(1), git-push(1), git(1)

Copied to clipboard