鸿蒙三方库适配读懂 `thirdparty/AES/.gitignore`:哪些文件不该进 Git?
鸿蒙三方库适配读懂thirdparty/AES/.gitignore哪些文件不该进 Git欢迎大家加入开源鸿蒙跨平台开发者社区前言.gitignore是 Git 的「忽略清单」列在里面的路径或模式默认不会被git add进版本库。三方库适配目录里往往既有需要长期保存的脚本和文档也有下载的源码包、本地编译目录、日志——若全部提交仓库会膨胀且容易产生机器相关路径、二进制冲突。本仓库的.gitignore做了两件重要取舍压缩包用以/开头的模式只忽略仓库根目录下的.tar.gz/.tgz不忽略子目录例如output/里的归档方便把构建产物一并纳入版本管理。构建树忽略tiny-AES-c-*/和解压后的*-build等避免把 lycium/cmake 生成的大量中间文件提交上去。下面按行说明每一条规则在表达什么.gitignore里没有「字段」有的是模式 pattern文中把每一行都当成一条规则来讲。文件全文便于对照# 仅忽略根目录源码包与杂项归档output/ 下构建产物需纳入版本库 /tiny-AES-c-*.tar.gz /*.tar.gz /*.tgz *.zip tiny-AES-c-*/ armeabi-v7a-build arm64-v8a-build *-build *.log last_error *-lycium_build.log download.log逐条规则说明第 1 行注释# ...内容含义以#开头Git 忽略注释行不参与匹配。文案大意说明设计意图根目录的源码包/杂包要忽略output/下的产物需要提交所以不要写output/进忽略列表。/tiny-AES-c-*.tar.gz要点说明行首/只相对当前.gitignore所在目录即thirdparty/AES/根匹配不会匹配子目录里同名模式的文件。tiny-AES-c-*.tar.gz匹配 lyciumHPKBUILD下载的上游源码包如tiny-AES-c-1.0.0.tar.gz。作用避免把体积大、可重新下载的源码压缩包提交进 Git。/*.tar.gz与/*.tgz要点说明/*.tar.gz忽略本仓库根目录下任意名称的.tar.gz例如你本地打的arm64-v8a.tar.gz测试包。/*.tgz同上针对.tgz后缀。为何带/同样只作用在 AES 目录根不会忽略output/AES/arm64-v8a.tar.gz这类在子目录里的包从而满足「output 要提交」的需求。*.zip要点说明行首没有/会在任意层级匹配以.zip结尾的文件。作用上游或工具若产生zip包一般也不需要进库若将来必须在子目录提交某个 zip需用!反忽略或收窄规则。tiny-AES-c-*/要点说明匹配目录解压后的tiny-AES-c-1.0.0/整棵源码树被忽略。作用解压目录体积大、且prepare/build会改其中文件应由各开发者本地build_hpk.sh生成不纳入版本库。armeabi-v7a-build与arm64-v8a-build要点说明无/前缀在任意路径下名为armeabi-v7a-build或arm64-v8a-build的目录/文件都会被忽略。对应关系与HPKBUILD里cmake -B$ARCH-build生成的目录名一致如arm64-v8a-build。作用CMake 构建树文件多、可复现不必提交。*-build要点说明通配符*任意前缀 -build的名字都会被匹配例如未来若出现x86_64-build。与上一行的关系armeabi-v7a-build等已被上一行覆盖本行是兜底防止漏网的新架构构建目录。注意范围较宽若某合法目录名恰好以-build结尾且需要提交需单独用!取消忽略当前 AES 仓库无此需求。*.log要点说明任意目录下所有.log日志文件忽略。典型文件download.log、各架构lycium 构建日志等下面还有更具体的规则与之配合。last_error要点说明匹配名为last_error的文件build_hpk.sh在失败时可能写入该文件。作用属于本地构建状态不应进库。*-lycium_build.log要点说明后缀匹配如AES-1.0.0-arm64-v8a-lycium_build.log。作用lycium 按包名/版本/架构生成的构建日志体积与内容随机器变化忽略即可。download.log要点说明精确文件名wget下载时build_hpk.sh可能产生的日志。与*.log的关系已被*.log覆盖也无妨单独列出是为了一眼看出下载日志也被刻意排除。刻意「没有」忽略的内容帮助理解以下类型当前未出现在.gitignore中因此会被 Git 正常跟踪若已git adddocs/下的技术博客与说明。HPKBUILD、HPKCHECK、README_zh.md、README.OpenSource、SHA512SUM、hnp.json、LICENSE等适配元数据。output/目录及其中的预置构建产物与注释中的产品策略一致。若你本地还有未列出的临时文件如编辑器Untitled可视需要追加规则或用全局 gitignore处理个人习惯文件。总结.gitignore用模式告诉 Git不要跟踪哪些路径本文件针对AES 适配目录定制核心是忽略可再生的源码包与构建树、忽略日志与错误戳同时不把output/整体排除。行首/表示只匹配本目录根这是/*.tar.gz与output/里 tar 包可提交的关键技巧。tiny-AES-c-*/与*-build覆盖解压源码与CMake 输出*.log等清理构建与下载痕迹。升级pkgver或改构建目录命名时记得检查.gitignore是否仍覆盖新的临时产物必要时增删一行即可。如需对照实际构建流程可结合鸿蒙PC tiny-AES-c三方库适配实践.md与HPKBUILD中的builddir、packagename理解为何忽略tiny-AES-c-*。实战案例如何修改 .gitignore场景一新增架构支持假设要支持 x86_64 架构需要添加对应的构建目录# 现有规则 armeabi-v7a-build arm64-v8a-build *-build # 新增如果 *-build 不够明确 x86_64-build说明由于已有*-build规则实际上 x86_64-build 会自动被忽略。但显式写出可以提高可读性。场景二保留特定日志文件如果需要提交某个重要的日志文件如基准测试结果# 忽略所有日志 *.log # 但保留基准测试结果 !benchmark_results.log注意!表示反忽略必须放在忽略规则之后。场景三忽略 IDE 配置文件如果团队成员使用不同的 IDE# IDE 配置 .vscode/ .idea/ *.swp *.swo *~ .DS_Store场景四临时测试文件# 临时测试 test_temp/ tmp_*.c debug_*.log.gitignore 模式语法详解基础语法模式含义示例*匹配任意字符除/*.log匹配所有 .log 文件?匹配单个字符test?.c匹配 test1.c, testA.c[]匹配字符范围*[0-9].log匹配数字结尾的日志**匹配任意层级目录**/test匹配任何位置的 test 目录路径相关模式含义示例/foo仅匹配根目录下的 foo/tiny-AES-c-*.tar.gzfoo/仅匹配目录build/忽略所有 build 目录foo/**/barfoo 下任意层级的 bartest/**/output否定模式模式含义示例!foo不忽略 foo!important.log保留该文件常见问题与解决方案Q1: 为什么 output/ 下的 tar.gz 没被忽略A:因为规则是/*.tar.gz带前导/只匹配根目录。如果写成*.tar.gz无/则会忽略所有层级的 tar.gz。验证方法# 测试某个文件是否被忽略gitcheck-ignore-voutput/AES/arm64-v8a.tar.gz# 查看所有被忽略的文件gitstatus--ignoredQ2: 如何忽略除某个文件外的所有文件A:使用否定模式# 忽略所有 .log *.log # 但保留 important.log !important.log注意顺序否定规则必须放在忽略规则之后。Q3: 为什么 .gitignore 对已跟踪的文件无效A:.gitignore只对未跟踪的文件生效。如果文件已被 Git 跟踪需要先移除# 从 Git 中移除但保留本地文件gitrm--cachedsomefile.log# 然后提交gitcommit-mStop tracking somefile.logQ4: 如何处理全局忽略A:可以配置全局 gitignore# 设置全局 gitignore 文件gitconfig--globalcore.excludesfile ~/.gitignore_global# 编辑全局忽略规则echo*.swp~/.gitignore_globalecho.DS_Store~/.gitignore_global建议个人编辑器相关文件放在全局 gitignore项目相关文件放在项目 .gitignore。与构建系统的配合与 HPKBUILD 的关系HPKBUILD 变量对应 .gitignore 规则原因packagename/*.tar.gz源码包可重新下载builddirtiny-AES-c-*/解压目录可重新生成ARCH-build*-buildCMake 构建树可重新生成与构建日志的关系日志文件是否忽略原因download.log是下载过程日志可重现*-lycium_build.log是构建过程日志可重现last_error是临时错误标记benchmark.log可选如果是基准测试结果可能需要保留验证与测试检查文件是否被忽略# 检查单个文件gitcheck-ignore-vtiny-AES-c-1.0.0.tar.gz# 查看所有被忽略的文件gitstatus--ignored# 列出被忽略的文件详细gitls-files--others--ignored--exclude-standard测试 .gitignore 规则# 创建测试文件touchtest_ignore.log# 检查是否被忽略gitcheck-ignore test_ignore.logechoIgnored||echoNot ignored# 清理测试文件rmtest_ignore.log调试复杂规则# 使用 git add -n 模拟添加gitadd-n.# 查看哪些文件会被添加gitstatus最佳实践总结1. 分层管理项目根目录 .gitignore ↓ thirdparty/AES/.gitignore (本文件) ↓ 全局 ~/.gitignore_global原则项目级与构建相关的临时文件全局级个人编辑器和系统文件2. 注释说明# 构建产物 - 可重新生成 *-build/ # 源码包 - 可重新下载 /*.tar.gz # 日志文件 - 构建过程记录 *.log # IDE 配置 - 个人偏好 .vscode/3. 定期清理# 查看被忽略的大文件gitls-files--others--ignored--exclude-standard|xargsdu-sh|sort-hr|head-20# 清理构建产物gitclean-Xfd# 删除所有被忽略的文件4. 团队协作在团队中统一 .gitignore 规范使用相同的编辑器配置忽略规则约定哪些日志需要提交定期审查和更新规则扩展阅读Git 忽略机制原理Git 检查忽略规则的顺序.gitignore文件当前目录父目录的.gitignore向上递归.git/info/exclude文件core.excludesfile配置全局优先级后面的规则可以覆盖前面的规则。常见陷阱空目录无法提交Git 不跟踪空目录解决添加.gitkeep文件已跟踪文件不受影响需要先git rm --cached再修改 .gitignore顺序敏感否定规则必须在忽略规则之后更具体的规则应放在前面实际应用示例示例一清理工作区# 查看将被删除的文件gitclean-Xfd--dry-run# 实际删除谨慎使用gitclean-Xfd示例二找回被忽略的文件# 如果误删了被忽略的文件# 可以从构建过程重新生成# 重新下载源码包./build.sh AES示例三临时修改规则# 临时不忽略某个文件用于调试gitadd-fsome_ignored_file.log# 或修改 .gitignore 后立即生效# 无需重启 Git