【问题标题】:Configuring composer.json with private Bitbucket Mercurial repository使用私有 Bitbucket Mercurial 存储库配置 composer.json
【发布时间】:2015-04-21 21:58:14
【问题描述】:

我的项目使用我自己的库,该库位于位于 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,无法从中读取包
abort:需要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"
    },

得到一个错误:

[无效参数异常]
未知下载器类型:vcs。可用类型:git、svn、hg、perforce、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 clone 'https://***/mylibname' '/path/to/myproject' abort:需要http授权

除了composer.json之外,我的auth.json的结构是:

{
"http-basic": {
    "bitbucket.org": {
        "username": "myusername",
        "password": "mypassword"
    }
}
}

【问题讨论】:

    标签: mercurial composer-php bitbucket private


    【解决方案1】:

    似乎bitbucket-oauth 方法在作曲家 1.1 的当前状态下是错误的。这意味着您必须在客户端上设置 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"
    },
    

    【讨论】:

      【解决方案2】:

      Composer 自 1.2.0 版起已使用 bitbucket oauth 对其进行排序,如果多个开发人员正在处理一个项目,这是比 ssh-keys 更好的方法,因为 auth.json 可以保留在项目存储库中(如果它是private) 并且只需要设置一次。

      auth.json

      {
          "bitbucket-oauth": {
              "bitbucket.org": {
                  "consumer-key": "key",
                  "consumer-secret": "secret"
              }
          }
      }
      

      composer.json

      "repositories":[
              {
                  "type": "vcs",
                  "url":  "git@bitbucket.org:path/to.git"
              }
          ]
      

      【讨论】:

      • 来自文档:getcomposer.org/doc/…请注意,存储库端点需要是 https 而不是 git。
      • @aaronbauman git 版本对我来说非常好用,因此我想你可以使用其中任何一个。只是我更喜欢使用 git 端点。
      • 我同意@aaronbauman。必须使用"type": "git", "url": "https://bitbucket.org/path/to.git" - 还要确保您也在composer.lock 中进行更改。 :)
      【解决方案3】:

      That 不太适合我,但它让我找到了正确的方向。确保您已安装 SSH 密钥以通过 git@ 访问它。

      {
      "repositories": [
      {
        "type": "package",
        "package": {
          "name": "myname/mylibname",
          "version": "master",
          "source": {
            "type": "git",
            "url": "git@bitbucket.org:myname/mylibname.git",
            "reference": "master"
          }
        }
      }
      ]
      }
      

      【讨论】:

      • 对你的配置做一点补充:"require": { "username/my-package": "dev-master" }
      【解决方案4】:

      只需删除 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"
                  }
              }
          }
      ]}
      

      【讨论】:

        【解决方案5】:

        关于我的评论。 我已经测试了我在 composer 建议中遇到的上述场景,即存储库需要至少有一个稳定版本。

        https://getcomposer.org/doc/04-schema.md#minimum-stability

        因此,我使用了“devTAGSSH 连接,它可以正常工作。

        {
            "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"
                    }
                }
            }
        ]}
        

        【讨论】:

          【解决方案6】:

          另一个使用 OAuth 消费者 授权的 bitbucket git repo 示例,它确实有效。请注意,repo 以 https 开头,否则 composer 将失败并返回错误 'undefined offset: 1'。

          auth.json

          {
              "bitbucket-oauth": {
                  "bitbucket.org": {
                      "consumer-key": "...",
                      "consumer-secret": "..."
                  }
              }
          }
          

          composer.json

          "repositories": [
              {
                  "type": "git-bitbucket",
                  "url": "https://bitbucket.org/workspace/repo.git"
              }
          ]
          

          【讨论】:

            【解决方案7】:

            我认为我最好为混乱做出贡献并分享对我有用的配置。首先,我绝对无法从作曲家那里得到推荐的设置来工作。但是,以下操作:

            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/{USERNAME ||VENDOR}/{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 的管理员
            • 我的目标是 master 分支
            • 存储库上没有标签
            • 最低稳定性设置为dev
            • 您需要将autoload 选项添加到package(请参阅this

            我希望这可以帮助任何对此感到沮丧的人,似乎每个人都有问题。感谢@Tomasz Czechowski 提供的答案,最终让这对我有用!

            【讨论】:

              猜你喜欢
              • 2014-06-02
              • 2018-03-19
              • 1970-01-01
              • 2013-08-10
              • 2018-01-06
              • 2017-10-19
              • 2017-01-04
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多