在执行git clone
操作之前,有没有办法检查git存储库是否存在?像git clone $REMOTE_URL --dry-run
这样的东西?
我想实现快速检查方法,它将在执行克隆操作之前检查是否存在。我希望连接速度可能很慢,而且存储库可能大于1GB,因此我不希望由于简单的验证而依赖于大量的时间操作。验证通过后,克隆将在后台异步执行。
我发现这个https://superuser.com/questions/227509/git-ping-check-if-remote-repository-exists但它在初始克隆操作完成后从git存储库上下文工作。
也许有一些git调用在没有git存储库上下文的情况下工作,如果存在目标存储库则返回“某些数据”,如果不存在则返回错误。
您链接的答案就是您希望它做的事情。
尝试在没有存储库的文件夹中运行它:
git ls-remote https://github.com/git/git
即使您没有使用git init
添加本地存储库或执行了git clone
,它也应该显示远程参考。
查看更多:https://www.kernel.org/pub/software/scm/git/docs/git-ls-remote.html
您可以使用GitHub's API轻松完成此操作(确保从repo名称中省略.git
):
curl https://api.github.com/repos/<user>/<repo>
如果未找到存储库:
curl https://api.github.com/repos/coldhawaiian/blarblar
{
"message": "Not Found",
"documentation_url": "https://developer.github.com/v3"
}
除此以外:
curl https://api.github.com/repos/coldhawaiian/git-ninja-toolkit
{
"id": 11881218,
"name": "git-ninja-toolkit",
"full_name": "coldhawaiian/git-ninja-toolkit",
"owner": {
"login": "coldhawaiian",
"id": 463580,
"avatar_url": "https://avatars.githubusercontent.com/u/463580?",
"gravatar_id": "f4de866459391939cd2eaf8b369d4d09",
"url": "https://api.github.com/users/coldhawaiian",
"html_url": "https://github.com/coldhawaiian",
"followers_url": "https://api.github.com/users/coldhawaiian/followers",
// etc...
"type": "User",
"site_admin": false
},
// etc...
}
你可以使用ls-remote
:
$ git ls-remote [email protected]:github/markup.git
794d5d36dae7c1a9a0ed3d452ad0ffa5ab2cc074 HEAD
d27b5b1c5ae84617d4a9356eaf565c7b555c4d1d refs/heads/can_render_regex
c03cce8f271d683c9cdeb5253c9cb21b5f0e65a0 refs/heads/fix-tests-part-deux
# Snip many more lines
$ git ls-remote [email protected]:nothing/here.git
ERROR: Repository not found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
请注意,当发生这种情况时,ls-remote
会退出128,因此如果您不需要它,可以重定向命令输出,只需检查命令的返回值。
请注意,在某些情况下,系统可能会提示您输入,例如如果您尝试访问GitHub https://...
存储库。这是因为可能存在匹配的私有存储库。
请尝试以下方法:
curl -u "$username:$token" https://api.github.com/repos/user/repository-name
如果Git存储库不存在,输出将是:
{
"message": "Not Found",
"documentation_url": "https://developer.github.com/v3"
}
如果存在Git存储库,则输出将为:
{
"id": 123456,
"name": "repository-name",
"full_name": "user/repository-name",
"owner": { ... }
............
}