Composer 默认用 dist 方式安装包(无 .git),启用 --prefer-source 可强制 git clone 保留完整仓库;支持与否取决于包是否在 composer.json 中声明 source 信息。
默认情况下,Composer 安装或更新包时会使用
(压缩包)方式,即下载 ZIP/TAR 归档并解压,这种模式下不会包含
目录。若你希望在
中的包保留完整的 Git 仓库(含
子目录),以便查看提交历史、切换分支、打补丁或参与开发,需强制 Composer 使用
方式 —— 即通过
拉取代码。
启用 --prefer-source 全局或单次生效
该选项告诉 Composer 优先从源码仓库(如 GitHub)克隆,而非下载发行版归档。
单次更新时加上参数:
全局设置(永久生效):
仅对某项目启用(推荐):
(写入当前项目的
的
段)
确认是否已成功拉取 source
执行后进入
(以 monolog 为例)目录,运行:
GitHub CopilotGitHub AI编程工具,实时编程建议下载
若输出
,说明已克隆为完整仓库;若无,则可能是包本身未配置
信息,或被缓存干扰。
注意:不是所有包都支持 source 模式
Composer 能否走
取决于包的
是否声明了
类型仓库(如
和有效
)。部分私有包或老旧包可能只提供
,此时
会被忽略。
可手动检查包的元数据:
,关注
字段是否存在且非空
若缺失,可尝试在
中显式添加 Git 仓库地址(适用于 fork 或私有库)
避免意外覆盖已有 .
git
目录
如果之前用
方式安装过某个包,再执行
更新时,Composer 默认会先清空原目录再重新 clone —— 这会导致你手动添加的
修改丢失。安全做法是:
先删掉对应
目录(或整个
),再运行
或使用
减少干扰
dist.gitvendor/.git/sourcegit clonecomposer update --prefer-sourcecomposer config --global prefer-source truecomposer config prefer-source truecomposer.jsonconfigvendor/monolog/monologls -a | grep git.gitsourcesourcecomposer.jsonsource"type": "git""url"dist--prefer-sourcecomposer show monolog/monolog --allsourcerepositoriesdist--prefer-source.gitvendor/xxx/xxxvendorcomposer install --prefer-sourcecomposer update --prefer-source --no-scripts --no-plugins