Composer create-project保留git信息 keep-vcs参数使用【技巧】

发布时间 - 2026-01-30 00:00:00    点击率:
默认情况下 composer create-project 会删除目标目录的 .git,需加 --keep-vcs 才保留原始 Git 历史和配置;它不自动拉取或切分支,仅保留现场,且不兼容已存在 .git 的目录。

默认情况下 composer create-project 会清空目标目录里的 .git 目录,即使源项目是 Git 仓库,新生成的项目也不再是 Git 工作区。想保留原始提交历史和远程配置?必须显式加 --keep-vcs 参数。

为什么 --keep-vcs 不是默认行为

Composer 设计上把 create-project 当作“模板初始化”而非“克隆”,目的是避免意外继承上游仓库的 origin、分支状态或敏感钩子。但如果你明确要复刻整个 Git 上下文(比如 fork 后二次开发),跳过清理就很有必要。

  • 不加 --keep-vcs:Composer 会 rm -rf .git,然后执行 install
  • 加了之后:只删 vendor/ 和生成的文件,保留原 .git/HEADconfig
  • 注意:它不会自动 git pull 或切换分支,只是保留现场

--keep-vcs 的典型使用场景

适用于需要延续原始仓库生命周期的操作,不是所有项目都需要它。

  • 基于某个开源包

    (如 laravel/laravel)快速搭建私有项目,并希望后续能 git diff upstream/main 对比变更
  • 团队内部维护一个带定制脚本和 CI 配置的模板库,每个新项目都应继承其完整 Git 历史
  • 在 CI 中动态生成项目骨架,同时要求产物可追溯到模板仓库某次 tag

容易被忽略的副作用和限制

--keep-vcs 看似简单,但几个边界情况常导致误操作:

  • 如果目标目录已存在且含 .git,Composer 会报错退出,不会覆盖 —— 必须先清空或换路径
  • 原始仓库若用了 Git 子模块(.gitmodules),--keep-vcs 不会自动 git submodule update --init,得手动补
  • 某些包的 composer.jsonpost-create-project-cmd 脚本,它们仍会运行,可能干扰原有 Git 状态(例如重写 .git/config
  • Windows 下若原始 .git 权限异常,可能导致 git status 报错,建议随后运行 git config --local core.autocrlf true 修复

真正起作用的只有 --keep-vcs 这一个参数,别信网上说的 --no-install--prefer-source 能替代它;后者影响的是依赖拉取方式,跟项目根目录的 Git 元数据完全无关。


# laravel  # js  # git  # json  # composer  # windows  # ai  # win  # stream  # 二次开发  # 为什么  # 继承  # 报错  # 清空  # 的是  # 情况下  # 几个  # 这一  # 如果你  # 切分  # 很有  # 适用于 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速建站并高效导出源代码?  网站图片在线制作软件,怎么在图片上做链接?  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何在宝塔面板中创建新站点?  b2c电商网站制作流程,b2c水平综合的电商平台?  油猴 教程,油猴搜脚本为什么会网页无法显示?  如何在云主机上快速搭建多站点网站?  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  如何快速上传自定义模板至建站之星?  简单实现Android文件上传  ,南京靠谱的征婚网站?  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel如何保护应用免受CSRF攻击?(原理和示例)  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  EditPlus中的正则表达式实战(5)  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  北京专业网站制作设计师招聘,北京白云观官方网站?  在线制作视频的网站有哪些,电脑如何制作视频短片?  如何用西部建站助手快速创建专业网站?  如何快速生成专业多端适配建站电话?  百度浏览器如何管理插件 百度浏览器插件管理方法  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Android仿QQ列表左滑删除操作  JavaScript中的标签模板是什么_它如何扩展字符串功能  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  如何构建满足综合性能需求的优质建站方案?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Python文件流缓冲机制_IO性能解析【教程】  bootstrap日历插件datetimepicker使用方法  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  简历在线制作网站免费版,如何创建个人简历?  如何快速搭建高效可靠的建站解决方案?  如何在IIS7上新建站点并设置安全权限?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  MySQL查询结果复制到新表的方法(更新、插入)  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  PHP 500报错的快速解决方法  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  HTML 中如何正确使用模板变量为元素的 name 属性赋值