Como resolver um controle remoto git?

0

Suponha a seguinte configuração:

$ 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)

Qual subcomando git posso usar, dentro da pasta WORKING_COPY , para resolver o URL real do origin remote (ou seja, git+ssh://[email protected]:9000/bla.git )?

    
por jcayzac 04.11.2016 / 14:59

1 resposta

1

No que diz respeito ao Git, esse é o URL real. git remote -v e git remote get-url realizam apenas substituições definidas na própria configuração do Git (ou seja, as configurações url.*.insteadOf ). O restante é passado diretamente para o cliente SSH.

Portanto, você precisará analisar o ~/.ssh/config ou perguntar ao programa ssh de alguma forma. Versões recentes do OpenSSH têm a opção -G para isso:

$ 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/

(Os prefixos git+ssh:// e ssh+git:// estão planejados para serem removidos do git.)

Para versões mais antigas, que não têm uma opção direta para isso; talvez você possa abusar da opção ProxyCommand (que é o que Mosh faz), ou LocalCommand se você não se importar com isso conectando ao servidor:

ssh -o ProxyCommand=">&2; echo %h %p" foo
    
por 04.11.2016 / 15:10

Tags