Respostas:
Eu acho que o git ls-remote
comando é praticamente feito para esse fim.
Se você usar o --exit-code
argumento, poderá pular o envio de saída para null
. Ele retornará algo apenas em caso de erro.
Além disso, você pode usar o -h
argumento para mostrar apenas referências de cabeças.
git ls-remote --exit-code -h "$REPO_URL"
-h
é uma ótima ideia No entanto, --exit-code
não é a escolha certa aqui. A página do manual diz: Saia com o status "2" quando nenhuma referência correspondente for encontrada no repositório remoto. Isso significa que git ls-remote --exit-code "$REPO_URL"
haverá falha em um repositório vazio que acabou de ser inicializado git init
.
Você pode restringir a saída usando algo como git ls-remote "$REPO_URL" HEAD
TL; DR:
git ls-remote
é o caminho, aqui está uma função pronta para shell para acesso 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
O que isso está fazendo ?
Este é apenas um mash-up conveniente de todos os comentários / soluções mencionados anteriormente com alguns pequenos ajustes, uma função pronta para copiar e colar do bash e um exemplo de código de uso para torná-lo claro. Você notará que:
ele limita a saída, pois a referência verificada provavelmente não existe, pois git
ainda sairá com o nível de erro 0 na referência não correspondente . A única diferença aqui é que há um pouco menos de saída a ser transferida na rede em comparação com a solicitação HEAD
(e muito menos do que não pedir uma ref ou até mesmo limitar apenas as cabeças), e isso também é menos saída a ser usada /dev/null
(mas isso o último está demorando um tempo insignificante)
o juiz verificado deixa claro que estamos investigando a existência , isso pode ajudar se você quiser ser educado com os administradores do servidor que está investigando e dar a eles a chance de entender por que eles recebem essas investigações se monitoram alguma coisa.
/dev/null
) deve ser bastante pequena.