Respostas:
Eu acho que o git ls-remotecomando é praticamente feito para esse fim.
Se você usar o --exit-codeargumento, poderá pular o envio de saída para null. Ele retornará algo apenas em caso de erro.
Além disso, você pode usar o -hargumento para mostrar apenas referências de cabeças.
git ls-remote --exit-code -h "$REPO_URL"
-hé uma ótima ideia No entanto, --exit-codenã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.