Например,

git@github.com:JohnCoates/Aerial.git

в этой команде я думаю

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

,

Итак, что же такое :JohnCoates? Обычно это будет номер порта, но JohnCoates не похож на номер порта.

PS Я нашел этот ответ, и, прочитав это, JohnCoates выглядит как часть каталога. Но почему нет / https://stackoverflow.com/questions/5279624/whats-the-purpose-of-the-colon-in-this-git-repository-url

1 ответ1

0

Вы не смотрите здесь 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .