使用PHPcomposer php克隆git回购
我试图用composer从github中自动克隆一个不在packagist但是不能工作的github的git仓库,我不知道我在做什么错误。
我想我必须把它包含在“知识库”中,像这样:
"repositories": [ { "url": "https://github.com/l3pp4rd/DoctrineExtensions.git", "type": "git" } ],
然后可能列在“要求”部分。 它应该类似于这个例子,但它不起作用。 它只是给这个错误:
您的需求无法parsing为可安装的一组软件包。
有没有人试图做这样的事情呢?
在2013年写作时,这是一个办法。 composer php已经增加了对更好的方法的支持:请参阅@igorw的答案
你有存货吗?
Git,Mercurial,SVN由Composer支持。
你有写访问存储的权限吗?
是?
仓库是否有composer.json
文件
如果你有一个仓库,你可以写:添加一个composer.json
文件,或修复现有的文件,不要使用下面的解决scheme。
去@igorw的答案
只有在没有存货的情况下才使用
或者如果存储库没有composer.json
,并且您不能添加它
这将覆盖Composer可以从原始存储库的composer.json
读取的所有内容,包括程序包的依赖关系和自动加载。
使用package
types会将正确定义所有内容的负担转移给您。 更简单的方法是在存储库中有一个composer.json
文件,并使用它。
这种解决scheme只适用于极less数情况,在这种情况下,您无法更改已放弃的ZIP下载,或只能读取的存储库,但不再进行维护。
"repositories": [ { "type":"package", "package": { "name": "l3pp4rd/doctrine-extensions", "version":"master", "source": { "url": "https://github.com/l3pp4rd/DoctrineExtensions.git", "type": "git", "reference":"master" } } } ], "require": { "l3pp4rd/doctrine-extensions": "master" }
这个包实际上可以通过packagist获得 。 在这种情况下,您不需要定制存储库定义。 只要确保你添加一个require
(这是总是需要的)与一个匹配的版本约束。
一般来说,如果软件包上有软件包, 请不要添加VCS软件仓库。 它只会减慢速度。
对于通过packagist不可用的软件包,请使用VCS (或git)存储库,如问题所示。 当你这样做时,确保:
- 根目录composer.json中指定了“repositories”字段(这是一个仅限根的字段,忽略来自所需软件包的存储库定义)
- 存储库定义指向有效的VCS回购
- 如果types是“git”而不是“vcs”(如你的问题),确保它实际上是一个git回购
- 你有一个
require
的软件包的问题 -
require
中的约束与VCS回购提供的版本相匹配。 您可以使用composer show <packagename>
来查找可用的版本。 在这种情况下~2.3
将是一个不错的select。 -
require
中的名称与远程composer.json
中的名称相匹配。 在这种情况下,它是gedmo/doctrine-extensions
。
以下是一个样本composer.json
,通过VCS回购安装相同的包:
{ "repositories": [ { "url": "https://github.com/l3pp4rd/DoctrineExtensions.git", "type": "git" } ], "require": { "gedmo/doctrine-extensions": "~2.3" } }
VCS回购文档很好地解释了这一切。
如果有可用的composer.json
的git(或其他VCS)存储库, 请勿使用“包”回购。 包回购要求您提供定义中的所有元数据,并完全忽略提供的dist和source中的任何composer.json
。 它们也有其他限制,例如在大多数情况下不允许正确更新。
避免软件包回购( 另见文档 )。
你可以像这样将git仓库包含到composer.json中:
"repositories": [ { "type": "package", "package": { "name": "example-package-name", //give package name to anything, must be unique "version": "1.0", "source": { "url": "https://github.com/example-package-name.git", //git url "type": "git", "reference": "master" //git branch-name } } }], "require" : { "example-package-name": "1.0" }
只要告诉composer php如果可用就使用源代码:
composer update --prefer-source
要么:
composer install --prefer-source
然后,您将获得软件包作为克隆存储库,而不是提取tarballs,所以你可以做一些改变,并提交回来。 当然,假设你有对存储库的写入/推送权限,Composer知道项目的存储库。
免责声明:我想我可能会回答一些不同的问题,但是当我发现这个问题的时候,这就是我想要的,所以我希望这对其他人也是有用的。
如果Composer不知道,项目的存储库在哪里,或者项目没有合适的composer.json,情况会更复杂一些,但其他人已经回答了这样的情况。
我遇到以下错误: The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
如果您正在分担另一个回购以进行自己的更改,则最终将会有一个新的存储库。
例如:
https://github.com/foo/bar.git => https://github.com/my-foo/bar.git
新的url将需要进入你composer.json的仓库部分。
请记住,如果您要在您的require部分将叉引用为my-foo/bar
,则必须在新repo的composer.json
文件中重命名该包。
{ "name": "foo/bar", => { "name": "my-foo/bar",
如果你刚刚分叉最简单的方法来做到这一点是编辑它正确的内部github。
在我的情况下,我使用Symfony2.3.x,最小稳定性参数默认为“稳定”(这是好的)。 我想导入一个不是packagist的repo,但是有同样的问题“你的需求不能解决到一套可安装的软件包”。 看来,我试图导入的回购中的composer.json使用最小稳定性“开发”。
所以要解决这个问题,不要忘记validationminimum-stability
。 我解决了这个问题,需要一个dev-master
版本,而不是这个post所说的master
。
如果你想从GitHub使用composer.json
,你可以看看这个例子 (在VCS部分下)。
包部分用于没有composer.json
。 但是,你并没有遵循这个例子,或者它也会起作用。 请阅读关于软件包库的内容:
基本上,您可以定义包含在composer存储库的
packages.json
的相同信息,但仅限于单个包。 同样,最低要求的字段是名称,版本,dist或source。
- 找不到Laravel 5类“表格”
- NPM /鲍尔/composer php – 差异?
- Symfony2停止Composer将parameters.yml.dist安装到parameters.yml中
- CakePHP 3.0安装:系统缺lessintl扩展
- 要求不能解决到可安装的一组软件包
- composer php:具有不同级别的最低稳定性的所需软件包
- Composer抛出类Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepository不存在
- Running Composer返回:“无法打开input文件:composer.phar”
- composer php – 请求的PHP扩展mbstring从您的系统中丢失