Git仓库代码打包导出指南
概述
本文介绍三种将 Git 仓库代码导出为纯净压缩包的方法,适用于发布、备份或分享代码的场景。所有方法均不包含 .git 目录和版本历史记录。
方法 1:基于临时 Tag 导出
适用场景
- 需要基于特定版本(如
v1.0.0)导出代码。 - 希望保留版本号信息。
操作步骤
-
创建临时 Tag 在本地仓库中创建一个临时 Tag(例如
dev-v1.0.3):git tag dev-v1.0.3 -
导出为压缩包 使用
git archive命令导出代码:# 导出客户端代码
git archive --format=zip -o ../dev-v1.0.3-client.zip dev-v1.0.3
# 导出服务端代码(可选)
git archive --format=zip -o ../dev-v1.0.3-server.zip dev-v1.0.3 -
删除临时 Tag(可选) 如果不再需要该 Tag,可删除:
git tag -d dev-v1.0.3 -
输出结果
- 生成的压缩包(如
dev-v1.0.3-client.zip)仅包含代码文件,无 Git 元数据。
- 生成的压缩包(如
方法 2:直接导出当前代码
适用场景
- 快速导出当前最新代码(无需创建 Tag)。
- 适用于临时备份或测试。
操作步骤
git archive --format=zip -o ../release-package.zip HEAD
HEAD表示当前最新提交。
方法 3:手动打包纯净代码
适用场景
- 需要精确控制打包内容(如排除特定文件)。
- 适用于复杂项目或定制化需求。
操作步骤
-
复制代码到临时目录
mkdir temp-release
git ls-files | xargs -I {} cp --parents {} temp-release/git ls-files列出所有被 Git 跟踪的文件。cp --parents保留原始目录结构。
-
打包临时目录
cd temp-release
zip -r ../release-package.zip .
cd .. -
清理临时文件
rm -rf temp-release
高级选项
排除特定文件
通过 .gitignore 文件或手动筛选排除不需要的文件:
git ls-files | grep -v "logs/" | xargs -I {} cp --parents {} temp-release/
处理子模块
如果项目包含子模块,需递归导出:
git submodule foreach --recursive 'git archive --prefix=$path/ HEAD | tar -x -C ../temp-release'
注意事项
-
文件权限
- 确保可执行文件(如
*.sh)在打包后仍具有执行权限。
- 确保可执行文件(如
-
敏感信息
- 检查压缩包中是否包含配置文件中的敏感数据(如数据库密码)。
-
验证压缩包
- 解压后运行基础测试,确保代码完整性。
总结
| 方法 | 优点 | 缺点 |
|---|---|---|
| 临时 Tag | 版本明确,易于管理 | 需额外操作创建/删除 Tag |
| 直接导出 | 简单快捷 | 无法指定历史版本 |
| 手动打包 | 完全控制内容 | 步骤复杂 |
根据需求选择最适合的方法!
附:常用命令速查
# 列出所有 Tag
git tag
# 查看文件权限
ls -l
# 解压 ZIP 文件
unzip release-package.zip