Was bedeutet der Name nach dem Doppelpunkt in der ssh-Adresse von GItHub?

781
Hidehiro NAGAOKA

Zum Beispiel,

git@github.com:JohnCoates/Aerial.git 

in diesem Befehl denke ich

git: username in GitHub Unix server github.com: host name /Aerial.git: directory 

.

Was ist also :JohnCoates? Im Allgemeinen gibt es eine Portnummer, die jedoch JohnCoatesnicht wie eine Portnummer aussieht.

PS Ich fand diese Antwort und durch das Lesen JohnCoatessieht es aus wie der Teil des Verzeichnisses. Aber warum ist es nicht da /? https://stackoverflow.com/questions/5279624/whats-the-purpose-of-the-colon-in-this-git-repository-url

0

1 Antwort auf die Frage

0
grawity

Sie suchen nicht in einer URL hier - Sie bei einem rsh / rcp-style - Adresse suchen, ähnlich dem, was noch wird von verwendet werden scpund in rsyncdiesen Tagen. Die rsh-Syntax unterscheidet sich also von URLs: Alles hinter dem Doppelpunkt ist der Verzeichnispfad, und die Portspezifikation ist nicht vorgesehen.

Sie sind immer noch richtig, dass es sich bei dem gitin git@...um einen Unix-Benutzernamen auf dem Server und github.comum den Hostnamen handelt. Ich denke, das ist wahrscheinlich etwas, das URLs von Adressen im Rsh-Stil geerbt haben .

(Das ursprüngliche rsh hatte heutzutage ein ungewöhnliches Sicherheitsmodell und erlaubte nicht die Verwendung eines anderen Ports; ssh verwendet -pbei Bedarf eine separate Befehlszeilenoption, um es zu ändern.)

Das ganze JohnCoates/Aerial.gitist also ein Verzeichnispfad. Warum fängt es nicht mit a an /? Zunächst einmal, weil dies keine Adresse im URL-Format ist und :als Feldtrennzeichen verwendet wird. Zweitens, weil der Server den führenden Schrägstrich in Pfaden nicht benötigt.

  • Auf einfachen Unix-SSH-Servern:

    Der Pfad muss nicht mit beginnen, /wenn er relativ zum aktuellen Verzeichnis ist. In Git-Adressen bedeutet dies, dass es relativ zum Heimatverzeichnis des Benutzers ist .

    Da RSH / SSH für die Anmeldung an einem Systemkonto gedacht sind, haben sie ein Konzept des "Home-Verzeichnisses", genau wie lokale Anmeldungen. Wenn Sie in das System einloggen, Ihre Befehle zu starten /home/UserName(bis Sie cd anderswo), so läuft ls Projectsdie gleiche ist wie ls /home/UserName/Projects.

    Alle Software, die SSH-Transport verwendet, einschließlich SFTP, Git und Rsync, kann diese Funktion ebenfalls verwenden. Wenn Sie beispielsweise versucht haben, von einem einfachen SSH-Server mit der Adresse zu klonen fred@example.com:Projects/App.git, entspricht dies dem Klonen fred@example.com:/home/fred/Projects/App.git.

    (Wie Sie sehen, beginnen absolute Pfade mit einem /-, aber sie werden immer noch mit einer :in rcp-Adresse getrennt.)

  • Auf GitHub, GitLab und anderen benutzerdefinierten Systemen:

    GitHub führt ein benutzerdefiniertes git aus, das Repository-Namen nicht direkt Dateisystempfaden zuordnet. Stattdessen wird der empfangene Pfad manuell anhand eines regulären Ausdrucks wie analysiert ^/?(.+)/(.+)\.git$und das Ergebnis in einer SQL-Datenbank nachgeschlagen.

    Ein GitHub "path" ist also eigentlich nur eine benutzerdefinierte Zeichenfolge, die nicht den üblichen Pfadregeln folgen muss. Als ein Beispiel dafür akzeptiert GitHub Pfade sowohl mit als auch ohne den führenden Schrägstrich, wie Sie in den folgenden URL-Beispielen sehen werden.


Davon abgesehen unterstützt Git auch URL-Adressen. Ihr Beispiel kann auch geschrieben werden als:

ssh://git@github.com/JohnCoates/Aerial.git 

Nun ist der Pfad /JohnCoates/Aerial.gitwie erwartet (in URLs ist er immer absolut).

Beachten Sie, dass der Pfad zwar anders ist, aber GitHub akzeptiert diesen Pfad auf dieselbe Weise - ein Unix-Standardserver dagegen nicht. (Es würde erfordert den vollständigen Pfad, mit Home - Verzeichnis angegeben werden.) Zu meinem früheren Beispiel weiter:

fred@example.com:/home/fred/Projects/App.git ↓ ssh://fred@example.com/home/fred/Projects/App.git