Composer 不管理 Git 子模块,需手动或通过脚本执行 git submodule update --init --recursive;可配置 post-install-cmd 钩子自动处理,或改用 --prefer-dist 跳过 git 操作。

Composer 本身不管理 Git 子模块,它只负责下载和安装包(通过 zip 或 git clone),子模块的初始化和更新需要你手动或额外配置完成。遇到“submodule 相关错误”,通常是因为目标包在 GitHub/GitLab 上使用了子模块,而 Composer 拉取时没触发 git submodule init && git submodule update。
先看报错关键词:比如 error: no such remote ref、fatal: No url found for submodule path、或提示某个路径是空目录但本该是子模块——这些大概率是 submodule 未加载导致的。可进入 vendor/xxx/package 目录,执行:
git status —— 看是否有未跟踪的子模块目录(显示为灰色文件夹)git submodule status —— 若输出为空或报错,说明子模块未初始化在项目根目录的 composer.json 中添加脚本钩子,利用 Composer 的 post-install-cmd 和 post-update-cmd 自动运行子模块命令:
"scripts": {
"post-install-cmd": [
"@php -r \"if (is_dir('./vendor/xxx/package/.git')) { chdir('./vendor/xxx/package'); system('git submodule update --init --recursive'); }\""
],
"post-update-cmd": [
"@php -r \"if (is_dir('./vendor/xxx/package/.git')) { chdir('./vendor/xxx/package'); system('git submodule update --init --recursive'); }\""
]
}
⚠️ 注意:把 xxx/package 替换为实际出问题的包名;多个包就复制多行;确保系统已安装 Git 且在 PATH 中。
如果只是想跳过所有 git 行为(包括 submodule),强制 Composer 使用压缩包安装:
Gaga
曹越团队开发的AI视频生成工具
1151
查看详情
composer install --prefer-dist 或 composer update --prefer-dist
composer.json 中全局设置:"preferred-install": {"*": "dist"}
这样 Composer 会从 packagist 下载 zip 包而非 clone git 仓库,自然不涉及 submodule。但前提是该包在 Packagist 上有发布 dist 归档(绝大多数主流包都有)。
如果你自己是包作者,且必须用 submodule:
main 或 master 分支直接依赖未发布的 submodule 提交;打 tag 前务必 git submodule update --remote --merge 并提交父仓库README.md 或 CONTRIBUTING.md 明确写清:克隆后需执行 git submodule update --init --recursive
基本上就这些。核心记住一点:Composer 不管 submodule,它只管包本身;子模块属于 Git 层的事,得靠你补上那一步,或者换种更“Composer 友好”的协作方式。
以上就是如何处理Composer安装依赖时出现的Git子模块(submodule)问题?的详细内容,更多请关注php中文网其它相关文章!
相关文章:
Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注
抖音从哪里进入网页版_抖音官方入口链接
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
蛙漫画网页版全站入口 蛙漫热门作品免费浏览
印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】
Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏
MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具
如何将HTML表格多行数据保存到Google Sheets
韩剧圈正版入口页面_韩剧圈官网登录链接
手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议
快手网页版在线登录 快手网页版官网入口快速访问
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画
React中useState与局部变量:理解组件状态管理与渲染机制
Centos/Linux 系统下安装 composer 的完整步骤
PHP中高效并行检查多链接状态的教程
汽水音乐在线解析 汽水音乐在线解析入口
俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】
苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】
如何在Promise链中有效终止错误处理后的执行
妖精动漫免费平台 妖精动漫官网资源观看网址
微信网页版扫码登录入口 微信网页版二维码登录入口
J*aScript打印功能_j*ascript输出控制
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡
优酷会员付费后没到账怎么办_优酷会员充值异常及解决方法
文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】
在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案
12306选座怎么选到商务座_12306商务座选择与配置说明
sublime怎么格式化代码_sublime代码美化与一键排版插件配置
智慧团建扫码登录入口 智慧团建扫码登录入口官网版
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合
知音漫客官网漫画下载_知音漫客网页版阅读记录
J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程
Golang如何优雅处理error_Golang error处理最佳实践总结
Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】
天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】
苹果手机如何防止被恶意App追踪
如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单
CSS Box Model与弹性按钮:维持布局稳定的动画实践
谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航
如何使用纯J*aScript判断Input元素是否在特定类容器内
12306选座系统怎么选连座_12306选座多人连坐操作方法
神庙逃亡小游戏在线玩 神庙逃亡小游戏入口
漫蛙2漫画入口 漫蛙正版网页漫画直达网址
漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
不同用户不同价格! 索尼开启账户个性化定价测试