GItHub ssh 地址中冒号后面的名字是什么意思?

GItHub ssh 地址中冒号后面的名字是什么意思?

例如,

[email protected]: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

您在这里看到的不是 URL,而是 rsh/rcp 样式的地址,类似于现在仍在使用的地址scprsync因此,rsh 语法与 URL 不同:冒号后面的所有内容都是目录路径,并且没有对端口规范作出规定。

您仍然正确,gitingit@...是服务器上的 Unix 用户名,github.com是主机名。我认为这可能是 URL 继承的rsh 样式的地址。

(原始 rsh 具有当今不常见的安全模型,不允许使用不同的端口;ssh 使用单独的命令行选项-p在需要时进行更改。)

因此整个JohnCoates/Aerial.git是目录路径。为什么它不以 开头/?首先,再次强调,因为这不是 URL 格式的地址,而是用作:字段分隔符。其次,因为服务器不需要在路径中使用前导斜杠。

  • 在普通的 Unix SSH 服务器上:

    路径不需要/相对的到当前目录。在 Git 地址中,这意味着它相对于用户的目录。

    由于 RSH/SSH 是用于登录系统帐户,它们有一个“主目录”的概念,就像本地登录一样。当您登录系统时,您的命令从 开始/home/UserName(直到您 cd 到其他地方),因此运行ls Projects与 相同ls /home/UserName/Projects

    所有使用 SSH 传输的软件(包括 SFTP、Git 和 Rsync)也可以使用此功能。例如,如果您尝试使用地址从简单的 SSH 服务器克隆,则[email protected]:Projects/App.git这与克隆相同[email protected]:/home/fred/Projects/App.git

    (如您所见,绝对路径确实以/– 开头,但它们是仍然使用 rcp 地址中的 a 分隔:。)

  • 在 GitHub、GitLab 和其他自定义系统上:

    GitHub 运行自定义 git,它不会直接将存储库名称映射到文件系统路径。相反,它会根据正则表达式手动解析收到的路径,^/?(.+)/(.+)\.git$然后在 SQL 数据库中查找结果。

    因此,GitHub 的“路径”实际上只是一个自定义字符串,不需要遵循任何常规路径规则。举个例子,GitHub 接受以下路径:没有前导斜杠,正如您在下面的 URL 示例中看到的那样。


话虽如此,Git支持 URL 样式的地址。您的示例也可以写成:

ssh://[email protected]/JohnCoates/Aerial.git

现在路径/JohnCoates/Aerial.git正如您所期望的(在 URL 中它始终是绝对的)。

请注意,尽管路径不同,GitHub 仍然以相同的方式接受它 - 但标准 Unix 服务器不会。(它会要求要指定的完整路径,包括主目录。)继续我之前的例子:

[email protected]:/home/fred/Projects/App.git
ssh://[email protected]/home/fred/Projects/App.git

相关内容