纯净源码包应仅含主代码、必要依赖声明和运行配置,排除.git、vendor、tests等开发无关文件;推荐用git archive命令配合--exclude精准过滤,生成不含元数据的zip包。
macos 上用 git 的 archive 命令导出纯净源码包,核心是避开无关文件、保留可运行结构,不依赖 git 仓库元数据(如 .git 目录),也不打包开发专用文件(如测试、文档、配置)。
明确归档目标:什么该留,什么该删
所谓“纯净源码包”,是指能直接部署或交接的最小可用代码集合。它应包含:
- 项目主代码(如
src/、app/、index.php等) - 必要依赖声明(如
composer.json、package.json) - 运行所需配置(如
.env.example、nginx.conf)
以下通常不应包含:
-
.git/目录(Git 元数据) -
vendor/或node_modules/(由安装命令生成,体积大且易变) -
tests/、phpunit.xml、.github/(纯开发用途) -
README.md、CONTRIBUTING.md(对外说明类文件,非运行必需) -
composer.lock(锁定开发环境依赖,生产以composer install为准)
用 git archive 直接打包(推荐基础方式)
在项目根目录执行:
git archive --format=zip --output=myapp-$(date +%Y-%m-%d).zip HEAD --prefix=myapp/ --exclude='.git*' --exclude='tests/**' --exclude='phpunit.xml' --exclude='README.md' --exclude='CONTRIBUTING.md' --exclude='composer.lock' --exclude='node_modules/**' --exclude='vendor/**'
说明:
-
HEAD表示当前提交;也可指定 tag,如v2.1.0 -
--prefix=myapp/让解压后所有文件在myapp/子目录下,避免散落根目录 -
--exclude支持通配符,**匹配多级子目录(Git 2.22+ 支持) - macOS 自带的
git archive默认支持 zip,无需额外工具
配合 Composer 打包(适合 PHP 项目)
若项目依赖 Composer,建议先清理再归档:
- 运行
composer install --no-dev --optimize-autoloader(生成优化后的 autoload) - 但不要把
vendor/打进源码包——它属于构建产物,不是源码 - 真正要打包的是
composer.json和代码,让接收方自行composer install
所以仍推荐用 git archive,仅排除 vendor/,不把它纳入源码包范畴。
自动化小技巧:加进 Git alias 或 Makefile
避免每次敲长命令,可在 ~/.gitconfig 中添加别名:
[alias]
package = "!f() { git archive --format=zip --output="myapp-$(date +%Y-%m-%d).zip" HEAD --prefix=myapp/ --exclude='.git*' --exclude='tests/**' --exclude='phpunit.xml' --exclude='README.md' --exclude='composer.lock' --exclude='node_modules/**' --exclude='vendor/**'; }; f"
之后只需运行:
git package
或写个简易 Makefile:
package: git archive --format=zip --output=myapp-latest.zip HEAD --prefix=myapp/ \ --exclude='.git*' --exclude='tests/**' --exclude='*.md' --exclude='composer.lock'
执行 make package 即可。











