git-remote-ext - Man Page

Bridge smart transport to external command​.

Synopsis

git remote add <nick> "ext::<command>[ <arguments>​...]"

Description

This remote helper uses the specified <command> to connect to a remote Git server​.

Data written to stdin of the specified <command> is assumed to be sent to a git:// server, git-upload-pack, git-receive-pack or git-upload-archive (depending on situation), and data read from stdout of <command> is assumed to be received from the same service​.

Command and arguments are separated by an unescaped space​.

The following sequences have a special meaning:

'% '

Literal space in command or argument​.

%%

Literal percent sign​.

%s

Replaced with name (receive-pack, upload-pack, or upload-archive) of the service Git wants to invoke​.

%S

Replaced with long name (git-receive-pack, git-upload-pack, or git-upload-archive) of the service Git wants to invoke​.

%G (must be the first characters in an argument)

This argument will not be passed to <command>​. Instead, it will cause the helper to start by sending git:// service requests to the remote side with the service field set to an appropriate value and the repository field set to the rest of the argument​. Default is not to send such a request​.

This is useful if the remote side is git:// server accessed over some tunnel​.

%V (must be first characters in argument)

This argument will not be passed to <command>​. Instead it sets the vhost field in the git:// service request (to the rest of the argument)​. Default is not to send vhost in such request (if sent)​.

Environment Variables

GIT_TRANSLOOP_DEBUG

If set, prints debugging information about various reads/writes​.

Environment Variables Passed to Command

GIT_EXT_SERVICE

Set to long name (git-upload-pack, etc​...) of service helper needs to invoke​.

GIT_EXT_SERVICE_NOPREFIX

Set to long name (upload-pack, etc​...) of service helper needs to invoke​.

Examples

This remote helper is transparently used by Git when you use commands such as "git fetch <URL>", "git clone <URL>", , "git push <URL>" or "git remote add <nick> <URL>", where <URL> begins with ext::​. Examples:

"ext::ssh -i /home/foo/​.ssh/somekey user@host​.example %S foo/repo"

Like host​.example:foo/repo, but use /home/foo/​.ssh/somekey as keypair and user as the user on the remote side​. This avoids the need to edit ​.ssh/config​.

"ext::socat -t3600 - ABSTRACT-CONNECT:/git-server %G/somerepo"

Represents repository with path /somerepo accessible over git protocol at the abstract namespace address /git-server​.

"ext::git-server-alias foo %G/repo"

Represents a repository with path /repo accessed using the helper program "git-server-alias foo"​. The path to the repository and type of request are not passed on the command line but as part of the protocol stream, as usual with git:// protocol​.

"ext::git-server-alias foo %G/repo %Vfoo"

Represents a repository with path /repo accessed using the helper program "git-server-alias foo"​. The hostname for the remote server passed in the protocol stream will be "foo" (this allows multiple virtual Git servers to share a link-level address)​.

"ext::git-server-alias foo %G/repo% with% spaces %Vfoo"

Represents a repository with path /repo with spaces accessed using the helper program "git-server-alias foo"​. The hostname for the remote server passed in the protocol stream will be "foo" (this allows multiple virtual Git servers to share a link-level address)​.

"ext::git-ssl foo​.example /bar"

Represents a repository accessed using the helper program "git-ssl foo​.example /bar"​. The type of request can be determined by the helper using environment variables (see above)​.

See Also

gitremote-helpers(7)

Git

Part of the git(1) suite

Info

09/28/2026 Git 2.56.0 Git Manual