# 观澜 · 只钉"换行/编码本身就是功能"的那几个入口文件 # # 为什么需要它(2026-09-16/17 一天内实炸两次): # · `install.ps1` 掉 UTF-8 BOM → Windows PowerShell 5.1 按 ANSI/GBK 解码 → 中文乱码 + 级联 ParserError, # 目标机 `install` 1 秒即退出; # · `install.sh` 从写出来起就是 CRLF(git blob 就是 CRLF)→ POSIX 语义下每个词尾粘 `\r`: # `set -e` 变成非法选项、`RT=""` 变成 `RT="\r"` 把后面的 `-n "$RT"` 判断翻面 # → 此前所有交付包的 Linux/macOS 安装脚本都是坏的。 # 机器侧的强制执行在 `src/entry_refs.py::encoding_problems()`(打包 / 开箱验证 / 装机自检各查一遍); # 这里把 checkout 也钉死,免得"某次 git checkout / clone 之后又变回去"。 # # ★ 刻意**不**声明 *.py / *.md / *.json / *.yaml 的 eol: # 仓库里这些文件历来混着 CRLF(实测 .py 245 件里 42 件是 CRLF,且 2dad1a2 时就如此), # Python/JSON 对两种换行都能读;为纯 EOL 去改 40+ 个文件、把历史 diff 冲掉,不划算。 # 只有"解释器/解析器会因此报错"的文件才值得钉死。 *.sh text eol=lf *.bat text eol=crlf *.ps1 text eol=crlf # 二进制/特殊编码:禁止任何换行转换 # ★ .gitattributes 不支持行尾注释: 注释必须独占一行, 否则 "#" 会被当成属性名 # (2026-09-17 实逮: `*.zip binary # 说明` 触发 "# is not a valid attribute name") *.parquet -text *.npz -text *.zip binary *.png -text *.jpg -text *.ico -text *.docx -text *.pdf -text