Answers:
如果使用--exit-code
参数,则可以跳过将输出发送到null
。仅在出现错误的情况下才返回某些内容。
另外,您可以使用-h
参数仅显示heads引用。
git ls-remote --exit-code -h "$REPO_URL"
-h
是个好主意。但是,--exit-code
这里不是正确的选择。手册页显示:当在远程存储库中找不到匹配的引用时,以状态“ 2”退出。这意味着git ls-remote --exit-code "$REPO_URL"
对于仅使用初始化的空存储库将失败git init
。
TL; DR:
git ls-remote
就是这样,这是一个快速访问shell的函数:
## 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
}
用法:
if git-remote-url-reachable "$url"; then
## code
fi
到底在做什么
这只是前面提到的所有注释/解决方案的便捷汇总,并进行了一些小调整,bash复制粘贴准备功能和用法代码示例,以使其清晰可见。您会注意到:
它限制了输出,因为检查的参考可能不存在,因为git
在不匹配的ref上仍然会以错误级别0退出。唯一的区别是与请求相比,网络上要传输的输出HEAD
要少得多(比不要求提供参考或什至仅限于头数要少得多),并且要强制转换的输出也要少/dev/null
(但这最后一个花费的时间可以忽略不计)
所检查的ref 清楚表明我们正在探测存在性,如果您希望对所探测的服务器的管理员保持礼貌,这可能会有所帮助,并让他们有机会了解为什么他们监视任何东西时会收到这些探测。
/dev/null
)的“额外工作”的开销应该很小。