我已经创建了两个git存储库,我们需要使用PHP的编写器将它们安装在我们的一个web应用程序中。每个存储库上有两个分支,master和dev-master。
在我想要安装的包的项目中,我创建了下面的编写器。Json包配置:
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "proprietary",
"repositories": [
{
"type": "package",
"package": {
"name": "impression-works/pdf-generator",
"version": "dev-master",
"source": {
"url": "git@github.com:...",
"type": "git",
"reference": "dev-master"
}
}
},
{
"type": "package",
"package": {
"name": "impression-works/psd-templates",
"version": "dev-master",
"source": {
"url": "git@github.com:...",
"type": "git",
"reference": "dev-master"
}
}
}
],
"require": {
// ...
"impression-works/psd-templates": "dev-master",
"impression-works/pdf-generator": "dev-master"
},
"autoload": {
// ...
"psr-0": {
"ImpressionWorks\PsdTemplates": "vendor/impression-works/psd-templates/src",
"ImpressionWorks\PdfGenerator": "vendor/impression-works/pdf-generator/src"
}
},
// ...
"config": {
"preferred-install": "dist"
},
"minimum-stability": "stable"
}
当我最初运行composer update或composer install时,印象工程包安装完美,然而,如果我对这些存储库进行更改,并将它们推送到dev-master,任何后续调用composer update只是报告:
Nothing to install or update
我如何强制composer更新到我们的这两个自定义包的最新提交?
我每周从谷歌搜索中多次访问这个页面,只是看到它没有回答我的问题。
我使用的是packagist.org,而不是VCS。我不想使用VCS,因为它会使Composer更慢,而且它已经非常慢了。
考虑以下场景。早期开发中的应用程序依赖于我正在构建的包。这个包也在dev的早期,所以dev-master作为版本每次都能得到最新的master。
我修复了包中的一个严重错误,提交&按下它,按下packagist.org中的更新按钮,然后运行composer update
,绝对没有任何变化。
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
此时,您可以尝试清除缓存。没用的。
在某个时间点,你会偶然发现这个2012年的公开问题。在此之后,您将发现安装最新版本的唯一方法是在require中使用commit hash。
composer require vendor/package dev-master#0d7d6c88
这需要您手动获取提交散列并将版本更新到composer.json
,然后再次运行composer update
。与您期望的依赖项管理器不完全一样。看起来这个问题永远不会消失,所以除非有人写一个更好的作曲家,否则我们就会被这种行为所困扰。
另一种选择是标记你想要使用Composer下载的每一个提交。小心混淆最小稳定性规则。
您应该使用VCS类型的自定义存储库。您使用的包仓库有一些限制,如文档中所强调的:
- Composer不会更新包,除非你更改了版本字段。
- Composer不会更新提交引用,所以如果你使用master作为引用,你将不得不删除包来强制更新,并且必须处理不稳定的锁文件。
我刚刚遇到了同样的问题。弄清楚之后,解决方案相当简单:清理缓存。
约瑟夫和克里斯蒂安所寻找的东西可以用这两行来完成:
composer clearcache
composer upgrade
为我加载最后一个存储库主库。希望它能帮助下一个阅读这篇文章的人。
重要提示:
你必须等待GitHub服务钩子启动并更新packagist.org上的编译器包,或者在网站上手动使用' update '按钮。
这不是几秒钟的事…您必须等待一段时间(通常是一到五分钟),让打包人员有机会分发更改。
所以为了持续快速的开发,我只手动cd vendor/base/package
和git update
。并不时尝试上述clearcache
和upgrade
。
比@Bitclaw的答案更简单的版本,对我来说,以下内容完美无瑕:
composer update --prefer-source developer/package
您需要在安装软件包之前清除缓存composer clearcache
。
如果包已经安装,你必须删除它。只有在此之后,清除缓存并重新安装包。
运行composer升级有点危险,因为它可能会更新所有其他依赖项。在本例中,我将运行以下命令:
composer clearcache;composer update --lock;composer install --prefer-source -vvv
试试这个
composer clear-cache
composer update