假设以下配置:
$ cat ~/.ssh/config
Host foo
HostName git.foo.com
IdentityFile ~/.ssh/foo
Port 9000
User git
$ cd WORKING_COPY
$ git remote -v
origin foo:bla.git (fetch)
origin foo:bla.git (push)
在文件夹内,我可以使用什么 git 子命令WORKING_COPY
来解析远程的真实 URL origin
(即)?git+ssh://[email protected]:9000/bla.git
答案1
就 Git 而言,是真实的 URL。git remote -v
并且git remote get-url
只执行 Git 自身配置(即url.*.insteadOf
设置)中定义的替换。其余部分直接传递给 SSH 客户端。
因此,您需要~/.ssh/config
自己解析,或者以某种方式询问ssh
程序。最近的 OpenSSH 版本有-G
以下选项:
$ ssh -G foo | egrep "^(user|hostname|port) "
user git
hostname git.foo.com
port 9000
$ ssh -G foo | perl -e 'while (<>) { /^(\S+) (.*)$/ and $c{$1} = $2; }
for ($c{hostname}) { /:/ and s/.*/[$&]/; }
print "ssh://$c{user}\@$c{hostname}:$c{port}/\n";'
ssh://[email protected]:9000/
(计划从 git 中删除git+ssh://
和前缀。)ssh+git://
对于没有直接的选项;你也许可以滥用它的 ProxyCommand 选项(这就是 Mosh 所做的),或者如果你不介意的话,也可以滥用 LocalCommand連接到服务器:
ssh -o ProxyCommand=">&2; echo %h %p" foo