git “ping”: uzak havuz var mı kontrol edin


76

Uzak bir depo olup olmadığını bilmek istiyorum. İşte geldiğim şey:

git ls-remote -h "$REPO_URL" &> /dev/null

Daha iyi bir yolu var mı?


4
İyi bir seçim gibi görünüyor. Referans listesini (daha sonra gönderilen /dev/null) almak ve biçimlendirmek için "ekstra iş" yükü oldukça küçük olmalıdır.
Chris Johnsen,

Cevap şöyle olmalı: Hayır, daha iyi bir yol yok.
Timo

Yanıtlar:


70

Bence git ls-remotekomut bu amaç için yapılmış.


evet, bu işe yarıyor gibi görünüyor, ama lütfen, biraz açıklama yapabilir ve bu% 100’ün bu
repoyu

15

Eğer --exit-codeargüman kullanıyorsanız , çıktı göndermeyi atlayabilirsiniz null. Yalnızca hata durumunda bir şey döndürür.

Ayrıca, -hyalnızca kafa referanslarını göstermek için argümanı kullanabilirsiniz .

git ls-remote --exit-code -h "$REPO_URL"

-hharika bir fikir. Ancak, --exit-codeburada doğru seçim değil. Man sayfası şöyle diyor: Uzak depoda eşleşen referans bulunmadığında "2" durumundan çıkın. Bu git ls-remote --exit-code "$REPO_URL", henüz yeni başlatılmış olan boş bir repo için başarısız olacağı anlamına gelir git init.
Jo Liss,

3

Çıktısını, gibi bir şey kullanarak daraltabilirsiniz. git ls-remote "$REPO_URL" HEAD


Sonsuza dek kilitleniyor.
Timo,

1
@Timo, o zaman muhtemelen yanıt vermeyen sunucunuz veya bağlantınız veya kopmuş git istemcisi var. Örneğin ağ portu filtrelenmiştir. Diğer araştırmalar, ping'iniz yanıt vermediğinde ne olduğuna benzer. Örneğin, netcat veya openssl s_client veya tracepath ile bağlantı kurulup kurulmadığını kontrol etmeyi deneyebilirsiniz .
ony

0

TL; DR:

git ls-remote yol, işte hızlı erişim için bir kabuk hazır işlevi:

  ## Returns errlvl 0 if $1 is a reachable git remote url 
  git-remote-url-reachable() {
      git ls-remote "$1" CHECK_GIT_REMOTE_URL_REACHABILITY >/dev/null 2>&1
  }

Kullanımı:

if git-remote-url-reachable "$url"; then
   ## code
fi

Ne yapıyor ?

Bu, daha önce bazı küçük tweaks, bash kopyala yapıştır hazır fonksiyonu ve kullanım kodu örneği ile kristal netleştirmek için belirtilen tüm yorumların / çözümlerin uygun bir karışımıdır. Bunu not edersiniz:

  • kontrol edilen referansın git hala hata seviyesi 0 ile çıkacağından , kontrol edilen referansın muhtemelen olmadığı için çıkışı sınırlar . Buradaki tek fark, ağa transfer etmek için talep HEADedilenden daha düşük bir çıktı olması (ve bir refre istemekten ve hatta sadece kafaları sınırlandırmaktan çok daha az) olmasıdır, ve bu aynı zamanda oyuncuların alması için daha az çıktıdır /dev/null(ancak bu sonuncusu zaten önemsiz zaman alıyor)

  • ref kontrol etmekte olduğumuzu açıkça ortaya koyuyor , bu, araştırmakta olduğunuz sunucunun yöneticileri ile kibar olmak ve bir şeyi izlerse neden bu probları aldıklarını anlamalarını sağlamak için yardımcı olabilir.

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.