Risposte:
Penso che il git ls-remote
comando sia praticamente fatto per questo scopo.
Se usi l' --exit-code
argomento puoi saltare l'invio dell'output a null
. Restituirà qualcosa solo in caso di errore.
Inoltre, puoi usare l' -h
argomento per mostrare solo i riferimenti head.
git ls-remote --exit-code -h "$REPO_URL"
-h
è un'ottima idea. Tuttavia, --exit-code
non è la scelta giusta qui. La pagina man dice: Esci con lo stato "2" quando non si trovano riferimenti corrispondenti nel repository remoto. Ciò significa che git ls-remote --exit-code "$REPO_URL"
fallirà per un repository vuoto che è stato appena inizializzato con git init
.
È possibile restringere l'output utilizzando qualcosa di simile git ls-remote "$REPO_URL" HEAD
TL; DR:
git ls-remote
è il modo, ecco una funzione pronta per la shell per un rapido accesso:
## 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
}
Uso:
if git-remote-url-reachable "$url"; then
## code
fi
Cosa sta facendo ?
Questo è solo un comodo mash-up di tutti i commenti / soluzioni precedentemente enunciati con alcune piccole modifiche, una funzione di bash copia-incolla pronta e un esempio di codice d'uso per renderlo cristallino. Noterai che:
limita l'output poiché il riferimento verificato è probabilmente inesistente, poiché git
uscirà comunque con livello di errore 0 su riferimento non corrispondente . L'unica differenza qui è che ci sono un po 'meno output da trasferire sulla rete rispetto a ask HEAD
(e molto meno che non chiedere un ref o addirittura limitarsi ai soli head), e questo è anche meno output da inserire /dev/null
(ma questo l'ultimo impiega comunque tempo trascurabile)
il riferimento controllato chiarisce che stiamo verificando l'esistenza , questo potrebbe aiutare se vuoi essere educato con gli amministratori del server che stai sondando e dare loro la possibilità di capire perché ricevono queste sonde se controllano qualcosa.
/dev/null
) dovrebbe essere abbastanza piccolo.