Git Archive 高级用法:只导出指定子目录并自动版本号注入
标准 git archive 可以生成 tar/zip,但如何排除 .git 文件夹、只包含特定文件或动态写入版本号?本教程深入 git archive 的自定义与后处理技巧。 · 难度:入门 · +10XP
Git Archive 高级用法:只导出指定子目录并自动版本号注入
很多发布流程需要从仓库中提取干净的源代码包,但 git archive 默认导出整个工作树。通过 --prefix 和路径参数可以精确控制内容。更强大的是结合 export-subst 属性,可以在文件中自动插入 commit hash、日期等信息。本教程会展示如何创建一个仅包含 src/ 和 README.md 的发布包,并让其中的 version.txt 动态包含 git describe 结果。还会演示如何用自定义导出过滤脚本排除所有测试文件。
# 仅导出 src 目录
git archive -o release.zip HEAD:src
# 使用 .gitattributes 注入版本信息
echo 'version.txt export-subst' >> .gitattributes
echo 'VERSION=$Format:%(describe)$' > version.txt
git archive -o release-with-version.tar.gz HEAD
# 排除多个目录
git archive --format=tar HEAD --output=code.tar -- '*.go' ':(exclude)vendor'