在bash脚本中,验证git URL指向有效git repo并且脚本有权读取它的最简单方法是什么?
应支持的协议包括git@
,https://
和git://
。 Curl在git://
协议上失败。
git@github.com:UserName/Example.git
https://UserName@github.com/UserName/Example.git
git://github.com/UserName/Example.git
注意:我不是要求检查URL是否在语法上正确,我需要验证在bash脚本中输入的URL位置是否存在repo。
答案 0 :(得分:38)
虽然VonC的回答是正确的,但这是我最终使用的内容:
git ls-remote将返回有关存储库的信息,默认情况下,这是HEAD,所有分支和标记,以及每个条目的提交ID。 e.g:
$ git ls-remote git://github.com/user/repo.git
<commit id> HEAD
<commit id> refs/heads/example_branch
<commit id> refs/heads/master
<commit id> refs/tags/v1.0.2
<commit id> refs/tags/v1.0.0
git ls-remote
成功时返回代码0,失败时返回错误代码128。
如果无法访问存储库,例如,如果您没有查看存储库的权限,或者该位置不存在存储库,则git ls-remote
将返回:
fatal: The remote end hung up unexpectedly
要在bash脚本中使用它,以下内容将起作用...
git ls-remote "$SITE_REPO_URL" &>-
if [ "$?" -ne 0 ]; then
echo "[ERROR] Unable to read from '$SITE_REPO_URL'"
exit 1;
fi
(注意: &>-
使stderr和stdout无效,因此该命令不会输出任何内容)
答案 1 :(得分:36)
如this issue所示,您可以使用git ls-remote来测试您的地址。
如果你需要调试git调用
set GIT_TRACE=1
。例如:
env GIT_PROXY_COMMAND=myproxy.sh GIT_TRACE=1 git ls-remote https://...
“
git ls-remote
”是我用来测试通信的最快方式 远程存储库而不实际克隆它。因此它的实用性作为对此的测试 问题。
您可以在“git ls-remote
returns 128 on any repo”中看到它用于检测地址问题。