16

我正在尝试使用 composer 加载我在 BitBucket 上托管的库,如官方文档此处所述,但不断收到以下错误:

[Composer\Repository\InvalidRepositoryException]
No valid composer.json was found in any branch or tag of [repository URL], could not load a package from it.

这是我的项目composer.json:

{
    "name": "Project name",
    "require": {
        "my-vendor/my-package": "dev-master"
    },
    "repositories": [
        {
            "type": "vcs",
            "url": [repository URL]
        }
    ]
}

这是我的远程存储库中的composer.json(显然找不到):

{
    "name": "my-vendor/my-package",
    "version": "0.3",
    "autoload": {
        "psr-0": {
            "NS_": "src"
        }
    }
}

我应该提到,两个 composer.json 文件都应该在根目录中。

其他一些需要注意的事项:

我还尝试了“非作曲家包”方法,在我的项目 composer.json 中指定包信息,并从我的远程存储库中省略 composer.json,如文档中所述。这成功克隆了主分支,但随后导致以下错误:

[RuntimeException]
Failed to execute git checkout "master" && git reset --hard "master"

fatal: Not a git repository (or any of the parent directories): .git

但是,该软件包已按预期下载到 /vendor,因此我不确定它为什么要再次尝试签出 master。

这不是我希望解决这个问题的方式(因为我宁愿在远程存储库中使用 composer.json),但它可能有助于在其他地方识别问题。

谢谢你的帮助。

编辑

我设法通过 HTTP 引用 package.json 来让它工作:

"repositories": [
    {
        "type": "composer",
        "url": "http://localhost/packages.json"
    }
]

packages.json 看起来像:

{
    "packages": {
        "vendor/my-package": {
            "dev-master": {
                "name": "vendor/my-package",
                "version": "dev-master",
                "source": {
                    "url": [repository URL],
                    "type": "git",
                    "reference": "master"
                }
            }
        }
    }
}

这是让它工作的唯一方法吗?如果我只打算使用一个或两个内部包,那么托管我自己的 packages.json 文件似乎有点矫枉过正。

无论如何,这给了我与我之前提到的相同的 Git 错误。

编辑 2

强制出错(无效的 SSH 密码)给出:

[RuntimeException]
Failed to execute git clone "[repository URL]" "C:\workspace\DFv3\vendor\vendor/my-package" && cd /D "C:\workspace\DFv3\vendor\vendor/my-package" && git remote add composer "[repository URL]" && git fetch composer

所以我可以清楚地看到它在这里做什么。但是,似乎此命令运行后cd进入.git目录并尝试运行:

git checkout "master" && git reset --hard "master"

大概是为了摆脱它拉的作曲家实例。但是,它在错误的目录中运行它,我不知道为什么..

4

6 回答 6

8

我知道这有点老了,但对于一些可能遇到这个问题的人来说,这就是它对我的工作方式。

清除作曲家缓存。

composer clearcache

重新运行 satis 构建脚本。

于 2017-01-03T06:12:53.997 回答
7

version如果它实际上由受支持的源代码控制系统管理,则不得在库的 composer.json 中包含规范。目前您说您的主分支是 0.3 版(这是一个稳定版本),但您正在尝试包含“dev-master”(这是一个不稳定版本)。如果该软件确实是“dev-master”或“0.3 版”,Composer 可能会感到困惑。

如果您实际上是在 master 分支中为 0.3.x 系列开发新版本,则应改为定义分支别名。将此添加到您当前的 0.3.x 版本的开发分支中:

"extra": {
    "branch-alias": {
        "dev-master": "0.3.x-dev"
    }
}

如果您想继续升级到 0.4 或 1.0 版本,您将在 0.3 系列的“最后”状态分支,并使用一个名为“0.3.x”的分支,然后更新 master 分支中的 composer.json 以指向 dev-掌握一个新的别名(如"dev-master": "0.4.x-dev")。您也可以随意命名旧的 0.3 分支,然后为该分支添加别名。

这样做将使您能够要求最新的 0.3.x 开发版本,如下所示:

"require": {
    "my-vendor/my-package": "0.3.*@dev"
}

这将拉取最新的 0.3 版本 - 由于定义的别名,当前将是主分支中的最新提交。

您当前的设置方式会强制您明确包含 0.3 版,这是一个移动目标,但并未明确说明这一事实。

只有在没有可用的版本控制系统能够为 Composer 提供版本号时,才应该给出明确的版本标签,即没有可用的标签,或者标签不符合 Composer 对版本号的要求。由于您似乎可以控制该 vcs,因此最好使标签符合 Composers 标准,而不是让发布新版本变得麻烦。

修复此问题后,我确实希望您的安装不再需要该 package.json 文件,因为该文件现在修复了您使用该版本声明创建的问题。然后,您也不再需要该作曲家参考,但可以像您一样恢复提及原始存储库。

如果您觉得您使用了太多私有存储库,而这些私有存储库都需要更多私有存储库,并且厌倦了在长长的列表中提及它们,那么您可以考虑使用Satis创建这样一个找到的包的列表,而不是手动创建它们。

于 2013-11-13T22:15:20.620 回答
6

我有同样的错误,从vcs删除文件夹后一切正常

sudo rm -R ~/.composer/cache/vcs/*

在 Windows 上(如@Serbu 建议的那样):

清除 C:\Users\Me\AppData\Local\Composer\ 下的 vcs、repo 和 files 目录

于 2016-02-03T11:11:30.203 回答
3

package.json我已经设法通过引用一个over HTTP来让它工作:

"repositories": [
    {
        "type": "composer",
        "url": "http://localhost/packages.json"
    }
]

所以packages.json文件看起来像:

{
    "packages": {
        "vendor/my-package": {
            "dev-master": {
                "name": "vendor/my-package",
                "version": "dev-master",
                "source": {
                    "url": [repository URL],
                    "type": "git",
                    "reference": "master"
                }
            }
        }
    }
}

此外,我在命令提示符下的自动运行注册表项似乎干扰了作曲家的运行。

请参阅:要求私有 git Bitbucket 存储库无法找到有效的 composer.json

于 2013-11-13T13:23:25.803 回答
1

虽然这可能被认为是死灵法,但我昨天在遇到这样的问题时偶然发现了这个问题(尽管在我的情况下,我运行的是 Ubuntu Docker 容器,而不是像 OP 那样运行 Windows)并认为我会在这里留下我的想法和解决方案其他人是否应该偶然发现这一点。

Composer 的 Ubuntu 存储库版本目前处于 1.6.x(在撰写本文时,我相信 Composer 最高为 1.9.1),并且根据我是否composer install使用不同级别的日志记录运行,我会遇到不同的错误。如果没有记录,它会抱怨找不到有效的composer.json. 通过日志记录,它抱怨无法访问存储库(尽管扫描了标签)。

我的解决方案是全局安装最新版本的 Composer,因为 Ubuntu 存储库版本使用过时的 BitBucket API 调用(不推荐使用 v1)。一旦我更新到更新版本的 Composer,安装就可以完美运行。

因此,请检查您的 Composer 版本并尽可能安装更新版本(本地/项目安装也应该可以)。

于 2019-12-11T11:36:17.733 回答
0

我刚刚将 composer.json 更新到最新版本,问题就消失了。

于 2019-08-06T13:09:13.707 回答