如何检查远程git存储库URL的有效性?

时间:2012-03-07 22:26:59

标签: git bash url curl github

在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。

2 个答案:

答案 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”中看到它用于检测地址问题。