Cela semble être un bon choix. La surcharge du «travail supplémentaire» de récupération et de formatage de la liste des références (qui est ensuite envoyée à /dev/null) devrait être assez faible.
Chris Johnsen
La réponse devrait être: non, il n'y a pas de meilleur moyen.
Timo
Réponses:
70
Je pense que la git ls-remotecommande est à peu près faite à cette fin.
-hC'est une bonne idée. Cependant, ce --exit-coden'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.
Jo Liss
3
Vous pouvez limiter la sortie en utilisant quelque chose comme git ls-remote "$REPO_URL" HEAD
@Timo, vous avez probablement un serveur qui ne répond pas, votre connexion ou un client git cassé. Par exemple, le port réseau est filtré. Les investigations ultérieures sont un peu similaires à ce qui se passe lorsque votre ping ne répond pas :). Par exemple, vous pouvez essayer de vérifier si la connexion est établie via netcat ou s_client ou tracepath de openssl .
Seulement
0
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 gitelle 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.Réponses:
Je pense que la
git ls-remote
commande est à peu près faite à cette fin.la source
Si vous utilisez un
--exit-code
argument, vous pouvez ignorer l'envoi de la sortienull
. 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.la source
-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 quegit ls-remote --exit-code "$REPO_URL"
cela échouera pour un dépôt vide qui vient juste d'être initialisé avecgit init
.Vous pouvez limiter la sortie en utilisant quelque chose comme
git ls-remote "$REPO_URL" HEAD
la source
TL; DR:
git ls-remote
Voici le moyen, voici une fonction prête pour le shell pour un accès rapide:Usage:
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 demanderHEAD
(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.
la source