Подтвердить что ты не робот

Как проверить правильность удаленного URL-адреса репозитория git?

В bash script, что было бы самым простым способом проверить, что URL git указывает на допустимое репо git и что script имеет доступ к чтению из него?

Протоколы, которые должны поддерживаться, - это [email protected], https:// и git://. Curl не работает в протоколе git://.

[email protected]:UserName/Example.git
https://[email protected]/UserName/Example.git
git://github.com/UserName/Example.git

Примечание. Я не прошу проверить, является ли URL-адрес синтаксически правильным, мне нужно проверить, существует ли репо в URL-адресе, указанном в bash script.

4b9b3361

Ответ 1

Как видно из этот вопрос, вы можете использовать git ls-remote, чтобы проверить ваш адрес.

Если вам нужно отладить git вызовы set GIT_TRACE=1. например:

env GIT_PROXY_COMMADN=myproxy.sh GIT_TRACE=1 git ls-remote https://...

"git ls-remote" - это самый быстрый способ, с помощью которого я могу проверить связь с удаленный репозиторий, фактически не клонируя его. Следовательно, его полезность в качестве теста для этого проблема.

Вы можете видеть, что он используется для обнаружения проблемы с адресом в "git ls-remote возвращает 128 на любое репо.

Ответ 2

Хотя ответ VonC верен, вот что я в итоге использовал:

git ls-remote будет возвращать информацию о репозитории, по умолчанию это HEAD, все ветки и теги вместе с фиксацией ID для каждой записи. например:.

$ git ls-remote git://github.com/user/repo.git
<commit id>    HEAD
<commit id>    refs/heads/example_branch
<commit id>    refs/heads/master
<commit id>    refs/tags/v1.0.2
<commit id>    refs/tags/v1.0.0

git ls-remote возвращает код 0 при успешном завершении, код ошибки 128 при ошибке.

Если репо недоступно, например, если у вас нет разрешения на просмотр репозитория или если репозиторий не существует в этом месте, git ls-remote вернет:

fatal: The remote end hung up unexpectedly

Чтобы использовать это в bash script, будет работать следующее:

git ls-remote "$SITE_REPO_URL" &>-
if [ "$?" -ne 0 ]; then
    echo "[ERROR] Unable to read from '$SITE_REPO_URL'"
    exit 1;
fi

( Примечание: &>- отключает stderr и stdout, поэтому команда ничего не выводит)