行尾策略写死进 .gitattributes(统一 LF、bat 强制 CRLF、二进制显式标注),根治重生成后的行尾幻影改动

This commit is contained in:
2026-10-10 01:15:16 +08:00
parent 53bd9af02e
commit 63ee090fd1
2 changed files with 28 additions and 0 deletions
+27
View File
@@ -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 *.jpg filter=lfs diff=lfs merge=lfs -text
+1
View File
@@ -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 状态;拿不准就别碰 - 确需脚本级重写:工程源码为 UTF-8(多数文件无 BOM,UI 系带 BOM),按原样同编码回写、保持 BOM 状态;拿不准就别碰
- 发现乱码:先统计 `EF BF BD` 字节数确认真损坏(勿信终端/Read 渲染);**不要急著 `git checkout`**(会丢弃全部未提交工作)——先用 Edit 只修坏行 - 发现乱码:先统计 `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`,勿整文件重写) - **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` 豁免)
## 构建与验证 ## 构建与验证