使用这样的composer.json
安装专用包时:
{
"require": {
"foobar/example-package": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "git@gitlab.com:foobar/example-package.git"
}]
}
由于某种原因,Composer试图使用https
而不是ssh
:
$ composer update
Loading composer repositories with package information
Failed to download foobar/example-package:The "https://gitlab.com/api/v4/projects/foobar%2Fexample-package" file could not be downloaded (HTTP/1.1 404 Not Found)
Your credentials are required to fetch private repository metadata (git@gitlab.com:foobar/example-package.git)
A token will be created and stored in "…composerhome/auth.json", your password will never be stored
To revoke access to this token you can visit https://gitlab.com/profile/applications
Username:
即使在使用-vvv
时,也没有迹象表明Composer为什么需要通过https
访问存储库,而完全可以通过ssh
(使用存储在SSH代理中的私钥(将代码推送到专用存储库。
Composer 1.x和2.x会发生这种情况。难道没有办法只使用ssh
进行这样的操作吗?这个问题似乎也是GitLab特有的,因为我从未在GitHub存储库中遇到过它。
双重检查"从GitLab的私有存储库安装composer包";来自Syed Sirajul Islam Anik
因此,要从GitLab安装不是公共存储库的软件包,需要一个个人访问令牌
您可以通过进入配置文件图标> Settings > Access Token
来发布PAT。然后,要发布新的PAT,请写一个名称并选择一个范围api/read_api, read_api
是最小值。api
也会起作用。如果你想设置一个到期日,可以在其中输入值。然后按下创建个人访问令牌按钮。接下来,从终端开始。运行以下命令。
composer config--global--auth gitlab-token.gitlab.com PAT_token
将
PAT_TOKEN
替换为您在上述过程中找到的令牌。如果你使用的是自托管的GitLab,那么你需要将URLgitlab.com
更改为自托管的URL。然后,在您的composer.json文件中,添加以下片段。
"repositories": [ { "type": "vcs", "url": "git@gitlab.com:namespace/repo-name.git" } ]
或者,如前所述,使用"type": "git"
而不是"vcs"
:
"repositories": [
{
"type": "git",
"url": "git@gitlab.com:namespace/repo-name.git"
}
]
如果
composer.json
文件已经包含存储库密钥,则将对象添加到其中。最后,
composer require vendor-name/package-name
换句话说,即使URL是SSH,您仍然需要一个PAT(令牌(来使用composer
调用的HTTPS GitLab API。
感谢@rob006将vcs
更改为git
将解决此问题。
他/她在评论中提到了这一点,也许有些人没有注意到,所以我重复一遍,作为一个答案,也许可以帮助别人。