行尾策略写死进 .gitattributes(统一 LF、bat 强制 CRLF、二进制显式标注),根治重生成后的行尾幻影改动
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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` 豁免)
|
||||
|
||||
## 构建与验证
|
||||
|
||||
|
||||
Reference in New Issue
Block a user