Parece una buena elección. La sobrecarga del "trabajo adicional" de buscar y formatear la lista de referencias (que luego se envía a /dev/null) debe ser bastante pequeña.
Chris Johnsen
La respuesta debería ser: No, no hay mejor manera.
Timo
Respuestas:
70
Creo que el git ls-remotecomando está hecho para ese propósito.
-hEs una gran idea. Sin embargo, --exit-codeno es la elección correcta aquí. La página de manual dice: Salga con el estado "2" cuando no se encuentren referencias coincidentes en el repositorio remoto. Esto significa que git ls-remote --exit-code "$REPO_URL"fallará para un repositorio vacío que se acaba de inicializar git init.
Jo Liss
3
Puede reducir la producción utilizando algo como git ls-remote "$REPO_URL" HEAD
@Timo, entonces probablemente tengas un servidor que no responde o tu conexión o un cliente git roto. Por ejemplo, se filtra el puerto de red. Las investigaciones adicionales son algo similares a lo que sucede cuando su ping no responde :). Por ejemplo, puede intentar comprobar si se establece la conexión a través de netcat o openssl s_client o tracepath .
ony
0
TL; DR:
git ls-remote es el camino, aquí hay una función lista para shell para acceso rápido:
## 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
}
Uso:
if git-remote-url-reachable "$url"; then
## code
fi
Qué está haciendo ?
Esto es solo una combinación conveniente de todos los comentarios / soluciones previamente establecidos con algunos pequeños ajustes, una función de listo para copiar y pegar bash y una muestra de código de uso para que quede claro como el cristal. Notarás que:
limita la salida ya que la referencia marcada es probablemente inexistente, ya gitque todavía saldrá con el nivel de error 0 en la referencia no coincidente . La única diferencia aquí es que hay un poco menos de salida para transferir en la red en comparación con la solicitud HEAD(y mucho menos que no pedir una referencia o incluso limitarla solo a cabezas), y esto también es menos salida para emitir /dev/null(pero esto el último está tomando un tiempo insignificante de todos modos)
la referencia verificada deja en claro que estamos investigando la existencia , esto podría ayudar si desea ser cortés con los administradores del servidor que está investigando y darles la oportunidad de comprender por qué reciben estas sondas si supervisan algo.
/dev/null
) debe ser bastante pequeña.Respuestas:
Creo que el
git ls-remote
comando está hecho para ese propósito.fuente
Si usa
--exit-code
argumentos, puede omitir el envío de resultadosnull
. Solo devolverá algo en caso de error.Además, puede usar
-h
argumentos para mostrar solo referencias de cabezas.fuente
-h
Es una gran idea. Sin embargo,--exit-code
no es la elección correcta aquí. La página de manual dice: Salga con el estado "2" cuando no se encuentren referencias coincidentes en el repositorio remoto. Esto significa quegit ls-remote --exit-code "$REPO_URL"
fallará para un repositorio vacío que se acaba de inicializargit init
.Puede reducir la producción utilizando algo como
git ls-remote "$REPO_URL" HEAD
fuente
TL; DR:
git ls-remote
es el camino, aquí hay una función lista para shell para acceso rápido:Uso:
Qué está haciendo ?
Esto es solo una combinación conveniente de todos los comentarios / soluciones previamente establecidos con algunos pequeños ajustes, una función de listo para copiar y pegar bash y una muestra de código de uso para que quede claro como el cristal. Notarás que:
limita la salida ya que la referencia marcada es probablemente inexistente, ya
git
que todavía saldrá con el nivel de error 0 en la referencia no coincidente . La única diferencia aquí es que hay un poco menos de salida para transferir en la red en comparación con la solicitudHEAD
(y mucho menos que no pedir una referencia o incluso limitarla solo a cabezas), y esto también es menos salida para emitir/dev/null
(pero esto el último está tomando un tiempo insignificante de todos modos)la referencia verificada deja en claro que estamos investigando la existencia , esto podría ayudar si desea ser cortés con los administradores del servidor que está investigando y darles la oportunidad de comprender por qué reciben estas sondas si supervisan algo.
fuente