# 换行规范 # # 背景:本仓库历史索引(index)内全部为 LF(`git ls-files --eol` 显示 i/lf), # 而 Windows 工作区长期依赖 core.autocrlf=true 做 CRLF↔LF 转换。这种隐式转换 # 会让「工具以 LF 写盘」的改动在提交时产生大量换行噪声与 "LF will be replaced # by CRLF" 警告。此处把规则显式化,使任何机器、任何 core.autocrlf 设置下行为一致。 # # 注意:不要为已跟踪文件添加 `-text`。索引为 LF 而工作区为 CRLF 的文件一旦 # 被标记为 `-text`,git 会认为工作区内容与索引不一致,从而产生虚假改动。 # 默认:按内容自动识别是否为文本,文本一律在仓库内规范化为 LF。 * text=auto # 源码与配置(文本) # # 这里必须同时给出 `eol=crlf`。只写 `* text=auto` 时,工作区的换行形态仍由每个 # 开发者的 core.autocrlf 决定——工具(编辑器、脚本)以 LF 写盘时不会报错,只会 # 在提交时冒出 "LF will be replaced by CRLF" 警告,也就是本仓库此前的漂移来源。 # 声明 `eol=crlf` 后,git 会把工作区自动纠正为 CRLF,漂移自愈。 # 索引侧仍然是 LF,因此不会产生任何既有文件的改写。 *.php text eol=crlf *.css text eol=crlf *.scss text eol=crlf *.js text eol=crlf *.cjs text eol=crlf *.mjs text eol=crlf *.vue text eol=crlf *.json text eol=crlf *.html text eol=crlf *.svg text eol=crlf *.txt text eol=crlf *.md text eol=crlf *.yml text eol=crlf *.yaml text eol=crlf *.xml text eol=crlf *.dist text eol=crlf *.htaccess text eol=crlf # gettext 目录按 LF 维护,避免与 xgettext/msgmerge 的默认输出冲突。 *.pot text *.po text # 构建产物必须声明为 LF。 # # esbuild 恒定输出 LF,而上面的 `*.css eol=crlf` 会让工作区期待 CRLF, # 于是每次执行 tools/build-public-assets.mjs 都会重新引入换行漂移。 # 这些路径必须放在上面各条之后:.gitattributes 以最后匹配的规则为准。 /assets/css/build/** text eol=lf /assets/css/main.min.css text eol=lf /assets/js/runtime/*.min.js text eol=lf /assets/js/build/** text eol=lf # 二进制资源(不做换行转换,也不做 diff) *.png binary *.jpg binary *.jpeg binary *.gif binary *.webp binary *.avif binary *.ico binary *.bmp binary *.woff binary *.woff2 binary *.ttf binary *.otf binary *.eot binary *.zip binary *.gz binary *.tgz binary *.tar binary *.pdf binary *.mp3 binary *.mp4 binary *.webm binary *.psd binary *.ai binary *.sketch binary # 这些文件本身必须是 LF,否则 git 解析 `.gitattributes` 时可能把 CR 读进模式串。 .gitattributes text eol=lf .gitignore text eol=lf