Git uzaktan kumandası nasıl çözülür?


0

Aşağıdaki yapılandırmayı varsayalım:

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

Uzaktan kumandanın WORKING_COPYgerçek URL'sini origin(yani git+ssh://git@git.foo.com:9000/bla.git) çözmek için klasörün içinde hangi git alt komutunu kullanabilirim ?

Yanıtlar:


1

Bildiğim kadarıyla Git söz konusu olduğunda, bu ise gerçek bir URL. git remote -vve git remote get-urlsadece Git'in kendi konfigürasyonunda tanımlanan url.*.insteadOfayarları (yani ayarları) yapın. Gerisi doğrudan SSH istemcisine iletilir.

Bu nedenle, ~/.ssh/configkendinizi ayrıştırmanız veya bir sshşekilde programa sormanız gerekir . Son OpenSSH sürümleri -Gbunun için seçeneğe sahip:

$ 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://git@git.foo.com:9000/

( git+ssh://Ve ssh+git://öneklerin git'ten kaldırılması planlanmaktadır.)

Bunun için doğrudan bir seçeneğe sahip olmayan eski sürümler için; ProxyCommand seçeneğini (Mosh'un yaptığı budur) veya LocalCommand'ı kötüye kullanabilirsiniz, eğer sunucuya bağlanması gerçekten sakıncası yoksa :

ssh -o ProxyCommand=">&2; echo %h %p" foo

Teşekkürler, ama o zaman uzaktan kumandanın ssh olduğunu nasıl anlarım? foo:belki geçerli bir URL şeması olabilir. Nasıl düzenleri listeleyebilirsiniz nasıl / halen yüklenmiş protokolleri gitanlar (o eğer yüzden ssh olduğunu varsayabiliriz değil bu listede)?
jcayzac,

1
Git'e gelince ... URL ayrıştırma biraz garipleşiyor. En basit seçeneğiniz, hemen takip ederse :/(neredeyse tüm URL'ler) veya ::(harici git-remote-foo-hand işleyicileri) bir URL şeması olduğunu varsaymak, aksi takdirde scp stil adresini varsayalım.
yerçekimi

Teşekkürler! Eğer önümüzdeki birkaç gün içinde kimse daha iyi bir cevap bulamazsa, bunu kabul edeceğim.
jcayzac,

Oh bekleyin, host:/path/to/repoaslında geçerlidir. Aslında, adında bir sunucunuz varsa http, o zaman http://foo/barher iki şekilde de yorumlanabilir. Bu nedenle, belki de URL varsayalım ://, hatta belirli listeler varsa beyaz listeye alın (git için listenin kaynak kodunu arayın).
yerçekimi

Eğer GIT_SSH_COMMAND="ssh -G >${PWD}/foo" git ls-remote origin xxxsıfırdan farklı dönüş koduyla döner ve dosyanın foobulunduğu, daha sonra uzaktan kullanılan ssh ve tüm bilgiler bu dosyada mevcuttur. Eğer sıfır bir geri dönüş kodu döndürdüyse, o zaman uzaktan kumandaya ssh kullanılmadan ulaşıldı (ve bu yüzden belki kullanmadan çözülecek hiçbir şey yok /etc/hosts.)
jcayzac
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.