Кажется, это хороший выбор. Затраты на «дополнительную работу» по извлечению и форматированию списка ссылок (которые затем отправляются /dev/null) должны быть довольно небольшими.
Крис Джонсен
Ответ должен быть: нет, лучшего способа нет.
Тимо
Ответы:
70
Я думаю, что git ls-remoteкоманда в значительной степени создана для этой цели.
-hотличная идея Тем --exit-codeне менее, это не правильный выбор здесь. Страница man говорит: Выход со статусом «2», если в удаленном хранилище не найдено ни одной соответствующей ссылки. Это означает, что git ls-remote --exit-code "$REPO_URL"произойдет сбой для пустого репо, которое только что было инициализировано git init.
Джо Лисс
3
Вы можете сузить вывод, используя что-то вроде git ls-remote "$REPO_URL" HEAD
@Timo, тогда у вас, вероятно, либо не отвечает сервер, либо ваше соединение, либо не работает git-клиент. Например сетевой порт фильтруется. Дальнейшие исследования похожи на то, что происходит, когда ваш пинг не отвечает :). Например, вы можете попробовать проверить, установлено ли соединение через netcat или openssl s_client или tracepath .
оны
0
TL; DR:
git ls-remote Кстати, вот готовая оболочка функция для быстрого доступа:
## Returns errlvl 0 if $1 is a reachable git remote url
git-remote-url-reachable() {
git ls-remote "$1" CHECK_GIT_REMOTE_URL_REACHABILITY >/dev/null 2>&1
}
Использование:
if git-remote-url-reachable "$url"; then
## code
fi
Что это делает?
Это просто удобное сочетание всех комментариев / решений, ранее заявленных с некоторыми небольшими изменениями, функцией bash copy-paste ready и примером использования кода, чтобы сделать его кристально чистым. Вы заметите, что:
он ограничивает вывод как ссылка проверяется, вероятно , не существует, так как gitвсе равно будет выход с ошибкой уровня 0 на несогласующейс исх . Единственное отличие состоит в том, что в сети немного меньше выходных данных для передачи по сравнению с запрашиваемым HEAD(и гораздо меньше, чем не требующих реф или даже ограничение только головками), и это также меньше выходных данных для преобразования /dev/null(но это последний занимает ничтожно мало времени в любом случае)
проверенная ссылка дает понять, что мы проверяем существование , это может помочь, если вы хотите быть вежливым с администраторами проверяемого сервера и дать им возможность понять, почему они получают эти пробники, если они что-то отслеживают.
/dev/null
) должны быть довольно небольшими.Ответы:
Я думаю, что
git ls-remote
команда в значительной степени создана для этой цели.источник
Если вы используете
--exit-code
аргумент, вы можете пропустить отправку выводаnull
. Он вернет что-то только в случае ошибки.Кроме того, вы можете использовать
-h
аргумент, чтобы показать только ссылки на головы.источник
-h
отличная идея Тем--exit-code
не менее, это не правильный выбор здесь. Страница man говорит: Выход со статусом «2», если в удаленном хранилище не найдено ни одной соответствующей ссылки. Это означает, чтоgit ls-remote --exit-code "$REPO_URL"
произойдет сбой для пустого репо, которое только что было инициализированоgit init
.Вы можете сузить вывод, используя что-то вроде
git ls-remote "$REPO_URL" HEAD
источник
TL; DR:
git ls-remote
Кстати, вот готовая оболочка функция для быстрого доступа:Использование:
Что это делает?
Это просто удобное сочетание всех комментариев / решений, ранее заявленных с некоторыми небольшими изменениями, функцией bash copy-paste ready и примером использования кода, чтобы сделать его кристально чистым. Вы заметите, что:
он ограничивает вывод как ссылка проверяется, вероятно , не существует, так как
git
все равно будет выход с ошибкой уровня 0 на несогласующейс исх . Единственное отличие состоит в том, что в сети немного меньше выходных данных для передачи по сравнению с запрашиваемымHEAD
(и гораздо меньше, чем не требующих реф или даже ограничение только головками), и это также меньше выходных данных для преобразования/dev/null
(но это последний занимает ничтожно мало времени в любом случае)проверенная ссылка дает понять, что мы проверяем существование , это может помочь, если вы хотите быть вежливым с администраторами проверяемого сервера и дать им возможность понять, почему они получают эти пробники, если они что-то отслеживают.
источник