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.