不存在--keep-vfs参数,因composer官方无此选项;真正保留git历史的唯一可靠方式是git clone + composer install,而非create-project。

composer create-project 没有 --keep-vfs 参数,这个参数根本不存在 —— 所有试图使用它的操作都会报错 Unknown option: --keep-vfs。
为什么找不到 --keep-vfs?
Composer 官方文档和源码中均无 --keep-vfs 这个选项。它可能是对 Git 的 --keep-dir、VFS(Virtual File System)概念的误记,或是混淆了其他工具(如某些私有包管理器或定制脚本)的行为。
-
composer create-project默认会克隆项目仓库(如果源是 Git URL),但随后会执行git reset --hard并删掉.git目录,只保留最终代码快照 - 若源是 Packagist 上的包(如
laravel/laravel),Composer 下载的是 dist 归档(zip/tar),天然不含 Git 历史 - 即使你传入
git@...或https://...仓库地址,只要没加--repository或没强制走 source 安装,仍可能走 dist 流程
如何真正保留 Git 提交历史?
唯一可靠方式是绕过 create-project,直接用 git clone + 手动安装依赖:
- 运行
git clone https://github.com/vendor/project.git my-app - 进入目录:
cd my-app - 执行
composer install(确保composer.json存在且合法) - 如需切换分支或 tag,直接
git checkout v2.0再composer install
这样 .git 完整保留,所有 commit、tag、remote 都可用。
有没有折中方案?
如果你必须用 create-project 且源支持 source 安装(比如自建 Satis 或私有仓库),可尝试:
- 强制走 source:在
composer.json中设置"prefer-source": true,或临时加-o(--prefer-source)参数 - 但注意:即使走 source,Composer 仍会在最后删除
.git—— 这是硬编码行为,无法通过参数关闭 - 部分老版本 Composer(--no-install 组合技,但现代版本已不可靠
想留 Git 历史,就别用 create-project;它设计目标就是“初始化一个干净可部署的副本”,不是“克隆可开发的仓库”。这点容易被忽略,但恰恰是问题根源。











