-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.gitattributes
More file actions
28 lines (28 loc) · 1.71 KB
/
Copy path.gitattributes
File metadata and controls
28 lines (28 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Git 属性 —— 只写**必须逐字节复现**的那几项,不动仓库其它文件的既有行为。
#
# ============================================================================
# 为什么需要这个文件:core.autocrlf=true 会让「内嵌资源」在不同平台内容不同
# ============================================================================
#
# release.yml 的注释写明了 CI 构建的目标之一是:
#
# 可复现 —— 任何人 fork 后打 tag 都能得到同构产物
#
# 但本机(Windows)的 core.autocrlf=true 会把签出时的 .md / .go 统一转成 CRLF。
# 对普通源码这没问题(Go 编译器不在乎),可是对被 `//go:embed` 内嵌的**数据**
# 就不同了 —— 内嵌是逐字节的:
#
# 本机 Windows 工作树 → defaultprompt.md 是 CRLF 版(2143 字节)
# Linux CI 干净签出 → 同一文件是 LF 版(2086 字节)
#
# 于是同一个 tag 在两处产出的二进制里,模型实际收到的系统提示词**不一样**。
# 这与「同构产物」的目标直接冲突,且不会有任何报错 —— 属于静默差异。
#
# 所以对它显式关掉换行转换(-text = 不做任何 text/eol 处理,原样进出)。
# 只在**这一条**路径上生效,其余文件继续沿用仓库既有约定(CRLF 工作树、LF blob)。
#
# ⚠ 新增内嵌资源(//go:embed 的 .md / .txt / .json 等)时,如果它属于
# 逐字节敏感的数据,就一并加到这里;同时在本地确认:
# git check-ignore -v <文件> # exit 0 = 会被 .gitignore 吃掉 = CI 构建必挂
# git cat-file -s :<文件> # 与工作树字节数比对,确认没有被换行转换改写
internal/prompt/defaultprompt.md -text