我的项目使用我自己的库,该库位于bitbucket.org上的私有Mercurial存储库中。该库没有配置composer.json。
我试图将该库作为我项目的依赖项。
首先,我向composer.json写入了以下字符串:
{
"require": {
"php": ">=5.4",
"myname/mylibname": "dev"
},
"repositories":[
{
"type": "hg",
"url" : "https://bitbucket.org/myname/mylibname"
}
]
}
运行composer install
时出现错误:
[运行时异常]
克隆失败https://bitbucket.org/myname/mylibname,无法从中读取包
中止:需要http授权
然后我将"type": "hg"
更改为"type": "vcs"
,并得到另一个错误:
[Composer\Repository\InvalidRepositoryException]
在https://***/mylibname的任何分支或标记中都找不到有效的composer.json,无法从中加载包。
在额外阅读了文档后,我在项目的composer.json中添加了对我的库的描述,它开始看起来是这样的:
{
"require": {
"php": ">=5.4",
"myname/mylibname": "dev"
},
"repositories":[
{
"type": "vcs",
"url" : "https://bitbucket.org/myname/mylibname"
},
{
"type":"package",
"package":{
"name":"myname/mylibname",
"version": "dev",
"source":{
"type":"vcs",
"url":"https://bitbucket.org/myname/mylibname",
"reference":"dev"
}
}
}
]}
发生了相同的错误:
[Composer\Repository\InvalidRepositoryException]
在https://***/mylibname的任何分支或标记中都找不到有效的composer.json,无法从中加载包。
我删除了部分:
{
"type": "vcs",
"url" : "https://bitbucket.org/myname/mylibname"
},
得到一个错误:
[InvalidArgumentException]
未知的下载程序类型:vcs。可用类型:git、svn、hg、performce、zip、rar、tar、gzip、phar、file。
我把"type": "vcs"
改回"type": "hg"
,composer.json看起来像:
{
"require": {
"php": ">=5.4",
"myname/mylibname": "dev"
},
"repositories":[
{
"type":"package",
"package":{
"name":"myname/mylibname",
"version": "dev",
"source":{
"type":"hg",
"url":"https://bitbucket.org/myname/mylibname",
"reference":"dev"
}
}
}
]}
和一个错误:
[运行时异常]
未能执行hg克隆"https://***/mylibname"/path/to/myproject"中止:需要http授权
除了composer.json之外,我的auth.json的结构是:
{
"http-basic": {
"bitbucket.org": {
"username": "myusername",
"password": "mypassword"
}
}
}
在composer的1.1版本中,bitbucket-oauth
方法在当前状态下似乎有缺陷。这意味着您必须在客户端上设置SSH密钥,或者如果您像我一样,由于部署服务器的原因无法设置密钥,则必须使用基本身份验证。
我唯一的办法是:
~/.composer/auth.json
{
"http-basic": {
"bitbucket.org": {
"username": "bitbucketUsername",
"password": "PasswordToBitbucket"
}
}
}
composer.json
"repositories": [
{
"url": "https://username@bitbucket.org/username/my-package.git",
"type": "git"
}
],
"require": {
"username/my-package": "dev-master"
},
Composer在1.2.0版本中已经使用bitbucket oauth对此进行了排序,如果多个开发人员正在处理一个项目,这是一个比ssh密钥更好的方法,因为auth.json可以留在项目存储库中(如果它是私有的),并且只需要设置一次。
auth.json
{
"bitbucket-oauth": {
"bitbucket.org": {
"consumer-key": "key",
"consumer-secret": "secret"
}
}
}
composer.json
"repositories":[
{
"type": "vcs",
"url": "git@bitbucket.org:path/to.git"
}
]
只需删除https://。适用于我:)
{
"require": {
"php": ">=5.4",
"myname/mylibname": "dev"
},
"repositories":[
{
"type":"package",
"package":{
"name":"myname/mylibname",
"version": "dev",
"source":{
"type":"hg",
"url":"bitbucket.org/myname/mylibname",
"reference":"dev"
}
}
}
]}
这对我来说并不太奏效,但它让我朝着正确的方向前进。请确保已安装SSH密钥,以便通过git@.
{
"repositories": [
{
"type": "package",
"package": {
"name": "myname/mylibname",
"version": "master",
"source": {
"type": "git",
"url": "git@bitbucket.org:myname/mylibname.git",
"reference": "master"
}
}
}
]
}
我这边有一条评论。我已经测试了我在composer建议中遇到的上述场景,即存储库需要至少有一个稳定的版本。
https://getcomposer.org/doc/04-schema.md#minimum-稳定性
因此,我使用了"dev"TAG以及SSH连接,并且可以正常工作。
{
"require": {
"php": ">=5.4",
"myname/mylibname": "dev"
},
"repositories":[
{
"type":"package",
"package":{
"name":"myname/mylibname",
"version": "dev",
"source":{
"type":"git",
"url":"git@bitbucket.org:myname/mylibname.git",
"reference":"dev"
}
}
}
]}
我认为我最好能解决这个困惑,并分享什么配置对我有效。首先,我绝对无法从composer那里获得推荐的设置。然而,以下情况确实发生了:
1.编辑~.composer/auth.json
并配置http-basic
密钥。
{
"bitbucket-oauth": {},
"github-oauth": {},
"gitlab-oauth": {},
"gitlab-token": {},
"http-basic": {
"bitbucket.org": {
"username": "USERNAME",
"password": "PASSWORD"
}
}
}
2.使用以下内容在composer.json
(即专用存储库)中定义包。此外,请记住,这不是个人BitBucket账户,我是团队的一员,因此USERNAME@bitbucket.org是我的用户名,第二个实例是公司(https://{USERNAME}@bitbucket.org/{用户名|供应商}/{REPO}.git).
"require": {
"{USERNAME||VENDOR}/{REPO}": "dev-{BRANCH}
}
"repositories:" [
{
"type": "package",
"package": {
"name": "{USERNAME/VENDOR/REPO}",
"version": "master",
"source": {
"url":
"https://{URL}",
"type": "git",
"reference": "master"
}
}
}
]
杂项&值得注意的事项:
- 我没有使用访问密钥
- 我在BitBucket上有SSH密钥
- 我是BitBucket的管理员
- 我是主分支的目标
- 存储库上没有标记
- 最小稳定性设置为
dev
- 您需要将
autoload
选项添加到package
(请参阅此)
我希望这能帮助任何对此感到沮丧的人,似乎每个人都有问题。感谢@Tomasz Czechowski提供的答案,最终让我成功了!
使用OAuth消费者授权的bitbucket git-reo的另一个例子,它实际上是有效的。请注意,repo以https开头,否则composer将失败,并返回错误"未定义的偏移量:1"。
auth.json
{
"bitbucket-oauth": {
"bitbucket.org": {
"consumer-key": "...",
"consumer-secret": "..."
}
}
}
composer.json
"repositories": [
{
"type": "git-bitbucket",
"url": "https://bitbucket.org/workspace/repo.git"
}
]