检查git存储库是否存在

问题描述 投票:19回答:4

在执行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 github
4个回答
24
投票

您链接的答案就是您希望它做的事情。

尝试在没有存储库的文件夹中运行它:

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


7
投票

您可以使用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...
}

3
投票

你可以使用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://...存储库。这是因为可能存在匹配的私有存储库。


1
投票

请尝试以下方法:

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": { ... } 
    ............
}
© www.soinside.com 2019 - 2024. All rights reserved.