git archive
将指定版本的项目文件打包为 tar 或 zip 归档,不包含 .git 目录
语法
git archive [<options>] <tree-ish> [<path>...]
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
--format=<fmt> |
指定归档格式(tar、zip、tar.gz) | |
常用 |
--prefix=<prefix>/ |
为归档中的文件添加目录前缀 | |
常用 |
-o <file> |
输出到指定文件 | |
常用 |
--remote=<repo> |
从远程仓库导出(无需本地克隆) | |
常用 |
-l |
列出支持的归档格式 | |
常用 |
示例
将当前版本打包为 zip
git archive -o release.zip HEAD
将 v1.0.0 标签打包并添加目录前缀
git archive --format=tar.gz --prefix=myapp-v1.0/ -o myapp-v1.0.tar.gz v1.0.0
只打包指定目录
git archive HEAD src/ docs/
打包时排除特定文件
git archive --format=zip HEAD -o dist.zip -- ':!node_modules' ':!.env'
直接从远程仓库导出
git archive --remote=git@github.com:user/repo.git HEAD | tar -x
技巧
- 适合生成不含 .git 历史的发布包
- CI/CD 中常用于构建部署包
- 配合 --prefix 可以让解压后自动放在一个目录中
- 比手动 zip 更干净,自动排除 .git 目录和 .gitignore 中的文件