Parece uma boa escolha. A sobrecarga do "trabalho extra" de buscar e formatar a lista de referências (que é então enviada para /dev/null) deve ser bastante pequena.
Chris Johnsen
A resposta deve ser: Não, não há melhor maneira.
Timo
Respostas:
70
Eu acho que o git ls-remotecomando é praticamente feito para esse fim.
-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.
Jo Liss
3
Você pode restringir a saída usando algo como git ls-remote "$REPO_URL" HEAD
@Timo, provavelmente você tem um servidor que não responde ou sua conexão ou um cliente git quebrado. Por exemplo, a porta de rede é filtrada. Investigações adicionais são semelhantes ao que acontece quando o ping não responde :). Por exemplo, você pode tentar verificar se a conexão é estabelecida via netcat ou openssl s_client ou tracepath .
17488
0
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 gitainda 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.Respostas:
Eu acho que o
git ls-remote
comando é praticamente feito para esse fim.fonte
Se você usar o
--exit-code
argumento, poderá pular o envio de saída paranull
. 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.fonte
-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 quegit ls-remote --exit-code "$REPO_URL"
haverá falha em um repositório vazio que acabou de ser inicializadogit init
.Você pode restringir a saída usando algo como
git ls-remote "$REPO_URL" HEAD
fonte
TL; DR:
git ls-remote
é o caminho, aqui está uma função pronta para shell para acesso rápido:Uso:
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çãoHEAD
(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.
fonte