2012-08-29 16 views
19

Estoy escribiendo una secuencia de comandos bash y necesito una prueba para ver si existe un control remoto determinado.Compruebe si git remoto existe antes de la primera inserción

Supongamos, para ser concretos, que quiero probar si existe el control remoto faraway. Si presioné algo para faraway, puedo hacer if [ -d .git/refs/remotes/faraway ]; then .... Pero hasta donde puedo ver, el alias faraway aún se puede definir aunque .git/refs/remotes/faraway no exista.

Otra opción es analizar a través de la salida git remote y ver si faraway aparece allí. Pero me pregunto si existe una manera más fácil de verificar si faraway está definido, independientemente de si existe .git/refs/remotes/faraway/.

Respuesta

32

One thought: Puede probar el estado de salida en git ls-remote faraway. Esto realmente obligará a la comunicación con el control remoto, en lugar de simplemente buscar su presencia o ausencia a nivel local.

git ls-remote --exit-code faraway 
if test $? = 0; then 
    .... 
fi 
+7

Esto se puede simplificar en 'si lejana git ls-remoto ...'. El comando de prueba no es necesario. – jordanm

+0

Excelente. ¡Gracias! Supongo que la forma estándar de evitar obtener 'fatal ...' en la salida cuando 'lejano 'no existe es agregar' &>/dev/null' al final de la primera línea? – apc

+0

@apc Hay un indicador '--quiet' en la ayuda de uso, pero no está en la página man y no parece hacer nada. – Christopher

11

Si el mando a distancia se define en .git/config, puede evitar hacer ping al servidor remoto con git remote.

if git remote | grep faraway > /dev/null; then 
    ... 
fi 
+7

Esa es una búsqueda de subcadenas, por lo que podría dar falsos positivos si tiene otra controles remotos que contienen 'lejano'. –

20

Otra manera de comprobar si faraway se define en .git/config:

if git config remote.faraway.url > /dev/null; then 
    … 
fi 
+0

Esto ayuda especialmente si desea evitar viajes de ida y vuelta remotos. – hakre

Cuestiones relacionadas