Убедитесь, что существует репозиторий 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": { ... }
............
}