diff --git a/.gitattributes b/.gitattributes index 4fae6dc1..8cb0359f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,28 @@ +# ===== 行尾策略(2026-10-09 定,勿删本段)===== +# 仓库 blob 与检出工作区统一 LF。原因:CubeMX 重生成写的是 **LF**,而此前工作区的行尾 +# 由每台机器各自的 `core.autocrlf` 决定(本机 = true → 检出成 CRLF),于是每次重生成后 +# 40+ 个第三方文件在 `git status` 里显示"已修改"(内容归一化后其实完全一致)。 +# 写死属性后,行为不再依赖各机的 `core.autocrlf`,换机器 / 重新 clone 也不会复发。 +* text=auto eol=lf + +# 批处理脚本必须 CRLF:cmd.exe 对 LF-only 文件里的 goto/标签处理不可靠 +*.bat text eol=crlf +*.cmd text eol=crlf + +# 二进制显式标注(`text=auto` 靠内容嗅探,PNG 未走 LFS,尤其要写死) +*.png binary +*.gif binary +*.ttf binary +*.otf binary +*.ico binary +*.dll binary +*.lib binary +*.a binary +*.o binary +*.exe binary +*.bin binary +*.zip binary +*.pdf binary + +# LFS 图片:必须排在 `*` 之后才能覆盖它(-text 使其不参与行尾转换) *.jpg filter=lfs diff=lfs merge=lfs -text diff --git a/AGENTS.md b/AGENTS.md index 00471199..c519ac33 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,6 +11,7 @@ STM32F407ZGTx @168MHz(HSE 8MHz → PLL M=4/N=168/P=2);**仅 Keil MDK-ARM v - 确需脚本级重写:工程源码为 UTF-8(多数文件无 BOM,UI 系带 BOM),按原样同编码回写、保持 BOM 状态;拿不准就别碰 - 发现乱码:先统计 `EF BF BD` 字节数确认真损坏(勿信终端/Read 渲染);**不要急著 `git checkout`**(会丢弃全部未提交工作)——先用 Edit 只修坏行 - **Edit 工具会剥掉文件原有的 UTF-8 BOM**(2026-09-18 实测):带 BOM 文件(如 `App/cfg/cfg_file.c`)被 Edit 后 BOM 静默消失 → ARMCC 改按 CP936 解码 → 中文字符串字面量报 `#870-D: invalid multibyte character sequence`(**只有重编译该文件才暴露,历史"0 警告"不代表安全**)。改完带中文字面量的文件须核对 BOM 并按原样补回(只在文件头前缀 3 字节 `EF BB BF`,勿整文件重写) +- **行尾策略已写死进 `.gitattributes`(2026-10-09)**:`* text=auto eol=lf`(仓库 blob 与工作区统一 LF)+ `*.bat`/`*.cmd` 强制 CRLF(cmd.exe 对 LF-only 的 goto/标签不可靠)+ PNG/TTF/DLL/LIB 等显式 `binary` + `*.jpg` 走 LFS 且 `-text`(该条必须排在 `*` 之后才能覆盖)。**不要再依赖 `core.autocrlf`,也不要把工作区文件"改回 CRLF"**——CubeMX 重生成写的就是 LF;此前每次重生成后 40+ 个第三方文件在 `git status` 里显示"已修改"(内容归一化后一致),根因就是行尾由每台机器各自的 autocrlf 决定。第三方/生成文件的"文件末尾空行"已一次性对齐工具输出(`53bd9af`),**勿再用改写型钩子去修剪**(已在 `trailing-whitespace`/`end-of-file-fixer` 豁免) ## 构建与验证