git+ssh 在像 git+ssh://git@github.com/xxx.git 这样的 npm 回购路径中意味着什么
What does git+ssh mean in an npm repo path like git+ssh://git@github.com/xxx.git
我看到一个 npm 存储库,在 package.json 中被称为 git+ssh://git@github.com/xxx.git
。我知道这是 ssh 协议,但我不知道 git+ssh 在克隆 repo 时的作用,我只使用 git@github.com/xxx.git
。我四处搜索,但找不到任何结果。
当通过 git 托管 npm 包时,npm 还需要知道使用哪种传输协议将包文件从 repo 传输到客户端。为此,存在以下选项:ssh、https、http、文件(参见 https://docs.npmjs.com/cli/install)。
npm 的创建者决定将此信息放在协议名称中,用 +
符号分隔信息,使其更加示意性。因此,当 npm install
遍历您的依赖项并看到与 git+ssh
的依赖项时,它知道它将通过 ssh
连接到 repo,然后使用您的本地 git
二进制文件来检查本地项目文件。
我想他们也可以将协议命名为 gitwithssh
,就像 gitwithssh://git@github.com/xxx.git
中那样,但是 git+ssh
看起来更简洁并且逻辑上分离,因此更容易通过正则表达式进行解析。
这是 npm 源代码中实际负责将协议信息拆分为 type
(=git
)和实际协议(例如 ssh
)的部分: https://github.com/npm/npm-package-arg/blob/v7.0.0/npa.js#L221
I only use git@github.com/xxx.git.
您不能使用此格式将包注册为 npm 的依赖项。尝试执行 npm i git@github.com/xxx.git
– 它不会起作用。这种格式只能用于例如通过 git clone
.
但是,您可以在使用 ssh 协议作为前缀时使用此格式:ssh://git@github.com/xxx.git
。这实际上是 npm 在幕后使用的 "git+ssh" 的 "normalized" 形式(另请参阅 https://github.com/npm/normalize-git-url 如何将您的 git+ssh://...
转换为 ssh://git@...
)。
从 NPM 的角度来看,这类似于任何其他远程设置。许多依赖项管理器支持通过 SSH 使用 Git。在幕后,这会驱动 Git 通过 SSH 连接。最终结果是 NPM 克隆存储库并将其安装到您的 node_modules
目录中。
当 Git 与远程存储库通信时,它会使用 SSH 启动两个程序之一:git-upload-pack
或 git-receive-pack
。存储库作为这些命令的选项提供。 SSH 是一种隧道机制,使用 pkt-line
协议向这些远程程序发出命令。有关该协议的更多详细信息,请参阅 Git source.
我看到一个 npm 存储库,在 package.json 中被称为 git+ssh://git@github.com/xxx.git
。我知道这是 ssh 协议,但我不知道 git+ssh 在克隆 repo 时的作用,我只使用 git@github.com/xxx.git
。我四处搜索,但找不到任何结果。
当通过 git 托管 npm 包时,npm 还需要知道使用哪种传输协议将包文件从 repo 传输到客户端。为此,存在以下选项:ssh、https、http、文件(参见 https://docs.npmjs.com/cli/install)。
npm 的创建者决定将此信息放在协议名称中,用 +
符号分隔信息,使其更加示意性。因此,当 npm install
遍历您的依赖项并看到与 git+ssh
的依赖项时,它知道它将通过 ssh
连接到 repo,然后使用您的本地 git
二进制文件来检查本地项目文件。
我想他们也可以将协议命名为 gitwithssh
,就像 gitwithssh://git@github.com/xxx.git
中那样,但是 git+ssh
看起来更简洁并且逻辑上分离,因此更容易通过正则表达式进行解析。
这是 npm 源代码中实际负责将协议信息拆分为 type
(=git
)和实际协议(例如 ssh
)的部分: https://github.com/npm/npm-package-arg/blob/v7.0.0/npa.js#L221
I only use git@github.com/xxx.git.
您不能使用此格式将包注册为 npm 的依赖项。尝试执行 npm i git@github.com/xxx.git
– 它不会起作用。这种格式只能用于例如通过 git clone
.
但是,您可以在使用 ssh 协议作为前缀时使用此格式:ssh://git@github.com/xxx.git
。这实际上是 npm 在幕后使用的 "git+ssh" 的 "normalized" 形式(另请参阅 https://github.com/npm/normalize-git-url 如何将您的 git+ssh://...
转换为 ssh://git@...
)。
从 NPM 的角度来看,这类似于任何其他远程设置。许多依赖项管理器支持通过 SSH 使用 Git。在幕后,这会驱动 Git 通过 SSH 连接。最终结果是 NPM 克隆存储库并将其安装到您的 node_modules
目录中。
当 Git 与远程存储库通信时,它会使用 SSH 启动两个程序之一:git-upload-pack
或 git-receive-pack
。存储库作为这些命令的选项提供。 SSH 是一种隧道机制,使用 pkt-line
协议向这些远程程序发出命令。有关该协议的更多详细信息,请参阅 Git source.