git+;ssh是指像git+;ssh://git@github.com/xxx.git

git+;ssh是指像git+;ssh://git@github.com/xxx.git,git,github,npm,package.json,Git,Github,Npm,Package.json,我看到一个npm repo,它在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、file(请参阅) npm的创建者决定将此信息放在协议名称中

我看到一个npm repo,它在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、file(请参阅)

npm的创建者决定将此信息放在协议名称中,用
+
符号分隔信息,使其更具示意性。因此,当
npm install
迭代您的依赖项并看到带有
git+ssh
的依赖项时,它知道它将通过
ssh
连接到repo,然后使用本地
git
二进制文件在本地签出项目文件

我猜他们也可以将协议命名为
gitwithsh
,如
gitwithssh://git@github.com/xxx.git
但是
git+ssh
看起来更简洁,逻辑上更独立,因此更容易通过正则表达式进行解析

以下是npm源代码中实际负责将协议信息分为
类型
(=
git
)和实际协议(例如
ssh
)的部分:

我只使用git@github.com/xxx.git

不能使用此格式将包注册为npm的依赖项。尝试执行
npmigit@github.com/xxx.git
–它不会工作。此格式只能通过
git clone
使用


但是,在使用ssh协议作为前缀时,可以使用此格式:
ssh://git@github.com/xxx.git
。这实际上是npm在幕后使用的“git+ssh”的“规范化”形式(另请参见如何转换您的
git)+ssh://...
进入
ssh://git@从NPM的角度来看,这类似于任何其他远程设置。许多依赖关系管理器支持通过SSH使用Git。在幕后,这将驱动Git通过SSH进行连接。最终结果是NPM克隆存储库并将其安装到您的
node\u modules
目录中


当Git与远程存储库通信时,它会使用SSH启动两个程序之一:Git upload pack
或Git receive pack
。存储库作为这些命令的一个选项提供。SSH是一种隧道机制,使用
pkt-line
协议向这些远程程序发出命令。有关该协议的更多详细信息可以在中找到。

当我意识到我的问题与npm有关时,我发现其中描述了可用于从git远程URL安装软件包的协议。希望能有所帮助。