我找到了一些相关的帖子,但这些并没有真正回答我的问题。 假设我想安装这个包: https://github.com/pear/Net_Socket
摘自我的composer.json:
{
"config": {
"preferred-install": "dist"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/pear/Net_Socket.git"
}
],
"require": {
"pear/net_socket": "*",
}
}
所以我需要它在没有 .git 目录的情况下安装,这样它在我的项目中不会被视为子模块。 我如何让它下载“dist”版本,就像其他人所说的那样?我必须标记提交吗?
如果包被视为 git 子模块,则您尚未将
vendor
文件夹排除在提交到您自己的存储库之外。建议将vendor文件夹添加到.gitignore
,并且不提交这些文件,只提交composer.lock
(当然还有composer.json
)。
除此之外,运行
composer install --prefer-dist
应该可以完成这项工作。请注意,如果您稍后改变主意,Composer 似乎不会更改首先使用的下载方法。如果 Composer 检测到克隆的存储库,则直接更新它比下载 ZIP 并解压它更快。如果您想更改它,请删除整个 vendor
文件夹并运行 composer update --prefer-dist
。
使用 --prefer-dist 是唯一的本机解决方案,但有时会出现根本没有可用的打包版本的情况,在这种情况下,Composer 仍会回退到 git 克隆。
我知道的唯一解决方法是在 Composer 安装后运行清理脚本来删除 Git 目录。也许是这样的命令:
find . -type d | grep .git | xargs rm -rf
请小心在您的供应商目录中运行此命令,而不是您的根目录。
composer update --prefer-dist
工作正常,但更改作曲家包(composer.json)的默认下载方法可能会更简单:
{
"config": {
"preferred-install": {
"*": "dist"
}
}
}
要安全地仅删除“vendor”目录中的“.git”目录,请使用:
find vendor -type d -name '.git' -exec rm -rf \{\} \+
即使 Q 已经提出很长时间了,但愿这也能很好地发挥作用。 它在composer.json中
"scripts": {
"post-update-cmd": ["echo [WARNING] Delete all .git dirs", "rm -rf vendor/**/**/.git"],
"post-install-cmd": ["echo [WARNING] Delete all .git dirs", "rm -rf vendor/**/**/.git"]
},