[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中指定了包信息,并从documentation中概述了远程仓库中的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,所以我不知道为什么它试图重新检出主机.
这不是我希望解决这个问题的方式(因为我宁愿在远程存储库中使用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" } } } } }
这是获得这项工作的唯一途径吗?如果我只是要使用一个或两个内部的包,似乎有点过分的托管自己的package.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
所以我可以清楚地看到它在做什么.但是,这个命令似乎运行它后,cds进入.git目录并尝试运行:
git checkout "master" && git reset --hard "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”,然后将主分支中的composer.json更新为指向dev-掌握新的别名(如“dev-master”:“0.4.x-dev”).你也可以命名你的旧0.3分支,反正你喜欢,然后添加一个别名为THAT分支.
这样做将使您能够要求最新的0.3.x开发版本,如下所示:
"require": { "my-vendor/my-package": "0.3.*@dev" }
这将拉出最新的0.3版本 – 由于定义的别名,它目前是主分支中的最新提交.
您当前设置的方式迫使您明确地包含版本0.3,这是一个移动目标,而不会使该事实明确知道.
只有当没有可用的版本控制系统才能给出Composer的版本号,即没有可用的标签,或者标签不符合Composer对版本号的要求时,才能给出明确的版本标签.由于您似乎控制着该vcs,所以使标签符合Composers标准可能是一个好主意,而不是让它发布新版本变得麻烦.
修复这个之后,我确实期望您的安装不再需要该package.json文件,因为该文件现在修复您使用该版本声明创建的麻烦.那么你也不需要那个作曲家的参考,但是可以像你一样恢复提到原始的存储库.
如果您觉得您使用太多私有存储库,这些存储库都需要更多的私有存储库,并且在长列表中提及它们,您可以考虑使用Satis创建这样的找到的包的列表,而不是手动创建它们.