我想知道远程存储库是否存在。以下是我的想法:
git ls-remote -h "$REPO_URL" &> /dev/null
还有更好的方法吗?
答案1
我觉得git ls-remote
命令就是为了这个目的而制定的。
答案2
如果使用--exit-code
参数,则可以跳过将输出发送到null
。只有在出现错误时它才会返回一些内容。
另外,您可以使用-h
参数来仅显示头部引用。
git ls-remote --exit-code -h "$REPO_URL"
答案3
总结:
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 函数和使用代码示例,以使其清晰易懂。您会注意到:
它限制了输出,因为检查的引用(此处
CHECK_GIT_REMOTE_URL_REACHABILITY
)可能在远程服务器上不存在,并且git
没有任何内容可以回复。我们依靠以下事实git
如果不存在引用,仍会以错误级别 0 退出。这里唯一的区别是,与要求相比,网络上传输的输出略少HEAD
(并且比不要求 ref 甚至仅限于头部要少得多),而且投入的输出也较少/dev/null
(但最后一个无论如何花费的时间可以忽略不计)被选中的裁判的名字(即
CHECK_GIT_REMOTE_URL_REACHABILITY
)明确表明我们正在探索存在,如果您想礼貌地对待您正在探测的服务器的管理员并让他们有机会了解为什么如果他们监视任何东西会收到这些探测,这可能会有所帮助。
答案4
通过禁用请求证书,然后列出遥控器头仅有的:
export GIT_TERMINAL_PROMPT=0
git ls-remote "${repo}" HEAD &> /dev/null