【问题标题】:Why is composer not using my repository fork for a package?为什么作曲家不使用我的存储库 fork 包?
【发布时间】:2015-06-28 21:37:09
【问题描述】:

我关注了互联网上的信息和这篇文章 (Change Composer git source for a package),但我仍然没有运气让作曲家使用我的存储库分支。这里有什么问题?

{
"name": "sociablegroup/reeb",
"repositories": [
  {
    "type": "vcs",
    "url": "https://github.com/michael-bender/laravel-doctrine.git"
  }
],
"require": {
    "laravel/framework": "5.0.*",
    "beatswitch/lock": "0.1.*",
    "beatswitch/lock-laravel": "0.2.*",
    "laravel/socialite": "~2.0",
    "league/tactician": "0.5.*",
    "doctrine/migrations":"@dev",
    "atrauzzi/laravel-doctrine": "dev-master"
},
"require-dev": {
    "phpunit/phpunit": "~4.0",
    "phpspec/phpspec": "~2.1",
    "laracasts/generators": "~1.1"
},
"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},
"autoload-dev": {
    "classmap": [
        "tests/TestCase.php"
    ]
},
"scripts": {
    "post-install-cmd": [
        "php artisan clear-compiled",
        "php artisan optimize"
    ],
    "post-update-cmd": [
        "php artisan clear-compiled",
        "php artisan optimize"
    ]
},
"config": {
    "preferred-install": "dist"
}
}

我尝试过使用 SSH 网址而不是 HTTPS。我试过--prefer-source。我似乎无法从我的仓库中获取它。

【问题讨论】:

    标签: git github composer-php


    【解决方案1】:

    问题 1 - 使用私有 Github 存储库

    好的,你正试图用你自己的私有包michael-bender/laravel-doctrine“重载”包atrauzzi/laravel-doctrine。 您的包具有 1.0.0 版本,但不能解析为一组稳定的包。

    根据您的最低稳定性设置,该软件包没有足够稳定的版本

    您可以将"minimum-stability": "dev" 添加到composer.jsonconfig 部分。

    然后运行composer update

    然后你得到

    [217.1MB/57.13s]   - Installing atrauzzi/laravel-doctrine (dev-master 906ccf0)
    [217.0MB/57.13s] Downloading https://api.github.com/repos/michael-bender/laravel-doctrine/zipball/906ccf03e9740fb89503427f6bf9c4f019eb33f8
    

    问题 2 - 无效的类映射条目

    还有一个问题:

    [144.4MB/60.26s] Generating autoload files
    
      [RuntimeException]
      Could not scan for classes inside "database" which does not appear to be a file nor a folder
    

    为了摆脱这个异常,去掉这个

    "classmap": [
        "database"
    ],
    

    来自composer.jsonautoload 部分。


    复制

    我使用以下composer.json 重现并解决了该问题:

    {
        "name": "sociablegroup/reeb",
        "repositories": [
          {
            "type": "git",
            "url": "https://github.com/michael-bender/laravel-doctrine.git"
          }
        ],
        "require": {
            "atrauzzi/laravel-doctrine": "dev-master",
            "doctrine/migrations": "dev-master"
        },
        "autoload": {
            "psr-4": {
                "App\\": "app/"
            }
        }
    }
    

    我使用了以下命令:composer install -vvv --profile --prefer-source

    这获取了你的 repo - 查看你的最后一次提交:

    截图:composer.lock

    【讨论】:

    • 感谢您的回复。我认为您可以通过在包上仅包含 dev@dev 标记来覆盖每个包的最低稳定性要求。例如,我必须在教义/迁移包中包含@dev,以使其正确地拉入,这是通过 laravel-doctrine 中的 dev commit hash 引用的。当我为 dev 设置最低稳定性时,它会为所有看起来的东西拉入 dev,即使我更喜欢稳定。关于如何告诉作曲家只允许开发 laravel-doctrine 包的任何想法?
    • 是的,我只是懒惰并为所有软件包使用了最低稳定性开发。你是对的:可以使用@dev 设置每个包的稳定性。您可能会放弃"minimum-stability": "dev" 以支持"atrauzi/laravel-doctrine": "dev-master@dev" - 我仍然觉得"dev-master@dev" 是一种隐含的重复,需要一个“开发”包,但它似乎工作。 (抱歉:有多少包。重现此问题需要很长时间。)
    • 试过"dev-master@dev"@dev"atrauzi/laravel-doctrine" 但似乎都没有工作,因为我没有看到我在主分支上的私人仓库中所做的更改。跨度>
    • 你用过--prefer-source吗?
    • 我试过 --prefer-source 但没有运气。 Composer.lock 仍在报告 atrauzzi 存储库。我想我什么都试过了。即使我为所有东西设置了最低稳定性,它仍然不会读取我的 fork。我即将向作曲家提出问题。你能把我的叉子拉到 atrauzi 上吗?你有最新版本的作曲家吗?
    【解决方案2】:

    我最近遇到了类似的问题,尝试使用 composer 提取我的存储库分支。除了将“最低稳定性”设置为“dev”并将存储库 URL 添加到“存储库”部分之外,您可能还必须编辑包的 composer.json 的“名称”字段以匹配包的 URL GihHub。

    例如,这将是 GitHub 上包的 composer.json 中的“名称”字段:

    {
      "name": "michael-bender/laravel-doctrine"
      ...
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-11
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 2021-07-12
      • 2013-08-21
      • 2018-12-29
      • 2017-01-11
      相关资源
      最近更新 更多