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)


