Composer php Composer-从专用git存储库安装依赖项

Composer php Composer-从专用git存储库安装依赖项,composer-php,Composer Php,我有两个私人GitHub帐户上的项目——一个是库,另一个是我的应用程序 我想在我的应用程序中包括我的库 我的库的composer.json如下所示: { "name": "andyw/mylibrary", "description": "My Library", "license": "proprietary", "homepage": "https://github.com/andyw/mylibrary", "require": { "php": ">=5

我有两个私人GitHub帐户上的项目——一个是库,另一个是我的应用程序

我想在我的应用程序中包括我的库

我的库的composer.json如下所示:

{
  "name": "andyw/mylibrary",
  "description": "My Library",
  "license": "proprietary",
  "homepage": "https://github.com/andyw/mylibrary",
  "require": {
    "php": ">=5.5.0",
    "monolog/monolog": "1.*",
    "guzzle/guzzle": "3.*",
    "aws/aws-sdk-php": "2.*",
    "nixilla/twitter-api-consumer": "*",
    "webignition/robots-txt-file": "dev-master",
    "webignition/robots-txt-parser": "dev-master",
    "pusher/pusher-php-server": "*",
    "symfony/validator": "2.*"
  },
  "require-dev": {
    "phpunit/phpunit": "3.*"
  },
  "autoload": {
    "psr-0": {
      "": "src/"
    }
  }
}
在该项目上运行
composer update
,可以很好地安装依赖项。到目前为止,一切顺利

现在,这是我的应用程序的composer.json:

{
  "name": "andyw/myapp",
  "type": "project",
  "description": "My application",

  "homepage": "https://github.com/andyw/myapplication",
  "license": "proprietary",
  "repositories": [
    {
      "type": "git",
      "url": "git@github.com:andyw/myapplication.git"
    }
  ],
  "require": {
    "php": ">=5.5.0",
    "andyw/mylibrary": "dev-master",
    "facebook/php-sdk-v4": "4.0.*",
    "silex/silex": "~1.1",
    "monolog/monolog": "~1.6",
    "twig/twig": "~1.14",
    "doctrine/dbal": "~2.4",
    "nesbot/Carbon": "~1.6",
    "aws/aws-sdk-php": "2.*",
    "jms/serializer": "0.15",
    "symfony/validator": "2.*",
    "jdesrosiers/silex-cors-provider": "~0.1.2",
    "swiftmailer/swiftmailer": ">=4.1.2,<4.2-dev",
    "fzaninotto/faker": "~1.4"
  },
  "require-dev": {
    "mockery/mockery": "~0.8.0"
  },
  "autoload": {
    "psr-0": {
      "App": "src/"
    }
  }
}
如果mylibrary可以安装
webignition/robots txt文件dev master
,为什么不能作为依赖项的依赖项安装?我怎样才能解决这个问题


仅供参考:我的回购协议都不是公开的,出于隐私原因,我已经更改了我的包/文件的名称。

永远不要依赖分支机构!始终使用带标签的版本。这是使用Composer时最重要的规则

分支机构是移动目标。如果有人提交了新的内容,这会将指针移动到您正在使用的软件状态,并且您无法再次轻松找到此状态。此外,分支被认为是开发稳定性,唯一可以设置稳定性的包是根应用程序包。依赖于dev稳定性中的其他包的库是一个非常糟糕的主意,因为它们迫使根应用程序显式地允许开发稳定性

从长远来看,这是非常糟糕的。这将使您的软件无法维护,以至于使用Composer总是会失败、损坏,您开始想知道为什么每个人都在使用它(提示:它们不依赖于分支)

现在事情是这样的:

webignition/robots txt文件有标记的版本:0.1和0.2,0.2与主分支的提交完全相同。就用那个

webignition/robots txt解析器也是如此,但这里有版本1.0、1.0.1和1.0.2,主分支正好是版本1.0.2

您应该能够简单地更新到这些版本。如果因为您的软件依赖于旧版本的主分支而无法正常工作,那么在依赖于分支时,您遇到了确切的问题:您的库告诉我dev master是可以的,当我查看包的repo时,dev master分别是0.2或1.0.2版本,我希望它能够正常工作。如果您明确地指向类似于0.1和1.0.1的内容,这不太可能随着时间的推移而改变,并且始终是一个有效的组合


请注意,最好检查外部包开发人员是否使用语义版本控制,然后为版本范围使用适当的通配符选择器。允许版本中存在一些延迟将使依赖于同一第三个包的多个包更容易就通用版本达成一致。

添加
“最低稳定性”:“dev”
标记并尝试。谢谢-这确实有效,但它似乎会降低我们所有其他依赖项的dev版本,这可能并不理想。您尚未指定某些库的版本。请参见
dev master
<代码>开发主机始终被composer视为开发。或者,您可以指定版本并下载。@naxtek是否处理了此问题?如果您更喜欢稳定而不是开发版本,还应添加
“更喜欢稳定”:true
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for andyw/mylibrary dev-master -> satisfiable by andyw/mylibrary[dev-master].
    - andyw/mylibrary dev-master requires webignition/robots-txt-file dev-master -> no matching package found.