Codex 把普通文件改成符号链接,怎样从 Git 类型变化发现它
文件名仍然是 config/current,里面显示的文字也只有一小行,但它可能已经从普通文件变成符号链接。Codex 交付改动时,扩展名与内容预览都不足以识别这类变化。应读取 Git 模式与链接目标,先确认对象类型,再讨论目标路径是否在允许范围内。
模式变化比文件名更直接
Git 索引中的 100644 表示普通非可执行文件,120000 对应符号链接条目;链接对象的内容保存目标字符串。附件在独立临时仓库通过对象与索引构造这两种版本,读取 raw diff 和索引条目。它不要求 Windows 开启实际创建符号链接的能力,也不会访问链接目标。
预期结果包括旧模式、新模式、状态类型和目标文字。普通文件改为链接应被标成类型变化;内容相同并不能消除这一差异。把 120000 当成“另一种权限值”会漏掉对象语义,后续复制、部署和运行时读文件的行为都可能不同。
目标按链接所在目录解释
假设链接位于 config/current,目标 ../data/settings.json 应相对于 config/ 解释,归一后为工作区里的 data/settings.json。目标 ../../outside 则越出工作区,按本文策略拒绝。保留原目标字符串和归一结果,避免日志只有一句“路径不合法”,却无法复核到底从哪一层开始计算。
本地合同先把反斜杠统一为斜杠,再拒绝根路径、UNC、盘符形式和越出工作区的目标。反斜杠开头同样不能当普通相对路径。附件加入这些负例,仅作字符串判断,不访问目标。这个审查不读取外部目录,不尝试跟随被拒绝的链接。对于目标本身又是链接的链条,单次词法归一无法证明最终位置;必须由目标系统在受控环境进一步验证,不能把字符串检查称为完整沙箱。
失败反例与交付边界
一个错误检查器只比较路径后缀:发现目标以 settings.json 结尾就放行。另一个从仓库根解析 ../data/settings.json,则会把本来有效的相对目标误判越界。附件分别核对目录基准与上级片段,输出内部目标允许、外部目标拒绝的参考结论。
真实部署还要确认打包是否保留链接、复制工具是否解引用、文件系统是否支持,以及运行账户能访问什么。本文没有在目标 Linux 环境执行这些步骤,因此不声称链接在生产可用。Git 对象检查只负责发现交付类型发生变化,并为后续运维提供准确证据。
若任务原本只要求改配置值,新增链接需要单独解释动机与迁移影响。若确实要改为链接,也应给出原文件内容的去向、回退方式与目标存在性检查。不要为了消除差异把所有链接恢复成文本,也不要为验收方便主动跟随未知目标;先把类型事实记录完整,再在正确环境验证运行行为。
配套文件与依据
本文的合成输入和参考结果可下载独立样本 a007.json,离线检查器 a007.py与样本放在同一目录后运行。检查器不调用模型接口。 使用 Python 3.12 或兼容版本,将上述文件下载到同一目录,执行 python a007.py。 此项还需本机可调用 Git;操作仅发生在自动创建的临时目录。
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。