Odpowiedzi:
Wydaje mi się, że git ls-remote
polecenie jest właściwie wykonane w tym celu.
Jeśli użyjesz --exit-code
argumentu, możesz pominąć wysyłanie danych wyjściowych do null
. Zwróci coś tylko w przypadku błędu.
Możesz także użyć -h
argumentu, aby wyświetlić tylko odniesienia do nagłówków.
git ls-remote --exit-code -h "$REPO_URL"
-h
to świetny pomysł. Nie --exit-code
jest to jednak właściwy wybór. Strona podręcznika mówi: Wyjdź ze statusem „2”, gdy w zdalnym repozytorium nie znaleziono pasujących odnośników. Oznacza to, że git ls-remote --exit-code "$REPO_URL"
zakończy się niepowodzeniem dla pustego repozytorium, które zostało właśnie zainicjowane git init
.
Możesz zawęzić wyniki, używając czegoś takiego git ls-remote "$REPO_URL" HEAD
TL; DR:
git ls-remote
Oto sposób na gotowość powłoki dla szybkiego dostępu:
## 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
}
Stosowanie:
if git-remote-url-reachable "$url"; then
## code
fi
Co to robi ?
Jest to po prostu wygodne połączenie wszystkich wcześniejszych komentarzy / rozwiązań z kilkoma drobnymi poprawkami, funkcja gotowa do kopiowania i wklejania bash oraz przykładowy kod użytkowy, aby był krystalicznie czysty. Zauważysz, że:
ogranicza dane wyjściowe, ponieważ sprawdzone odwołanie prawdopodobnie nie istnieje, podobnie jak git
wyjście z poziomu błędu 0 przy niepasującym oznaczeniu . Jedyna różnica polega na tym, że w sieci jest nieco mniej danych do przesłania w porównaniu z prośbą HEAD
(i znacznie mniej niż bez prośby o referencję lub nawet ograniczenie tylko do głów), a to także mniej mocy do oddania /dev/null
(ale to ostatni i tak zajmuje mało czasu)
sprawdzona referencja wyjaśnia, że sprawdzamy istnienie , może to pomóc, jeśli chcesz być uprzejmy wobec administratorów serwera, który sondujesz, i dać im szansę zrozumienia, dlaczego otrzymali te sondy, jeśli coś monitorują.
/dev/null
) powinien być dość mały.