Yanıtlar:
Bence git ls-remote
komut bu amaç için yapılmış.
Eğer --exit-code
argüman kullanıyorsanız , çıktı göndermeyi atlayabilirsiniz null
. Yalnızca hata durumunda bir şey döndürür.
Ayrıca, -h
yalnızca kafa referanslarını göstermek için argümanı kullanabilirsiniz .
git ls-remote --exit-code -h "$REPO_URL"
-h
harika bir fikir. Ancak, --exit-code
burada 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
.
Çıktısını, gibi bir şey kullanarak daraltabilirsiniz. git ls-remote "$REPO_URL" HEAD
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 HEAD
edilenden 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.
/dev/null
) almak ve biçimlendirmek için "ekstra iş" yükü oldukça küçük olmalıdır.