GIT-REMOTE-EXT(1)
β¨ GIT-REMOTE-EXT(1) β¨
okay so you found the git-remote-ext page β the one that's like, the bridge between Git's smart transport and whatever external command you want to run π
no cap, this is the manual for the remote helper that does it.
π NAME π
git-remote-ext β bridge smart transport to external command. yes literally that's her job, she's the connector bestie π«Ά
πΈ SYNOPSIS πΈ
π¦ DESCRIPTION π¦
So this remote helper uses the <command> you give it to go connect to a remote Git server. That's the whole vibe β¨
Anything written to stdin of your <command> gets treated like it's headed to a git:// server β git-upload-pack, git-receive-pack, or git-upload-archive, depending on the situation. And anything read from stdout of <command> is treated like it came back from that same service. iykyk π«
Command and arguments are separated by an unescaped space. Like, an actual space, not a vibe.
The following sequences are literally special, do not ignore them:
'% 'β a literal space in a command or argument.%%β a literal percent sign.%sβ swapped out for the name (receive-pack,upload-pack, orupload-archive) of the service Git wants to invoke.%Sβ swapped out for the long name (git-receive-pack,git-upload-pack, orgit-upload-archive) of the service Git wants to invoke.%G(must be the first characters in an argument) β this argument is not passed to<command>. Instead it makes the helper start off by sendinggit://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 to not send such a request. This one's iconic if your remote side is agit://server you're reaching through some kind of tunnel π₯%V(must be first characters in argument) β this argument is not passed to<command>. Instead it sets thevhostfield in thegit://service request (to the rest of the argument). Default is to not sendvhostin such a request (if one is sent).
π ENVIRONMENT VARIABLES π
GIT_TRANSLOOP_DEBUGβ if it's set, prints debugging info about the various reads/writes. your nosy bestie mode π
π ENVIRONMENT VARIABLES PASSED TO COMMAND π
these get handed straight to your command, ok:
GIT_EXT_SERVICEβ set to the long name (git-upload-pack, etcβ¦) of the service helper needs to invoke.GIT_EXT_SERVICE_NOPREFIXβ set to the long name (upload-pack, etcβ¦) of the service helper needs to invoke.
π EXAMPLES π
Git uses this remote helper transparently when you run stuff like "git fetch <URL>", "git clone <URL>", "git push <URL>", or "git remote add <nick> <URL>", where <URL> starts with ext::. examples, bestie:
"ext::ssh -i /home/foo/.ssh/somekey user@host.example %S foo/repo"β likehost.example:foo/repo, but uses/home/foo/.ssh/somekeyas the keypair anduseras the user on the remote side. This avoids needing to edit.ssh/config. slay, no config file drama π"ext::socat -t3600 - ABSTRACT-CONNECT:/git-server %G/somerepo"β represents a repository with path/somereporeachable over git protocol at the abstract namespace address/git-server."ext::git-server-alias foo %G/repo"β represents a repository with path/repoaccessed via the helper program"git-server-alias foo". The path to the repo and the type of request are not passed on the command line β they go as part of the protocol stream, as usual withgit://protocol."ext::git-server-alias foo %G/repo %Vfoo"β same deal, repository with path/repovia the helper program"git-server-alias foo". But now the hostname for the remote server passed in the protocol stream will be"foo"(this lets multiple virtual Git servers share a link-level address) π¦"ext::git-server-alias foo %G/repo% with% spaces %Vfoo"β 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"(again: multiple virtual Git servers, one link-level address). note the%doing its literal-space thing, she ate π"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 figured out by the helper using environment variables (see above β¬οΈ).
β SEE ALSO β
π§ GIT π§
part of the git(1) suite, obviously π
ok that's the whole page, go bridge something π«Ά
and that's the tea β this page ships with Git 2.56.0, dated 2026-09-27. mwah π
π¦ where this page comes from
- arch rolling: git 2.56.0-1 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms