Убедитесь, что существует репозиторий git

Есть ли способ проверить, существует ли репозиторий git перед выполнением действия клонирования git? Что-то вроде git clone $REMOTE_URL -dry-run?

Я хотел бы реализовать быстрый метод проверки, который будет проверять существование до того, как действие клонирования будет выполнено. Я ожидаю, что соединение может быть медленным, и репозиторий может быть большим даже больше 1 ГБ, поэтому я не хочу полагаться на длительную работу во времени из-за простой проверки. Клон будет выполняться асинхронно в фоновом режиме при прохождении проверки.

Я нашел этот https://superuser.com/info/227509/git-ping-check-if-remote-repository-exists, но он работает из контекста репозитория git после выполнения начального действия клонирования.

Возможно, существует какой-то вызов git, который работает без контекста репозитория git и возвращает "некоторые данные", если существует репозиторий на месте назначения или ошибка, если нет.

Ответ 1

Ответ, который вы связываете, делает то, что вы хотите.

Попробуйте запустить это в папке без репозитория:

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

Ответ 2

Вы можете легко сделать это с помощью API GitHub (не забудьте оставить .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://.... Это связано с тем, что может существовать соответствующий частный репозиторий.

Ответ 4

Попробуйте следующее:

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": { ... } 
    ............
}