Réponses:
Je pense que la git ls-remote
commande est à peu près faite à cette fin.
Si vous utilisez un --exit-code
argument, vous pouvez ignorer l'envoi de la sortie null
. Il ne retournera quelque chose qu'en cas d'erreur.
En outre, vous pouvez utiliser un -h
argument pour afficher uniquement les références de têtes.
git ls-remote --exit-code -h "$REPO_URL"
-h
C'est une bonne idée. Cependant, ce --exit-code
n'est pas le bon choix ici. La page de manuel dit: Quittez avec le statut "2" lorsqu'aucune référence correspondante n'est trouvée dans le référentiel distant. Cela signifie que git ls-remote --exit-code "$REPO_URL"
cela échouera pour un dépôt vide qui vient juste d'être initialisé avec git init
.
Vous pouvez limiter la sortie en utilisant quelque chose comme git ls-remote "$REPO_URL" HEAD
TL; DR:
git ls-remote
Voici le moyen, voici une fonction prête pour le shell pour un accès rapide:
## 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
}
Usage:
if git-remote-url-reachable "$url"; then
## code
fi
Qu'est-ce que ça fait ?
Ceci est juste un mélange pratique de tous les commentaires / solutions mentionnés précédemment avec quelques modifications mineures, une fonction de copie-coller prête à l'emploi et un exemple de code d'utilisation pour le rendre parfaitement clair. Vous noterez que:
il limite la sortie car la référence vérifiée est probablement inexistante, car git
elle se terminera toujours avec le niveau d'erreur 0 sur la référence non correspondante . La seule différence est qu’il y a un peu moins de sorties à transférer sur le réseau que de demander HEAD
(et beaucoup moins que de ne pas demander une référence ou même de se limiter aux têtes), ce qui est également moins une sortie à utiliser /dev/null
(mais cela le dernier prend de toute façon un temps négligeable)
le ref coché indique clairement que nous sondons pour l'existence , cela pourrait aider si vous voulez être poli avec les administrateurs du serveur que vous sondez et leur donner une chance de comprendre pourquoi ils reçoivent ces sondes s'ils surveillent quoi que ce soit.
/dev/null
) devrait être assez faible.