Как проверить действительность URL удаленного репозитория git? - PullRequest
43 голосов
/ 08 марта 2012

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

Протоколы, которые должны поддерживаться: git@, https:// и git://. Сбой Curl в протоколе git://.

git@github.com:UserName/Example.git
https://UserName@github.com/UserName/Example.git
git://github.com/UserName/Example.git

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

Ответы [ 2 ]

39 голосов
/ 08 марта 2012

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

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

$ 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, будет работать следующее ...

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

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

37 голосов
/ 08 марта 2012

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...