¿Cómo verificar la validez de una URL del repository git remoto?

Dentro de un script bash, ¿cuál sería la forma más sencilla de verificar que una URL de git apunta a un repository de git válido y que el script tiene acceso para leer de él?

Los protocolos que se deben git@ son git@ , https:// y git:// . Curl falla en el protocolo git:// .

 git@github.com:UserName/Example.git https://UserName@github.com/UserName/Example.git git://github.com/UserName/Example.git 

Nota: No estoy pidiendo que verifique si una URL es sintácticamente correcta. Necesito verificar que exista un repository en la location URL ingresada desde un script bash.

Como se ve en este número , puede usar git ls-remote para probar su dirección.

Si necesita depurar las llamadas de git, set GIT_TRACE=1 . p.ej:

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

" git ls-remote " es la forma más rápida que conozco para probar las comunicaciones con un repository remoto sin clonarlo. De ahí su utilidad como una testing para este problema.

Puedes ver que se usa para detectar un problema de dirección en " git ls-remote returns 128 en cualquier repository ".

Aunque la respuesta de VonC es correcta, esto es lo que terminé usando:

git ls-remote devolverá información sobre un repository, por defecto es HEAD, todas las twigs y tags, junto con la identificación de confirmación para cada input. p.ej:

 $ 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 devuelve el código 0 en caso de éxito, el código de error 128 en caso de error.

Si el repository no está disponible, por ejemplo, si no tiene permiso para ver el repository, o si el repository no existe en esa location, git ls-remote devolverá:

 fatal: The remote end hung up unexpectedly 

Para usar esto en un script bash, lo siguiente funcionará …

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

( Nota: The &>- silence stderr y stdout, por lo que el command no generará nada)