Files
STM32F4-Base/docs/门禁说明/end-of-file-fixer.md
T
wandering1 511fd30cc6 docs: 清理全仓变更记录流水(43 篇整节删 / 23 篇留一行 / 5 篇保留)
用户裁定:文档只写现状,历史流水一律删掉,过程查 git log。

- 43 篇「变更记录 / 修订记录」整节删除:继电保护规划 12.6 KB、产品
  需求 11.8 KB、项目部署环境 5.5 KB、BSD Socket 指南 5.3 KB、架构
  总览 5.0 KB、实机测试实施指南 3.8 KB 等
- 23 篇别处仍有指向:只留节名 + 一行「本文件不再记流水账,过程查
  git log」,节号与锚点不位移(doc-links 不因此断链)
- 5 篇整表保留(被当唯一证据 / 活台账引用):看门狗设计说明、配置
  文件设计说明、RAM预算台账、内容页架构、本地工具路径环境变量方案
- 规范同步:文档规范 §5.1 改新裁定;测试文档模板规范删示例节与
  登记句;测试开发标准流程 / UI 两篇 / 实机测试实施指南 / 四篇单测
  说明 / 并行任务工作树方案 / 编号规范 的「登记变更记录」改「写进
  正文」
- 技能同步:stale-doc-count-sweep / ui-verify / id-family 三个 SKILL
  正文不再要求追加流水行(顺带消掉 SKILL.md:121「产品需求 §12」
  失效引用)
- 修 5 处悬空指针:采样有效性校验目录锚点、BSD 指南「文末变更
  记录」、docs/README 过期描述、网络自愈架构两处指向面

72 篇文档净减 600 余行;check_doc_links --all --sections-strict 可判
定比例 61% → 78%、失效引用 0;静态门禁 passed=50 failed=0;gitlint
10 条历史提交信息 0 failed。

未提交他人在飞改动:.dsh/skills/keil-build/*(%SystemDrive% 守卫)。
2026-10-28 22:00:34 +08:00

2.4 KiB
Raw Blame History

end-of-file-fixer — 文件末尾必须恰好一个换行(改写型)

一句话:文件最后一个字节必须是换行、且末尾不能留多余空行;改的是工作区,需要再 git add 一次。

  • 配置:官方 pre-commit-hooks v5.0.0,exclude: *cubemx-generated(与行尾空白同一段豁免)。

1. 它在查什么

  • 末尾无换行 → 补一个;末尾多余空行 → 删到只剩一个换行;空文件(0 字节)不动。

2. 为什么要它

  • 无末尾换行的文件在 git diff、cat、grep 拼接时会与下一条输出黏在一起;
  • 避免 \ No newline at end of file 这种噪声长期留在历史 diff 里。性质上属预防性。

3. 触发面与豁免

  • 与 trailing-whitespace 共用生成文件豁免(.ioc、Src/、Inc/、HAL/CMSIS/中间件、 Keil 工程与 .map 等)——理由相同:那是工具产物。

4. 报错怎么读

Fix End of Files.........................................Failed
Files were modified by this hook.
  • git add 被改文件后重新提交。
  • ⚠ stash 陷阱(本仓踩过):pre-commit 跑钩子前会 stash 未暂存改动,钩子看到的是"没有你 中间状态"的树;改代码同时更新基线/受管区时,务必先 git add 再跑钩子,否则会假报警。

5. 好处

  • 全库文件末尾形态统一,脚本类工具(按行读文件的门禁脚本自己也算)行为更可预期。

6. 限制与盲区

  1. 只管文件末尾:行间的多余空行、缩进风格都不管;
  2. 不查编码:BOM 有无与丢失由构建期 #870-D 暴露,U+FFFD 由 no-mojibake 管,且后者 只覆盖 C/H——文档侧的字节卫生目前靠人工(本目录作者每次交付前逐文件核 BOM/CR/EF BF BD);
  3. 只处理本次涉及的文件,历史文件不会被批量整理(避免一次性巨大 diff)。
  • 迁移时发现的一条已更正的旧错误值得记在这里:原手册把 check-added-large-files 的阈值写成 1 MB, 实际默认是 500 KB(--maxkb 默认 500)→ 见 docs/门禁说明/check-added-large-files.md §1。 提醒:本目录任何"默认值"都应以安装的钩子源码或实测为准,不要抄旧文档。

7. 豁免与基线 / 8. 改这个门禁本身

  • 无基线。若真有"某类文件必须无末尾换行"的需求,加豁免并写明原因,别用 --no-verify 绕过。