我们正在将GitLab用于我们的私人项目。有一些来自github的分叉库,我们想要安装为npm模块。直接从npm安装该模块是可以的,例如:
npm install git://github.com/FredyC/grunt-stylus-sprite.git
...也正常工作,但对GitLab做同样的事情,只是更改域名就会给我带来这个错误。
npm WARN `git config --get remote.origin.url` returned wrong result (git://git.domain.com/library/grunt-stylus-sprite.git)
npm ERR! git clone git://git.domain.com/library/grunt-stylus-sprite.git Cloning into bare repository 'D:\users\Fredy\AppData\Roaming\npm-cache\_git-remotes\git-git-domain-com-library-grunt-stylus-sprite-git-6f33bc59'...
npm ERR! git clone git://git.domain.com/library/grunt-stylus-sprite.git fatal:unable to connect to git.domain.com:
npm ERR! git clone git://git.domain.com/library/grunt-stylus-sprite.git git.domain.com[0: 77.93.195.214]: errno=No error
npm ERR! Error: Command failed: Cloning into bare repository 'D:\users\Fredy\App
Data\Roaming\npm-cache\_git-remotes\git-git-domain-com-library-grunt-stylus-spr
ite-git-6f33bc59'...
npm ERR! fatal: unable to connect to git.domain.com:
npm ERR! git.domain.com[0: xx.xx.xx.xx]: errno=No error
从GitLab的网页界面,我有这个网址
git@git.domain.com:library/grunt-stylus-sprite.git
。针对npm install
运行此操作,它会尝试从npm registry安装git
模块。
然而,使用网址:git+ssh@git.domain.com:library/grunt-stylus-sprite.git
突然要求我输入密码。我的SSH密钥不包含密码,因此我认为它无法加载该密钥。也许我错过了一些配置?密钥位于我的主目录中的标准位置,名称为"id_rsa"
。
我使用的是Windows 7 x64。
更新
由于NPM v3,内置支持GitLab和其他来源(BitBucket,Gist),您可以从中安装软件包。不幸的是,它仅适用于公共场所,因此它并不完全与此相关,但有些人可能觉得它很有用。
npm install gitlab:<gitlabname>/<gitlabrepo>[#<commit-ish>]
查看文档:{{3}}
答案 0 :(得分:109)
您可以使用以下方法连接到私有gitlab存储库
使用SSH
git+ssh://git@git.mydomain.com:Username/Repository#{branch|tag}
git+ssh://git@git.mydomain.com/Username/Repository#{branch|tag}
使用HTTPS
git+https://git@git.mydomain.com/Username/Repository#{branch|tag}
使用HTTPS和部署令牌
git+https://<token-name>:<token>@gitlab.com/Username/Repository#{branch|tag}
答案 1 :(得分:19)
而不是git://
,使用git+ssh://
和npm应该做正确的事。
答案 2 :(得分:10)
<强>更新强>
正如@felix在评论中提到的(感谢@felix)使用deploy token
与在gitlab
上阅读私人注册表更相关。这种方式是令牌被泄露,攻击者只能读取该存储库而无法进行更改。
GitLab
帐户。Expand
。read_repository
旧答案
转到User Settings > Access Tokens
并使用access token
权限创建新的read_registry
。
复制已生成的token
,我们需要package.json
文件。
现在在package.json
添加dependency
,如下所示:
"my-module": "git+https://Xaqron:token@gitlab.com/Xaqron/my-module"
将Xaqron
替换为您的用户名,将token
替换为生成的令牌。您可以在branch
的网址末尾指定tag
和#{branch|tag}
。
注意:由于访问令牌位于package.json
,任何有权访问此项目的人都可以读取存储库,因此我认为您的项目本身就是私有的。
答案 3 :(得分:6)
对于偶然发现这一点的其他人来说,我根本无法通过HTTPS工作 - 似乎它不支持直接链接到repo(例如https://git.domain.com/user/somerepo.git
),也不支持它是否支持.tar
,.tar.bz
或.zip
存档版本。
它似乎只适用于.tar.gz
存档。
完整示例(带标记版本):
https://git.domain.com/user/somerepo/repository/archive.tar.gz?ref=v1.2.3
答案 4 :(得分:6)
虽然问题是关于Gitlab,但这个问题在谷歌搜索中排名很高,所以这里有一些关于如何解决我在Github上遇到的类似问题的更多信息。
对我来说,只更改网址并没有让它发挥作用。以下是我必须采取的步骤来解决这个问题:
redirect_category:
path: /112-redirect-this
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: products_in_categories
slug: to-this
permanent: true
git+ssh://git@github.com:owner/repo.git#master
创建文件,如果它不存在)强制使用DeployKey而不是默认的ssh密钥之后,npm安装工作正常。所有其他选项和解决方案都是由npm安装破坏产生的
答案 5 :(得分:3)
据我所知,git://
协议可以告诉你哪里出错了。 GitLab仅支持克隆的HTTP(s)和SSH。因此,您必须使用其中一种方法而不是git协议。
答案 6 :(得分:2)
对于私人gitlab.com回购来说,没有其他答案适用于我......
但这有效:
npm i -S git+ssh://git@gitlab.com:<org>/<project>.git
它只是来自项目页面的“clone”输入字段的git ssh clone url,其中git+ssh://
被添加到它的前面。
答案 7 :(得分:1)
Gitlab现在有一个软件包注册表,可以在其中构建,部署和托管npm软件包。使用私有存储库,可以提供对存储库内容和软件包的细粒度访问控制。
可以通过在.npmrc
旁边添加一个package.json
文件来从私有Gitlab存储库中安装NPM软件包。更多信息here。
尽管在同一代码库中为多个存储库使用多个部署令牌时会变得很复杂。
使用Gitlab,可以直接通过 HTTPS访问包.tgz
文件并部署令牌。只需像这样添加项目依赖项:
"@foo/bar": "https://<username>:<token>@gitlab.com/api/v4/projects/<project-id>/packages/npm/@foo/bar/-/@foo/bar-1.0.0.tgz"
URL中两次出现@ foo / bar。 @foo是项目范围,bar是模块名称,而1.0.0是模块名称。 project-id (8位数字)是Gitlab项目ID,可以在项目页面的名称下看到它。甚至可以从模块名称中省略@foo(但不能省略链接)。
使用具有相同范围和不同部署令牌的多个模块可以安全地管理私有存储库。
同样,部署令牌可能只能访问package registry
,这意味着最终用户将无法从存储库访问完整的源代码。
答案 8 :(得分:0)
此解决方案仅适用于 yarn
,不适用于 npm
,但是...
如果您需要在既没有 git
也没有 ssh
可执行文件的环境中安装依赖项(例如在 docker 中),您可以使用 repo access key with read API access 创建一个 tarball 链接,然后引用像这样:
package.json
{
"dependencies": {
"your-lib-name": "https://gitlab.com/api/v4/projects/1234567/repository/archive?private_token=ABC_123asdfg&sha=abcdef0123456789abcdef0123456789abcdef01",
地点:
1234567
是您的项目 ID,可以在它的 gitlab 项目概述页面上看到。ABC_123asdfg
是您创建的具有 API 读取权限的项目访问密钥abcdef0123456789abcdef0123456789abcdef01
是提交哈希