我们将作曲家作为我们的依赖性注入框架,它将拉入我们创建的库,Foobar,效果很好。该库Foobar有14个版本v1.1.1->v1.1.14。一直到.12作曲家更新了应用程序。但是现在我们遇到了这个错误:
Update failed (Source directory /home/username/dev/git/appname/vendor/foorbar/library has unpushed changes on the current branch:
Branch v1.1.14 could not be found on the origin remote and appears to be unpushed)
composer.json
:
{
"name": "App",
"description": "Foo Bar",
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.2.",
"foobarzf2lib/library": "v1.1."
},
"minimum-stability": "stable",
"repositories": [
{
"type": "package",
"package": {
"name": "foobarzf2lib/library",
"version": "v1.1.14",
"source": {
"url": "https://git-codecommit.eu-west-1.amazonaws.com/v1/repos/foobarzf2lib",
"type": "git",
"reference": "test"
},
"autoload": {
"psr-4": {
"FooBar\" : "FooBar/"
}
}
}
}
]
}
更多要知道的事情:
- 供应商在git中被忽略。
- 尝试做
$ composer.phar clearcache
。 - 不必每次删除库。
删除供应商文件夹并重新安装软件包。
Branch v1.1.14 could not be found on the origin remote and appears to be unpushed)
这意味着,无论您从何处拉动包装都没有v1.1.14。确保将V1.1.14推到包装提供商,一切都可以。
作曲家将本地存储库( vendor 文件夹中的一个)视为领先。每当作曲家认为它不再连接到适当的结帐(或差异)时,它拒绝更新(我认为这是好的,理智的)。
这似乎很麻烦,但这也许是为易用性付出的代价。作曲家实际上在处理更新时正在管理该Git Checkout(它配置了各种遥控器,然后是缓存,所有这些都没有其他设置)。
在我的情况下,我可以看到类似的错误(不是要问的确切错误消息,我会收到一个通知或某些文件,而没有任何直接更改遥控器发生在非forward上的任何直接更改),我解决了它以下方式(也许在缺少分支的情况下可以使用?但是,使用类似于以下的git命令来审查问题可能会带来更好的见解):
git -C <path> pull && composer update
可以工作,其中<path>
是作曲家错误消息中给出的目录路径。如果没有,Git的更具体的错误消息希望能说更多。
如果您需要在作曲家继续之前解决版本冲突。当您在GIT中有合并冲突时,这是类似的,您不能在不清楚的情况下进行下一个提交,否则您将在存储库中使用合并冲突标记(并且不会编译)。
在感兴趣的情况下,我的git配置的一个方面是 pull.rebase=merges
。从原则上讲,这是在拉动上重新恢复的(IIRC也许可以保留一些合并)。
作为替代方案 - 类似于删除全部供应商文件夹 - 仅删除报告的路径应起作用。由于这是git,存储库已经消失了,而且随着作曲家的关注,它不再是:
rm -rf -- <path> && composer update
<path>
是(必须是)作曲家错误消息中的路径。请注意rm -rf
,很容易到达 - 仅供参考。
(这类似于作曲家的报道,问题跟踪器中的分辨率)