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任务管理器查看GPU温度【技巧】  java获取注册ip实例  iOS中将个别页面强制横屏其他页面竖屏  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  JS去除重复并统计数量的实现方法  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  免费网站制作appp,免费制作app哪个平台好?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  BootStrap整体框架之基础布局组件  Android自定义控件实现温度旋转按钮效果  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何构建满足综合性能需求的优质建站方案?  如何在阿里云高效完成企业建站全流程?  如何实现javascript表单验证_正则表达式有哪些实用技巧  公司网站制作价格怎么算,公司办个官网需要多少钱?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  韩国服务器如何优化跨境访问实现高效连接?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  移动端脚本框架Hammer.js  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  使用spring连接及操作mongodb3.0实例  Laravel storage目录权限问题_Laravel文件写入权限设置  Laravel中的Facade(门面)到底是什么原理  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何快速查询网站的真实建站时间?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  Laravel如何实现用户注册和登录?(Auth脚手架指南)  什么是javascript作用域_全局和局部作用域有什么区别?  详解阿里云nginx服务器多站点的配置  浅谈redis在项目中的应用  黑客如何通过漏洞一步步攻陷网站服务器?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  网站优化排名时,需要考虑哪些问题呢?  高防服务器:AI智能防御DDoS攻击与数据安全保障  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  如何用狗爹虚拟主机快速搭建网站?  Laravel怎么在Controller之外的地方验证数据  python中快速进行多个字符替换的方法小结  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Laravel怎么判断请求类型_Laravel Request isMethod用法  如何制作一个表白网站视频,关于勇敢表白的小标题?  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程