Wygląda na dobry wybór. Narzut związany z „dodatkową pracą” związaną z pobieraniem i formatowaniem listy referencji (która następnie jest wysyłana /dev/null) powinien być dość mały.
Chris Johnsen,
Odpowiedź powinna brzmieć: Nie, nie ma lepszego sposobu.
Timo
Odpowiedzi:
70
Wydaje mi się, że git ls-remotepolecenie jest właściwie wykonane w tym celu.
-hto świetny pomysł. Nie --exit-codejest 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.
Jo Liss
3
Możesz zawęzić wyniki, używając czegoś takiego git ls-remote "$REPO_URL" HEAD
@ Timo, prawdopodobnie masz albo niereagujący serwer, albo połączenie albo zepsuty klient git. Na przykład port sieciowy jest filtrowany. Dalsze badania są trochę podobne do tego, co dzieje się, gdy twój ping nie odpowiada :). Na przykład można spróbować sprawdzić, czy masz połączenie, które poprzez netcata lub openssl s_client lub narzÄ ™ dziem tracepath .
ony
0
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 gitwyjś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.Odpowiedzi:
Wydaje mi się, że
git ls-remote
polecenie jest właściwie wykonane w tym celu.źródło
Jeśli użyjesz
--exit-code
argumentu, możesz pominąć wysyłanie danych wyjściowych donull
. 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.źródło
-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, żegit ls-remote --exit-code "$REPO_URL"
zakończy się niepowodzeniem dla pustego repozytorium, które zostało właśnie zainicjowanegit init
.Możesz zawęzić wyniki, używając czegoś takiego
git ls-remote "$REPO_URL" HEAD
źródło
TL; DR:
git ls-remote
Oto sposób na gotowość powłoki dla szybkiego dostępu:Stosowanie:
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ą.
źródło