跳到主要内容

Git仓库代码打包导出指南

概述

本文介绍三种将 Git 仓库代码导出为纯净压缩包的方法,适用于发布、备份或分享代码的场景。所有方法均不包含 .git 目录和版本历史记录。


方法 1:基于临时 Tag 导出

适用场景

  • 需要基于特定版本(如 v1.0.0)导出代码。
  • 希望保留版本号信息。

操作步骤

  1. 创建临时 Tag 在本地仓库中创建一个临时 Tag(例如 dev-v1.0.3):

    git tag dev-v1.0.3
  2. 导出为压缩包 使用 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
  3. 删除临时 Tag(可选) 如果不再需要该 Tag,可删除:

    git tag -d dev-v1.0.3
  4. 输出结果

    • 生成的压缩包(如 dev-v1.0.3-client.zip)仅包含代码文件,无 Git 元数据。

方法 2:直接导出当前代码

适用场景

  • 快速导出当前最新代码(无需创建 Tag)。
  • 适用于临时备份或测试。

操作步骤

git archive --format=zip -o ../release-package.zip HEAD
  • HEAD 表示当前最新提交。

方法 3:手动打包纯净代码

适用场景

  • 需要精确控制打包内容(如排除特定文件)。
  • 适用于复杂项目或定制化需求。

操作步骤

  1. 复制代码到临时目录

    mkdir temp-release
    git ls-files | xargs -I {} cp --parents {} temp-release/
    • git ls-files 列出所有被 Git 跟踪的文件。
    • cp --parents 保留原始目录结构。
  2. 打包临时目录

    cd temp-release
    zip -r ../release-package.zip .
    cd ..
  3. 清理临时文件

    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'

注意事项

  1. 文件权限

    • 确保可执行文件(如 *.sh)在打包后仍具有执行权限。
  2. 敏感信息

    • 检查压缩包中是否包含配置文件中的敏感数据(如数据库密码)。
  3. 验证压缩包

    • 解压后运行基础测试,确保代码完整性。

总结

方法优点缺点
临时 Tag版本明确,易于管理需额外操作创建/删除 Tag
直接导出简单快捷无法指定历史版本
手动打包完全控制内容步骤复杂

根据需求选择最适合的方法!


附:常用命令速查

# 列出所有 Tag
git tag

# 查看文件权限
ls -l

# 解压 ZIP 文件
unzip release-package.zip