Es scheint eine gute Wahl zu sein. Der Aufwand für die „zusätzliche Arbeit“ beim Abrufen und Formatieren der Liste der Refs (an die dann gesendet wird /dev/null) sollte relativ gering sein.
Chris Johnsen
Die Antwort sollte lauten: Nein, es gibt keinen besseren Weg.
Timo
Antworten:
70
Ich denke, der git ls-remoteBefehl ist so ziemlich für diesen Zweck gemacht.
-hist eine großartige Idee. Allerdings --exit-codeist 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.
Jo Liss
3
Sie können die Ausgabe eingrenzen, indem Sie so etwas wie verwenden git ls-remote "$REPO_URL" HEAD
@Timo, dann hast du wahrscheinlich entweder einen nicht reagierenden Server oder deine Verbindung oder einen kaputten Git-Client. Beispielsweise wird der Netzwerkanschluss gefiltert. Weitere Untersuchungen ähneln dem, was passiert, wenn Ihr Ping nicht reagiert :). Sie können beispielsweise überprüfen, ob Sie eine Verbindung über netcat oder openssl s_client oder tracepath hergestellt haben .
Uhr
0
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 gitsie 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.Antworten:
Ich denke, der
git ls-remote
Befehl ist so ziemlich für diesen Zweck gemacht.quelle
Wenn Sie ein
--exit-code
Argument verwenden, können Sie das Senden von Ausgaben an überspringennull
. Es wird nur im Fehlerfall etwas zurückgegeben.Sie können
-h
argument auch verwenden, um nur Kopfverweise anzuzeigen.quelle
-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, dassgit ls-remote --exit-code "$REPO_URL"
für ein leeres Repo, das gerade erst initialisiert wurde , ein Fehler auftrittgit init
.Sie können die Ausgabe eingrenzen, indem Sie so etwas wie verwenden
git ls-remote "$REPO_URL" HEAD
quelle
TL; DR:
git ls-remote
ist der Weg, hier ist eine Shell-Ready-Funktion für den schnellen Zugriff:Verwendungszweck:
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 fragenHEAD
(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.
quelle