如何解决 git 远程问题?

如何解决 git 远程问题?

假设以下配置:

$ 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

相关内容