我正在尝试使用composer从github中自动克隆一个不在packagist中的git存储库,但它不能正常工作,我无法弄清楚我做错了什么。< / p>
我认为我必须将其包含在“存储库”中,如下所示:
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
然后可能在“require”部分列出它。它应该类似于this example但它不起作用。它只是给出了这个错误:
您的要求无法解析为可安装的软件包。
有人试图做过这样的事吗?
答案 0 :(得分:122)
该包实际上是is available through packagist。在这种情况下,您不需要自定义存储库定义。只需确保使用匹配的版本约束添加require
(始终需要)。
通常,如果包装在包装上可用,不添加VCS回购。它会减慢速度。
对于通过packagist不可用的软件包,请使用VCS(或git)存储库,如问题所示。执行此操作时,请确保:
require
require
中的约束与VCS repo提供的版本匹配。您可以使用composer show <packagename>
查找可用版本。在这种情况下,~2.3
将是一个不错的选择。require
中的名称与远程composer.json
中的名称相匹配。在这种情况下,它是gedmo/doctrine-extensions
。以下是通过VCS repo安装相同软件包的示例composer.json
:
{
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
"require": {
"gedmo/doctrine-extensions": "~2.3"
}
}
VCS repo docs很好地解释了所有这些。
如果存在可用composer.json
的git(或其他VCS)存储库,不使用“包”存储库。 Package repos要求您在定义中提供所有元数据,将完全忽略提供的dist和source中存在的任何composer.json
。它们还有其他限制,例如在大多数情况下不允许正确更新。
避免包裹回购(see also the docs)。
答案 1 :(得分:94)
在2013年撰写本文时,这是一种方法。 Composer增加了对更好方法的支持:请参阅@igorw的answer
你有存储吗?
Git,Mercurial和SVN受Composer支持。
您是否已写入存储区?
是
存储库是否有composer.json
个文件
如果您有一个存储库,您可以写信:添加composer.json
文件,或修复现有文件,不要使用下面的解决方案。
转到@igorw的answer
仅在您没有存储的情况下使用
或者如果存储库没有composer.json
并且您无法添加
这将覆盖Composer可以从原始存储库的composer.json
中读取的所有内容,包括包的依赖关系和自动加载。
使用package
类型会将正确定义所有内容的负担转嫁给您。更简单的方法是在存储库中有一个composer.json
文件,然后使用它。
此解决方案实际上仅适用于您无法更改的废弃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"
}
答案 2 :(得分:40)
您可以将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"
}
答案 3 :(得分:3)
我遇到了以下错误:The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
如果您要求另一个仓库进行自己的更改,最终会得到一个新的存储库。
E.g:
https://github.com/foo/bar.git
=>
https://github.com/my-foo/bar.git
新网址需要进入composer.json的存储库部分。
请记住,如果您想在您的需求部分中将您的分支称为my-foo/bar
,则必须在新代理商的composer.json
文件中重命名该分发包。
{
"name": "foo/bar",
=>
{
"name": "my-foo/bar",
如果您只是分叉最简单的方法,请在github内编辑它。
答案 4 :(得分:3)
告诉作曲家使用音源:
composer update --prefer-source
或者:
composer install --prefer-source
然后,您将获得包作为克隆的存储库而不是提取的tar包,因此您可以进行一些更改并将其提交回来。当然,假设您具有对存储库的写入/推送权限,并且Composer知道项目的存储库。
免责声明:我想我可能会回答一个不同的问题,但这是我在找到这个问题时所寻找的,所以我希望它对其他人也有用。
如果Composer不知道,项目的存储库在哪里,或者项目没有合适的composer.json,情况会有点复杂,但其他人已经回答了这些情况。
答案 5 :(得分:2)
就我而言,我使用Symfony2.3.x并且最小稳定性参数默认为“稳定”(这很好)。我想导入一个不在packagist中的repo但是有同样的问题“你的需求无法解析为一组可安装的软件包。” 似乎我尝试导入的repo中的composer.json使用了最小稳定性“dev”。
因此,要解决此问题,请不要忘记验证minimum-stability
。我通过要求dev-master
版而不是master
来解决此问题,如post中所述。
答案 6 :(得分:1)
如果您想使用GitHub中的composer.json
,请查看this example(在VCS部分下)。
包部分适用于没有composer.json
的包。但是,您没有遵循该示例,或者它也可以工作。请阅读有关软件包存储库的内容:
基本上,您定义了编辑器存储库
packages.json
中包含的相同信息,但仅限于单个包。同样,所需的最小字段是名称,版本以及dist或source。
答案 7 :(得分:0)
我尝试加入此处提到的解决方案,因为需要列出一些要点。
如@igorw的回答所述,在这种情况下,必须在composer.json文件中指定存储库的URL,但是由于在两种情况下composer.json必须存在(与@Mike Graf的第二种方式不同)在Packagist上发布它并没有太大的区别(此外,Github当前还以npm包的形式提供包服务),只是区别,而不是在注册后直接在packagist界面上输入URL。
此外,它有一个缺点,即它不能依赖使用此方法的外部库,因为递归存储库定义在Composer中不起作用。此外,由于它,似乎有一个“ bug”,因为递归定义在依赖项上失败,因此在根目录中明确地重新指定存储库似乎还不够,但是包中的所有依赖项也必须重新指定。
使用作曲家文件(在2012年10月18日,igorw回答15:13)
{
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
"require": {
"gedmo/doctrine-extensions": "~2.3"
}
}
没有作曲家文件(13年1月23日在17:28 Mike Graf回答)
"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"
}