-->

使用PHP作曲家克隆混帐回购协议使用PHP作曲家克隆混帐回购协议(Use PHP composer

2019-05-12 15:48发布

我试图用作曲家自动克隆从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