J'aimerais savoir s'il existe un référentiel distant. Voici ce que je suis venu avec:
git ls-remote -h "$REPO_URL" &> /dev/null
Y a-t-il une meilleure façon?
Je pense que la commande git ls-remote
est à peu près faite pour cela.
Si vous utilisez l'argument --exit-code
, vous pouvez ignorer l'envoi de la sortie à null
. Il ne retournera quelque chose qu'en cas d'erreur.
En outre, vous pouvez utiliser l'argument -h
pour afficher uniquement les références d'en-tête.
git ls-remote --exit-code -h "$REPO_URL"
Vous pouvez limiter la sortie en utilisant quelque chose comme git ls-remote "$REPO_URL" HEAD
TL; DR:
git ls-remote
est le chemin, voici une fonction prête pour 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
}
Utilisation:
if git-remote-url-reachable "$url"; then
## code
fi
Que fait-il?
Ceci est juste un mélange pratique de tous les commentaires/solutions mentionnés précédemment avec quelques ajustements mineurs, 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
sera toujours fermé avec le niveau d'erreur 0 sur ref non concordant . 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 une limitation aux têtes uniquement), ce qui représente également une sortie inférieure à /dev/null
( mais ce dernier prend quand même un temps négligeable)
le ref coché indique clairement que nous cherchons l'existence , cela pourrait aider si vous voulez être poli avec les administrateurs du serveur que vous sondez et donner leur permettre de comprendre pourquoi ils reçoivent ces sondes s’ils surveillent quoi que ce soit.