首页/开发/Git 与协作速查/git archive 导出发布包
Git 基础与命令88 条

git archive 导出发布包

把指定版本打包为 tar/zip:不含 .git 目录,--prefix 添加顶层目录,.gitattributes 中 export-ignore 的路径会被排除。

Git 与协作速查开发更新于 2026-10-13

导出发布包是什么

把指定版本打包成压缩文件,内容不含版本库目录,并可用顶层目录参数避免解压污染当前目录。它适合生成发布包与交付物:按标签导出而不是打包工作区,构建产物与发布点一一对应,可以复现。

基本信息

用途按提交或标签导出源码包
格式tar、tar.gz、zip,按参数或输出文件名扩展名决定
顶层目录--prefix=app/ 在包内增加一层目录
排除规则在属性文件里给路径标记导出时忽略,可排除测试与文档
执行位置可在仓库内执行,也可对支持的远端直接导出

典型使用场景

  • 生成源码发布包,交付客户或上架到制品库
  • 为制品签名与校验提供固定的输入内容
  • 按标签导出,用于比较两个版本之间的文件差异
  • 导出不含版本库文件的干净源码
  • 在流水线里脚本化生成打包文件

常用示例

常用示例
git archive --format=tar.gz -o app-1.2.0.tgz v1.2.0   # 按标签导出压缩包
git archive --format=zip --prefix=app/ HEAD > app.zip   # 加顶层目录导出
git archive v1.2.0 | tar -t | head                      # 先列出内容再决定是否解压
git archive --remote=ssh://git@example.com/srv/git/app.git v1.2.0 > app.tar
tar -tzf app-1.2.0.tgz | wc -l                          # 核对包内文件数量

参数对照

参数作用
--format指定打包格式,常见 tar、tar.gz、zip
--prefix在包内增加一层顶层目录
-o 文件写入指定文件而不是标准输出
--remote对支持该功能的远端直接导出
导出内容不含子模块文件,依赖子模块的项目需要另行处理;交付前先解压核对目录结构,避免上线时才缺文件。
默认只导出指定提交所指向的内容,工作区里尚未提交的改动不会出现在包里,这正是它可复现的原因。
打包后把文件数量与校验值一并留档,交付时与接收方核对,能快速确认传输过程没有损坏或被替换。
导出大仓库时先在列表模式下确认内容,再决定是否解压:一次写出完整包会占用较多磁盘空间。

易错点

  • 直接用工作区目录手工打包,会把本地未提交的改动与临时文件一起带出去,交付物无法复现
  • 忘记加顶层目录前缀,解压时文件散落在当前目录,可能覆盖已有文件
  • 导出的包不含子模块与版本库文件,交付前先解压验证,否则容易到部署阶段才发现问题
  • 把标签打成与实际发布不一致的引用,产物与发布点错位,事后无法确认交付的到底是哪一版

数据来源与参考

  • Git 官方文档:git-archive
  • Git 官方文档:gitattributes(export-ignore)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌