使用 --prefer-source 可从源码创建项目并保留 .git 目录,前提是包的 composer.json 中配置了 source 且可访问;执行如 composer create-project laravel/laravel myapp --prefer-source 后需检查 .git 目录是否存在,结合 --keep-vcs 与 -vvv 更佳。

使用 composer create-project --prefer-source 可以从源码创建项目,同时保留版本控制信息(如 .git 目录),前提是包的源地址是通过 Git 等 VCS 托管的,并且 Composer 能正确识别并克隆源。
1. 使用 --prefer-source 的作用
--prefer-source 告诉 Composer 优先从项目的源代码仓库(如 GitHub、GitLab)克隆项目,而不是下载打包的压缩文件(dist)。这样会包含完整的 .git 目录,便于后续开发和提交。
常见场景:- 你想基于某个开源项目二次开发
- 需要修改依赖包并提交更改
- 希望保留原始提交历史
2. 基本命令格式
运行以下命令:
composer create-project vendor/package-name project-directory --prefer-source例如,创建 Laravel 项目并保留 .git:
composer create-project laravel/laravel myapp --prefer-source执行后,Composer 会尝试从源(如 GitHub 的 Git 仓库)克隆代码,而非下载 zip 包。
3. 确保能拉取到 .git 目录的关键点
并不是所有情况下都会生成 .git 目录。需满足以下条件:
- 包的 composer.json 中定义了 source:维护者必须在包中配置 "source" 字段指向 Git 仓库
- 你有权限访问该仓库:私有仓库需要配置 SSH 或 OAuth token
- 网络可访问 Git 服务:如 github.com、gitlab.com 等
示例 source 配置:
"source": { "type": "git", "url": "https://github.com/laravel/laravel.git", "reference": "master" }4. 验证是否成功获取 .git
项目创建完成后,进入目录检查:
cd project-directoryls -la
如果看到 .git/ 目录,说明源码克隆成功。你可以执行 git log、git status 等操作。
若没有 .git 目录,可能是 Composer 回退到了 dist 下载。可通过增加 -vvv 查看详细日志:
composer create-project vendor/package --prefer-source -vvv5. 其他建议
- 使用 SSH 地址更稳定:确保全局配置了 SSH 密钥,避免 HTTPS 认证问题
- 指定版本或分支:加上版本号更精确,如 dev-main 或 1.0.0
- 结合 --keep-vcs 使用:明确保留版本控制信息(Composer 2+ 更支持)
例如:
composer create-project laravel/laravel myapp dev-master --prefer-source --keep-vcs基本上就这些。只要包支持源码安装,--prefer-source 就能帮你拿到带 .git 的完整项目。不复杂但容易忽略配置细节。










