Question git "ping": vérifiez si le référentiel distant existe


Je voudrais savoir si un référentiel distant existe. Voici ce que j'ai imaginé:

git ls-remote -h "$REPO_URL" &> /dev/null

Y a-t-il une meilleure façon?


65
2017-12-31 00:34


origine


Cela semble être un bon choix. Le surcoût du "travail supplémentaire" d’extraction et de mise en forme de la liste de références (qui est ensuite envoyée à /dev/null) devrait être assez petit. - Chris Johnsen
La réponse devrait être: non, il n'y a pas de meilleur moyen. - Timo


Réponses:


Je pense que le git ls-remote commande est à peu près fait pour cela.


59
2018-01-01 12:08



oui, cela semble fonctionner, mais pouvez-vous, s'il vous plaît, fournir des explications et dire si ce 100% que je peux cloner ce repo - vladkras


Si tu utilises --exit-code argument que vous pouvez ignorer l'envoi de sortie à null. Il ne renverra quelque chose qu'en cas d'erreur.

En outre, vous pouvez utiliser -h argument pour afficher uniquement les références de têtes.

git ls-remote --exit-code -h "$REPO_URL"

13
2017-10-29 14:18



-h est une excellente idée. cependant, --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" échouera pour un repo vide qui vient juste d'être initialisé avec git init. - Jo Liss


Vous pouvez restreindre la sortie en utilisant quelque chose comme git ls-remote "$REPO_URL" HEAD


3
2017-08-23 06:00



Ça pend pour toujours. - Timo
@Timo, alors vous avez probablement un serveur sans réponse ou votre connexion ou un client git cassé. Par exemple, le port réseau est filtré. D'autres investigations sont 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 openssl s_client ou tracepath. - ony