Antworten:
Ich denke, der git ls-remote
Befehl ist so ziemlich für diesen Zweck gemacht.
Wenn Sie ein --exit-code
Argument verwenden, können Sie das Senden von Ausgaben an überspringen null
. Es wird nur im Fehlerfall etwas zurückgegeben.
Sie können -h
argument auch verwenden, um nur Kopfverweise anzuzeigen.
git ls-remote --exit-code -h "$REPO_URL"
-h
ist eine großartige Idee. Allerdings --exit-code
ist hier nicht die richtige Wahl. Die Manpage sagt: Beenden Sie mit dem Status "2", wenn keine übereinstimmenden Referenzen im Remote-Repository gefunden werden. Dies bedeutet, dass git ls-remote --exit-code "$REPO_URL"
für ein leeres Repo, das gerade erst initialisiert wurde , ein Fehler auftritt git init
.
Sie können die Ausgabe eingrenzen, indem Sie so etwas wie verwenden git ls-remote "$REPO_URL" HEAD
TL; DR:
git ls-remote
ist der Weg, hier ist eine Shell-Ready-Funktion für den schnellen Zugriff:
## 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
}
Verwendungszweck:
if git-remote-url-reachable "$url"; then
## code
fi
Was macht es ?
Dies ist nur eine praktische Zusammenfassung aller zuvor genannten Kommentare / Lösungen mit einigen kleinen Änderungen, einer Bash-Copy-Paste-Ready-Funktion und einem Verwendungscode-Beispiel, um es kristallklar zu machen. Sie werden feststellen, dass:
es begrenzt die Ausgabe, da die überprüfte Referenz wahrscheinlich nicht vorhanden ist, da git
sie bei nicht übereinstimmender Referenz immer noch mit der Fehlerstufe 0 beendet wird . Der einzige Unterschied ist , dass es etwas weniger ausgegeben wird auf dem Netzwerk zu übertragen , im Vergleich zu fragen HEAD
(und viel weniger als nicht für einen Schiedsrichter fragen , oder sogar nur Köpfe Begrenzung), und dies ist auch weniger Leistung in werfen /dev/null
(aber die letzte dauert sowieso vernachlässigbar lange)
Die überprüfte Referenz macht deutlich, dass wir nach dem Vorhandensein suchen . Dies kann hilfreich sein, wenn Sie höflich mit den Administratoren des zu prüfenden Servers umgehen möchten und ihnen die Möglichkeit geben, zu verstehen, warum sie diese Tests erhalten, wenn sie etwas überwachen.
/dev/null
) sollte relativ gering sein.