You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Git彻底遗忘旧文件内容 修复GitLab ZIP包编码错误

问题背景

我使用GitLab管理仓库中的UTF-16 LE编码INI文件,通过TortoiseGIT拉取文件时内容正常:VSCode可正确识别带BOM的UTF-16 LE编码、CRLF换行格式,显示无异常。但通过GitLab生成的ZIP归档包下载时,文件会出现编码错误。

具体异常为:文件中所有0x0A字节被替换为0x0D0A,即LF被强制转换为CRLF。但该UTF-16 LE文件本身已正确使用CRLF换行,完全不需要额外转换;且UTF-16 LE为双字节编码,单字节转双字节的操作缺少对应0x00字节,最终导致文件无法正常渲染。

VSCode渲染异常
其他编辑器换行识别异常、行数统计错误
换行字节错误示例1
换行字节错误示例2

更新.gitattributes无法完全解决问题

初始提交时我误判该文件编码为windows-1252,当时配置的规则为:

*       text=auto
*.ini   text eol=crlf working-tree-encoding=windows-1252

后续我将配置修改为如下内容,执行git add --renormalize .后提交推送,单文件下载、Web端预览已恢复正常:

*       text=auto
*.ini   text eol=crlf working-tree-encoding=windows-1252

0x0409.ini diff -text -working-tree-encoding
/Driver-DalsaFG/77593-Teledyne_Dalsa_Xcelera_CL_LX1_device_driver/0x0409.ini diff -text -working-tree-encoding

但通过WebUI或API生成分支ZIP包时,该文件仍然存在上述内容损坏问题。

GitLab已知相关问题
  • GitLab处理windows-1252等ANSI编码文件存在异常,会导致合并、在线编辑时字符丢失
  • 尚不支持UTF-16编码文本文件的差异对比

我准备向GitLab提交该问题的issue时,按要求新建演示仓库复现问题:新建仓库、克隆、原样添加文件提交推送后,下载的ZIP包中该文件完全正常;在自有GitLab实例新建仓库测试,ZIP包文件同样正常。

额外提交会触发所有同内容文件异常

测试中发现奇怪现象:在子目录提交同一份文件且.gitattributes配置正确时,ZIP包内文件正常;若仅该子目录下文件对应的.gitattributes配置错误,ZIP包内所有同内容的该文件都会出现损坏。部分场景下修正全仓库.gitattributes配置即可修复,但部分场景下该操作无效。测试分别在新建仓库、生产业务仓库中开展。

由于Git是基于哈希而非路径追踪内容,我推测GitLab生成ZIP包时复用了仓库内存储的错误旧版本内容,且无法通过常规配置切换使用正确内容。若仅.gitattributes影响ZIP包生成逻辑,仅需提交配置变更即可切换正常/异常状态,但测试中该操作并非始终生效。

咨询问题

请问是否存在方法可以用本地正确的文件内容覆盖GitLab服务端存储的Git内部数据?效果类似强制推送,但适用于客户端无实际内容变更的场景:因为修改.gitattributes不会改变工作区文件内容,执行git add --renormalize .也无变更产生,推测是该文件被识别为二进制文件导致重归一化不生效。

感谢解答!


内容的提问来源于stack exchange,提问作者Thorsten Schöning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:15:42