You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用git archive命令打包未被Git跟踪的目录?

报错原因

git archive 从设计上就只会打包Git提交树里已追踪的文件,根本不会处理未入库的内容,报错原因非常明确:

  • /build目录被加入.gitignore后从未提交到Git版本库,HEAD指向的提交树里根本不存在这个路径
  • 执行git archive --format=zip HEAD ./build > deploy.zip时,Git会先去HEAD的提交树里查找./build路径,查找失败又识别到该目录是未追踪状态,直接抛出fatal: current working directory is untracked错误
  • 尝试的--add-file方案写法有误:命令末尾追加的./build/参数依然会触发Git从提交树查找路径的逻辑,和--add-file追加本地未追踪文件的逻辑冲突,无法正常运行。
实现方法

基于git archive的实现方案

该方案要求Git版本≥2.38,--add-file参数是这个版本才新增的特性,支持向压缩包中追加未被Git追踪的本地文件,具体用法分两种场景:

  • 场景1:需要同时打包仓库已追踪的源码 + build目录
    执行命令时不要在尾部追加./build这类从提交树提取内容的路径参数,避免触发查找逻辑:
    git archive --format=zip --add-file=build HEAD > deploy.zip
    
  • 场景2:仅需要打包build目录,不需要带入仓库其他源码
    直接基于Git内置的固定空树哈希生成空压缩包,再追加build目录即可,不会带入任何多余的版本库文件:
    git archive --format=zip --add-file=build 4b825dc642cb6eb9a060e54bf8766f636024a158 > deploy.zip
    

CI环境通用兼容方案

如果CI环境的Git版本低于2.38,无法使用--add-file参数,之前使用的zip命令本身是可行的。如果不想手动维护node_modules这类排除规则,可以结合Git命令自动读取.gitignore规则生成排除列表,适配性更强:

zip -r deploy.zip ./build -x "*.git/*" $(git ls-files --others --ignored --exclude-standard | sed 's/ /\\ /g')

该命令会自动排除所有被.gitignore标记的文件,不需要手动维护排除项列表。

内容的提问来源于stack exchange,提问作者contool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:15:51