Sie suchen nicht in einer URL hier - Sie bei einem rsh / rcp-style - Adresse suchen, ähnlich dem, was noch wird von verwendet werden scp
und in rsync
diesen 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 git
in git@...
um einen Unix-Benutzernamen auf dem Server und github.com
um 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 -p
bei Bedarf eine separate Befehlszeilenoption, um es zu ändern.)
Das ganze JohnCoates/Aerial.git
ist 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äuftls Projects
die gleiche ist wiels /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 Klonenfred@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.git
wie 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