我试图用作曲家自动克隆从GitHub一个Git仓库,是不是在packagist ,但它不工作,我想不出什么我做错了。
我想我已经把它列入“资源库”像这样之中:
"repositories": [
{
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git"
}
],
然后大概列出它在“要求”一节。 它应该是类似这个例子 ,但它不工作。 它只是给出了这样的错误:
您的要求不能被解析到一个安装包集合。
曾经有人试图做这样的事情了吗?
Answer 1:
在2013年写的时候,这是做到这一点的方法之一。 作曲家增加了支持更好的方法:见@igorw的答案
你有一个资料库?
的Git,水银和SVN是由作曲家支持。
你有写访问仓库?
是?
是否REPOSITORY HAVE A composer.json
FILE
如果你有一个仓库,你可以写信至:添加composer.json
文件,或修复现有的一个,并且不使用下面的解决方案。
转到@igorw的答案
只能用这个如果你没有一个仓库
或者如果存储库不具有composer.json
,你不能将其添加
这将覆盖作曲家也许能够从原来的存储库的阅读一切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"
}
Answer 2:
这包其实是可以通过packagist 。 你不需要在这种情况下定制存储库定义。 只要确保你添加一个require
(总是需要)与匹配版本的约束。
一般来说,如果一个包,请packagist, 不添加VCS回购。 它只是将慢下来。
对于通过packagist没有可用的软件包,使用VCS (或GIT)库,如图你的问题。 当你这样做,确保:
- 在“库”字段在根composer.json规定(这是一个唯一的根域,从需要的软件包库的定义被忽略)
- 该库定义指向有效的VCS回购
- 如果类型是不是“VCS”(如你的问题)“混帐”,确保它事实上是一个混帐回购协议
- 你有
require
的包有问题 - 在约束
require
匹配由VCS回购所提供的版本。 您可以使用composer show <packagename>
找到可用的版本。 在这种情况下~2.3
将是一个不错的选择。 - 在名称
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回购文档解释了这一切非常好。
如果有一个Git(或其他VCS)资源库和composer.json
可用, 不使用“打包”回购。 包装回购要求您提供的所有定义中的元数据,并会完全忽略任何composer.json
存在于提供DIST和来源。 他们也有其他限制,如不允许在大多数情况下,适当的更新。
避免包回购( 另见文档 )。
Answer 3:
您可以包括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"
}
Answer 4:
只要告诉作曲家如果有使用来源:
composer update --prefer-source
要么:
composer install --prefer-source
然后你会得到包作为克隆库,而不是提取的压缩包,这样你就可以做一些修改,并把它们提交回。 当然,假设你有写/推权限库和作曲家知道项目的存储库。
免责声明:我想我可以回答有点不同的问题,但是这是我一直在寻找,当我发现这个问题,所以我希望这将是对别人有用的。
如果作曲家不知道,在该项目的存储库是,或者项目没有正确的composer.json,情况有点复杂,但别人已经回答了这样的场景。
Answer 5:
我遇到了以下错误: 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的版本库部分。
如果你想参考你的叉子记住my-foo/bar
在你需要一节,你将不得不在包重命名composer.json
文件新回购的内部。
{
"name": "foo/bar",
=>
{
"name": "my-foo/bar",
如果您刚刚分叉做到这一点,最简单的方法就是修改自己的内部github上。
Answer 6:
就我而言,我使用Symfony2.3.x和最小稳定性参数默认为“稳定”(这是很好)。 我想在packagist无法导入回购,但有同样的问题:“你的要求不能被解析到一个安装包集合。” 看来,在回购的composer.json我试图导入使用最小稳定“开发”。
因此,要解决此问题,不要忘了验证minimum-stability
。 我通过要求解决它dev-master
版本,而不是master
在本说明后 。
Answer 7:
如果你想使用composer.json
从GitHub你想看看这个例子 (下VCS段)。
该包款是没有包composer.json
。 但是,你没有为榜样一样好,甚至它也将工作过。 不要看它说什么关于包库:
基本上,你定义包含在作曲家库的相同的信息packages.json
,但只针对单个封装中。 再次,所需要的最小字段名称,版本,并且或者DIST或源的。
文章来源: Use PHP composer to clone git repo