Sepertinya pilihan yang bagus. Overhead dari "pekerjaan ekstra" untuk mengambil dan memformat daftar referensi (yang kemudian dikirim ke /dev/null) harus cukup kecil.
Chris Johnsen
Jawabannya harus: Tidak, tidak ada cara yang lebih baik.
Timo
Jawaban:
70
Saya pikir git ls-remoteperintahnya cukup banyak dibuat untuk tujuan itu.
-hadalah ide bagus. Namun, --exit-codebukan pilihan yang tepat di sini. Halaman manual mengatakan: Keluar dengan status "2" ketika tidak ada referensi yang cocok ditemukan di repositori jarak jauh. Ini berarti bahwa git ls-remote --exit-code "$REPO_URL"akan gagal untuk repo kosong yang baru saja diinisialisasi dengan git init.
Jo Liss
3
Anda dapat mempersempit output dengan menggunakan sesuatu seperti git ls-remote "$REPO_URL" HEAD
@Timo, maka Anda mungkin memiliki server yang tidak responsif atau koneksi Anda atau klien git yang rusak. Misalnya port jaringan difilter. Investigasi lebih lanjut agak mirip dengan apa yang terjadi ketika ping Anda tidak merespons :). Sebagai contoh, Anda dapat mencoba memeriksa apakah Anda membuat koneksi melalui netcat atau openssl s_client atau tracepath .
ony
0
TL; DR:
git ls-remote begini caranya, berikut adalah fungsi shell-ready untuk akses cepat:
## 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
}
Pemakaian:
if git-remote-url-reachable "$url"; then
## code
fi
Apa yang sedang dilakukannya?
Ini hanya penyatuan yang nyaman dari semua komentar / solusi yang sebelumnya dinyatakan dengan beberapa tweak kecil, fungsi siap-tempel bash dan contoh kode penggunaan untuk membuatnya lebih jernih. Anda akan perhatikan bahwa:
itu membatasi output sebagai referensi diperiksa mungkin tidak ada, karena gitmasih akan keluar dengan tingkat kesalahan 0 pada ref tidak cocok . Satu-satunya perbedaan di sini adalah bahwa ada sedikit lebih sedikit keluaran untuk ditransfer di jaringan dibandingkan dengan meminta HEAD(dan jauh lebih sedikit daripada tidak meminta ref atau bahkan membatasi hanya kepala), dan ini juga lebih sedikit keluaran untuk digunakan /dev/null(tapi ini yang terakhir adalah mengambil waktu yang dapat diabaikan)
wasit yang diperiksa menjelaskan bahwa kami sedang menyelidiki keberadaannya , ini bisa membantu jika Anda ingin bersikap sopan dengan administrator server yang Anda selidiki dan memberi mereka kesempatan untuk memahami mengapa mereka menerima penyelidikan ini jika mereka memantau sesuatu.
/dev/null
) harus cukup kecil.Jawaban:
Saya pikir
git ls-remote
perintahnya cukup banyak dibuat untuk tujuan itu.sumber
Jika Anda menggunakan
--exit-code
argumen, Anda dapat melewatkan pengiriman kenull
. Ini akan mengembalikan sesuatu hanya jika terjadi kesalahan.Anda juga dapat menggunakan
-h
argumen untuk hanya menampilkan referensi kepala.sumber
-h
adalah ide bagus. Namun,--exit-code
bukan pilihan yang tepat di sini. Halaman manual mengatakan: Keluar dengan status "2" ketika tidak ada referensi yang cocok ditemukan di repositori jarak jauh. Ini berarti bahwagit ls-remote --exit-code "$REPO_URL"
akan gagal untuk repo kosong yang baru saja diinisialisasi dengangit init
.Anda dapat mempersempit output dengan menggunakan sesuatu seperti
git ls-remote "$REPO_URL" HEAD
sumber
TL; DR:
git ls-remote
begini caranya, berikut adalah fungsi shell-ready untuk akses cepat:Pemakaian:
Apa yang sedang dilakukannya?
Ini hanya penyatuan yang nyaman dari semua komentar / solusi yang sebelumnya dinyatakan dengan beberapa tweak kecil, fungsi siap-tempel bash dan contoh kode penggunaan untuk membuatnya lebih jernih. Anda akan perhatikan bahwa:
itu membatasi output sebagai referensi diperiksa mungkin tidak ada, karena
git
masih akan keluar dengan tingkat kesalahan 0 pada ref tidak cocok . Satu-satunya perbedaan di sini adalah bahwa ada sedikit lebih sedikit keluaran untuk ditransfer di jaringan dibandingkan dengan memintaHEAD
(dan jauh lebih sedikit daripada tidak meminta ref atau bahkan membatasi hanya kepala), dan ini juga lebih sedikit keluaran untuk digunakan/dev/null
(tapi ini yang terakhir adalah mengambil waktu yang dapat diabaikan)wasit yang diperiksa menjelaskan bahwa kami sedang menyelidiki keberadaannya , ini bisa membantu jika Anda ingin bersikap sopan dengan administrator server yang Anda selidiki dan memberi mereka kesempatan untuk memahami mengapa mereka menerima penyelidikan ini jika mereka memantau sesuatu.
sumber