Вы не смотрите здесь URL-адрес - вы смотрите адрес в стиле rsh/rcp, похожий на тот, который все еще используется scp и rsync наши дни. Таким образом, синтаксис rsh отличается от URL-адресов: все, что находится после двоеточия, является путем к каталогу, и нет никаких условий для спецификации порта.
Вы по-прежнему правы, что git в git@... - это имя пользователя Unix на сервере, а github.com - это имя хоста. Я думаю, что это, вероятно, то, что URL-адреса унаследованы от адресов в стиле rsh.
(Оригинальный rsh имел необычную модель безопасности в наши дни и не позволял использовать другой порт; ssh использует отдельный параметр командной строки -p чтобы изменить его при необходимости.)
Таким образом, весь JohnCoates/Aerial.git является путем к каталогу. Почему это не начинается с /? Прежде всего, еще раз, потому что это не адрес в формате URL, а используется : в качестве разделителя полей. Во-вторых, потому что сервер не требует косой черты в путях.
На простых серверах Unix SSH:
Путь не должен начинаться с / когда он относительно текущего каталога. В Git-адресах это означает, что он относится к домашнему каталогу пользователя.
Поскольку RSH/SSH предназначены для входа в системную учетную запись, они имеют понятие "домашний каталог", точно так же, как и локальные учетные записи. Когда вы входите в систему, ваши команды начинаются с /home/UserName (до тех пор, пока вы не перейдете в другое место), поэтому запуск ls Projects аналогичен ls /home/UserName/Projects .
Все программы, которые используют SSH транспорт - включая SFTP, Git и Rsync - также могут использовать эту функцию. Например, если вы пытались клонировать с простого SSH-сервера, используя адрес fred@example.com:Projects/App.git , это аналогично клонированию fred@example.com:/home/fred/Projects/App.git ,
(Как вы можете видеть, абсолютные пути начинаются с / -, но они по- прежнему разделяются с помощью адресов : in rcp.)
На GitHub, GitLab и других пользовательских системах:
GitHub запускает пользовательский git, который напрямую не отображает имена репозитория в пути файловой системы. Вместо этого он вручную анализирует полученный путь по отношению к регулярному выражению, такому как ^/?(.+)/(.+)\.git$ и ищет результат в базе данных SQL.
Таким образом, "путь" GitHub - это на самом деле просто пользовательская строка, которая не должна следовать ни одному из обычных правил пути. Как один из примеров этого, GitHub принимает пути как с косой чертой, так и без нее, как вы увидите в примерах URL ниже.
При этом Git также поддерживает адреса в стиле URL. Ваш пример также может быть записан как:
ssh://git@github.com/JohnCoates/Aerial.git
Теперь путь будет /JohnCoates/Aerial.git как и следовало ожидать (в URL-адресах он всегда абсолютен).
Обратите внимание, что хотя путь другой, GitHub по-прежнему принимает его таким же образом, но стандартный сервер Unix не будет. (Для этого потребуется указать полный путь с домашним каталогом.) Чтобы продолжить мой предыдущий пример:
fred@example.com:/home/fred/Projects/App.git
↓
ssh://fred@example.com/home/fred/Projects/App.git