web-dev-qa-db-fra.com

Comment vérifier la validité d'une URL de référentiel git distant?

Dans un script bash, quelle serait la manière la plus simple de vérifier qu'une URL git pointe vers un référentiel git valide et que le script a accès pour y lire?

Les protocoles qui doivent être pris en charge sont git@, https://, et git://. Curl échoue sur le git:// protocole.

[email protected]:UserName/Example.git
https://[email protected]/UserName/Example.git
git://github.com/UserName/Example.git

Remarque: Je ne demande pas de vérifier si une URL est syntaxiquement correcte, je dois vérifier qu'un dépôt existe à l'emplacement URL entré à partir d'un script bash.

44
Highway of Life

Comme vu dans ce problème , vous pouvez utiliser git ls-remote pour tester votre adresse.

Si vous devez déboguer les appels git set GIT_TRACE=1. par exemple:

env GIT_PROXY_COMMAND=myproxy.sh GIT_TRACE=1 git ls-remote https://...

"git ls-remote "est le moyen le plus rapide que je connaisse pour tester les communications avec un référentiel distant sans le cloner. D'où son utilité comme test pour ce problème.

Vous pouvez le voir utilisé pour détecter un problème d'adresse dans " git ls-remote renvoie 128 sur n'importe quel dépôt ".

40
VonC

Bien que la réponse de VonC soit correcte, voici ce que j'ai fini par utiliser:

git ls-remote renverra des informations sur un référentiel, par défaut il s'agit de HEAD, de toutes les branches et balises, ainsi que de l'ID de validation pour chaque entrée. par exemple.:

$ git ls-remote git://github.com/user/repo.git
<commit id>    HEAD
<commit id>    refs/heads/example_branch
<commit id>    refs/heads/master
<commit id>    refs/tags/v1.0.2
<commit id>    refs/tags/v1.0.0

git ls-remote renvoie le code 0 en cas de succès, le code d'erreur 128 en cas d'échec.

Si le référentiel est inaccessible, par exemple, si vous n'êtes pas autorisé à afficher le référentiel, ou si un référentiel n'existe pas à cet emplacement, git ls-remote renverra:

fatal: The remote end hung up unexpectedly

Pour l'utiliser dans un script bash, ce qui suit fonctionnera ...

git ls-remote "$SITE_REPO_URL" &>-
if [ "$?" -ne 0 ]; then
    echo "[ERROR] Unable to read from '$SITE_REPO_URL'"
    exit 1;
fi

( Remarque: Le &>- fait taire stderr et stdout, donc la commande ne sortira rien)

40
Highway of Life