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

为何在Windows与Linux间拷贝Git仓库后Git会提示文件变更?

问题原因分析与解决方案

核心诱因判断

该问题确实和换行符跨系统转换规则直接相关,同时叠加了WinSCP传输设置、Git环境配置的共同影响:

  • Windows系统默认换行符为CRLF(\r\n),Ubuntu默认换行符为LF(\n)
  • Windows端Git默认开启core.autocrlf=true配置:拉取代码时自动将仓库内的LF转换为CRLF写入工作区,提交时自动将工作区的CRLF转换为LF推送至远端仓库,因此Windows端提交完成后git status显示状态干净。
  • 你使用WinSCP传输时开启了文本文件自动转换规则,传输过程中会自动将Windows端文件的CRLF转换为LF写入Ubuntu系统,和Git本地索引的预期文件状态出现偏差,因此判定为文件修改。

为什么仅6个文件出现异常

仅有部分文件触发问题是Git的文件类型识别规则导致的:

  • 50个文件中大部分是Git识别为二进制的文件(图片、编译产物、压缩包、字体文件等),Git不会对二进制文件做换行符校验,因此不会判定为修改。
  • 其余文本文件中,44个文件本身在Windows工作区就已经是LF换行格式,WinSCP传输时没有对其做修改,因此到Ubuntu后状态和Git索引匹配。
  • 出问题的6个文件是纯文本格式,且Windows工作区中为CRLF换行,WinSCP传输时被转换为LF,和Ubuntu端Git从.git目录索引中读取的预期文件状态不一致,因此被判定为修改。

验证与修复方法

验证方法

在Ubuntu端仓库执行git diff 异常文件名,如果输出仅存在^M换行符标记、无实际代码内容变更,即可确认是换行符导致的问题。

修复方案

  • 临时修复:传输Git仓库时将WinSCP调整为二进制传输模式,禁止文本自动转换,避免传输过程修改文件内容;到Ubuntu端后执行git reset --hard HEAD即可恢复干净状态。
  • 长期修复:在仓库根目录添加.gitattributes文件,明确指定不同类型文件的换行符规则,彻底避免跨系统协作的换行符冲突。

内容的提问来源于stack exchange,提问作者milad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:54:02