无需使用GitHub API,如何用Bash检查公开GitHub仓库是否存在?
无需使用GitHub API,如何用Bash检查公开GitHub仓库是否存在?
嘿,这个需求我太懂了——之前用GitHub API查仓库频繁碰到限流问题,后来就琢磨出不用API的办法,给你分享两个实用的Bash方案:
方法一:通过HTTP状态码判断(基础版)
公开GitHub仓库存在的话,访问它的网页地址会返回200状态码,不存在则返回404。我们可以用curl只抓取状态码,不用下载整个页面,既高效又不会触发API限流:
check_public_github_repo() { # 接收两个参数:用户名和仓库名 local username="$1" local repo_name="$2" local repo_page="https://github.com/${username}/${repo_name}" # 静默请求,丢弃页面内容,只输出HTTP状态码 local status=$(curl -s -o /dev/null -w "%{http_code}" "${repo_page}") case "${status}" in 200) echo "✅ 公开仓库 ${username}/${repo_name} 存在" return 0 ;; 404) echo "❌ 公开仓库 ${username}/${repo_name} 不存在" return 1 ;; *) echo "⚠️ 检查失败,HTTP状态码:${status}(可能是网络问题或仓库权限限制)" return 2 ;; esac } # 使用示例:检查octocat的Hello-World仓库 check_public_github_repo octocat Hello-World
方法二:支持仓库重定向的增强版
有些仓库可能被改名或转移,GitHub会返回301重定向到新地址。加上-L参数让curl跟随重定向,就能准确判断仓库是否存在:
check_public_github_repo_with_redirect() { local username="$1" local repo_name="$2" local repo_page="https://github.com/${username}/${repo_name}" # 跟随重定向,获取最终的HTTP状态码 local status=$(curl -s -L -o /dev/null -w "%{http_code}" "${repo_page}") case "${status}" in 200) echo "✅ 公开仓库 ${username}/${repo_name} 存在(或已重定向)" return 0 ;; 404) echo "❌ 公开仓库 ${username}/${repo_name} 不存在" return 1 ;; *) echo "⚠️ 检查失败,HTTP状态码:${status}" return 2 ;; esac } # 使用示例:检查一个可能重定向的仓库 check_public_github_repo_with_redirect old-username old-repo-name
注意事项
- 这两个方法仅适用于公开仓库,私有仓库会返回
404或403,无法区分“不存在”和“私有”; - 如果遇到网络波动或GitHub服务器故障,会返回
5xx类状态码,函数里已经做了容错提示; curl的-s参数是静默模式,避免输出多余的连接信息,让脚本更干净。
备注:内容来源于stack exchange,提问作者a.t.
相关产品推荐
相关产品推荐

