Herausfinden der Git-Version auf dem Remote-Server

Lesezeit: 4 Minuten

Ich suche auf meinem lokalen Computer nach dem Git-Befehl, den ich ausführen kann, um die Version von Git herauszufinden, die auf dem Remote-Server ausgeführt wird. Sofern dies überhaupt möglich ist.

  • Interessante Frage. Warum willst du das tun?

    – Noufal Ibrahim

    4. November 2014 um 15:29 Uhr

  • Ich bin gespannt, ob mein Provider hält, was er mir versprochen hat 🙂

    – Rudimentär

    4. November 2014 um 15:30 Uhr

  • Wenn Sie ein Shell-Konto haben, können Sie sich per ssh einloggen und nachsehen, was dort läuft. Ist das möglich? Ansonsten kann ich mir ein Heath-Robinson-Setup vorstellen, bei dem Sie etwas in einen Hook stecken, der die Version von git ausgibt.

    – Noufal Ibrahim

    4. November 2014 um 16:11 Uhr

  • Ich dachte eher an einen Standard-Git-Befehl, der die Fernbedienung nach ihrer Version fragt. Ich denke, es muss dies irgendwie tun, um die Protokollversion für Pull and Clone auszuhandeln.

    – Rudimentär

    4. November 2014 um 16:14 Uhr

Benutzer-Avatar
Eduard Thomson

Moderne Git-Server (ab git 1.7.12.1) geben ihre Versionsinformationen in der zurück Fähigkeiten Verhandlung im Protokoll. Obwohl es richtig ist, dass es keinen Git-Befehl gibt, den Sie lokal ausführen können, können Sie einfach den Git-Server nach den Informationen fragen, und eine neuere Version liefert die Versionsnummer.

Sie finden diese Informationen über HTTPS oder SSH.

HTTPS

Sie können einen Web-Client verwenden, um Folgendes anzufordern:

<repository url>/info/refs?service=git-upload-pack

Und untersuchen Sie die erste Zeile für die agent= Bericht.

Zum Beispiel gegen CodePlex:

% curl https://git01.codeplex.com/gittf/info/refs\?service=git-upload-pack
000000bd43569b9f6f29136b6544809eacd2417a308f9341 HEAD\0multi_ack thin-pack
side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed
no-done agent=git/1.8.4.msysgit.0

Was darauf hinweist, dass CodePlex Git für Windows 1.8.4 verwendet (git/1.8.4.msysgit.0).

Oder gegen GitHub:

% curl https://github.com/libgit2/libgit2.git/info/refs\?service=git-upload-pack
000000f83f8d005a82b39c504220d65b6a6aa696c3b1a9c4 HEAD\0multi_ack
thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag
multi_ack_detailed no-done symref=HEAD:refs/heads/master
agent=git/2:2.1.1~peff-bare-reflogs-fetch-616-gc016f98
... ref information removed ...

Zeigt an, dass GitHub eine benutzerdefinierte Git-Version verwendet: git/2:2.1.1~peff-bare-reflogs-fetch-616-gc016f98.

SSH

SSH-Remotes rufen die git-upload-pack Prozess auf dem Remote-Server, um zu kommunizieren. Sie können in Ihre Fernbedienung ssh und diesen Prozess ausführen. Wie im HTTPS-Beispiel enthält die erste Zeile die Capabilities. Im Gegensatz zum HTTPS-Beispiel wird von Ihnen erwartet, dass Sie eine interaktive Verhandlung darüber durchführen, was Sie abzurufen versuchen, also müssen Sie der Gegenstelle mitteilen, dass Sie nicht kommunizieren möchten.

Als Teil des Git-Protokolls bedeutet dies, dass Sie die Länge des Befehls schreiben müssen, gefolgt vom Befehl selbst (in diesem Fall done) und einen Zeilenumbruch. Das sind 9 Bytes (vier Bytes für die Länge, vier Bytes für den Befehl und ein Byte für den Zeilenumbruch). Die Anweisung, die Sie der Fernbedienung geben, lautet also 0009done\n.

echo '0009done' |  ssh <host> git-upload-pack <repository> | head -1

Um diese Informationen beispielsweise zu erhalten, z ssh://[email protected]/libgit2/libgit2 auch bekannt [email protected]:libgit2/libgit2:

echo '0009done' |  ssh [email protected] git-upload-pack /libgit2/libgit2 | head -1
014c13502d9e7f6c51a5f93ea39e14db707d382dc996 HEADmulti_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want symref=HEAD:refs/heads/main filter object-format=sha1 agent=git/github-g54d96f1f66a0

Zeigt an, dass die aktuelle Version von git dienen meine github.com Anfrage ist git/github-g54d96f1f66a0was darauf hinweist, dass es sich um einen Entwicklungs-Build aus Commit handelt 54d96f1f66a0was darauf hindeutet, dass sie eine Änderung in der Produktion testen.

  • Das ist sehr interessant. +1.

    – Noufal Ibrahim

    4. November 2014 um 18:38 Uhr

  • Nicht so einfach wie ich dachte, aber immer noch eine gültige Lösung. Wäre schön, wenn es einen Git-Befehl geben würde, um Informationen über das Remote-Backend zu erhalten.

    – Rudimentär

    5. November 2014 um 9:36 Uhr

  • @CivFan nein, /info/refs ist immer noch Stand der Technik

    – Eduard Thomson

    27. Juli 2020 um 20:41 Uhr

  • Wie würde man das mit der Authentifizierung machen (mit der SSH-Fernbedienung anstelle der HTTPS-Fernbedienung)?

    – JellicleCat

    11. Februar 2021 um 2:00 Uhr

  • JellicleCat und @Alex – Ich habe Informationen über SSH hinzugefügt.

    – Eduard Thomson

    2. Mai um 15:17 Uhr

Ähnlich wie von Edward Thomson vorgeschlagen, können Sie auch verwenden Umgebungs-Debugging-Variablen:

GIT_TRACE_PACKET=true git ls-remote --heads https://github.com/libgit2/libgit2.git |& grep agent
12:31:40.317199 pkt-line.c:80           packet:          git< f92d495d44bff2bdb6fd99524a93986ea268c9e8 HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed no-done symref=HEAD:refs/heads/master agent=git/github-g956b612bf136

Und wieder sieht es so aus, als würde GitHub einen benutzerdefinierten Build von Git verwenden: agent=git/github-g956b612bf136.

1225280cookie-checkHerausfinden der Git-Version auf dem Remote-Server

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy