【问题标题】:How to check the validity of a remote git repository URL?如何检查远程 git 存储库 URL 的有效性?
【发布时间】:2012-03-07 22:26:59
【问题描述】:

在 bash 脚本中,验证 git URL 是否指向有效的 git 存储库以及脚本是否有权读取它的最简单方法是什么?

应支持的协议有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。

【问题讨论】:

    标签: git bash url curl github


    【解决方案1】:

    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”中的地址问题。

    【讨论】:

    • Google 代码链接已损坏,msysgit 及其问题跟踪器已移至 GitHub。我在 GitHub 上没有找到前一个问题,可能是因为我不确定我应该搜索什么。
    • @AttilaCsipak 谢谢。我已经修复或更新了缺失的链接
    【解决方案2】:

    虽然 VonC 的回答是正确的,但这是我最终使用的:

    git ls-remote 将返回有关存储库的信息,默认情况下这是 HEAD、所有分支和标签,以及每个条目的提交 ID。 例如:

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

    如果 repo 不可访问,例如,如果您没有查看存储库的权限,或者如果该位置不存在存储库,git ls-remote 将返回:

    fatal: The remote end hung up unexpectedly
    

    要在 bash 脚本中使用它,以下将起作用...

    git ls-remote "$SITE_REPO_URL" > /dev/null 2>&1
    if [ "$?" -ne 0 ]; then
        echo "[ERROR] Unable to read from '$SITE_REPO_URL'"
        exit 1;
    fi
    

    注意:&gt; /dev/null 2&gt;&amp;1 使 stderr 和 stdout 静音,因此该命令不会输出任何内容)

    【讨论】:

    • 我建议不要将&amp;&gt;- 用于可移植脚本,因为它似乎是一个 bash 扩展。在其他 shell 中,此语法不会按预期工作。虽然有类似的语法 (&gt;&amp;- 2&gt;&amp;-),但功能并不相同——它将关闭文件描述符而不是静默重定向它们,这会导致许多程序出错。您可以改用&gt; /dev/null 2&gt;&amp;1
    • 我添加了 GIT_ASKPASS=true 以防止在错误的 url 上提示输入用户名/密码。
    猜你喜欢
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2011-01-26
    • 2018-06-15
    • 2011-03-03
    相关资源
    最近更新 更多