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

Linux适配Windows Git仓库:实现检出LF提交CRLF的方法

针对上游CRLF仓库的Linux本地行尾处理方案

方案一:自定义Clean/Smudge过滤器(推荐)

这个方案可以强制实现本地检出LF、提交时转CRLF的逻辑,同时解决仓库混合行尾的问题:

  1. 定义Git过滤器
    在本地仓库执行以下命令,创建名为win2unix的过滤器:
git config --local filter.win2unix.smudge 'sed "s/\r$//"'
git config --local filter.win2unix.clean 'sed "s/$/\r/"'
  • smudge钩子:检出文件时,移除所有行尾的\r,确保本地文件统一为LF格式
  • clean钩子:提交文件时,给每行末尾添加\r,确保推送到上游的文件是CRLF格式
  1. 配置.gitattributes应用过滤器
    在仓库根目录创建或编辑.gitattributes文件,添加规则:
* filter=win2unix
# 排除二进制文件,避免过滤器破坏内容
*.png binary
*.jpg binary
*.exe binary
*.zip binary
# 根据实际情况添加更多二进制类型

这条规则会让所有文本文件应用上述过滤器,二进制文件则跳过处理。

  1. 重置本地文件以生效
    先备份未提交的修改(如果有的话),然后执行以下命令让Git重新检出所有文件并应用过滤器:
git rm --cached -r .
git reset --hard

方案二:结合core.eol与局部文本属性

如果不想用过滤器,也可以通过Git内置属性实现近似效果:

  1. 设置全局core.eol为LF
git config --global core.eol lf

确保本地默认检出LF格式。

  1. 仓库级配置强制提交CRLF
    在仓库的.gitattributes中添加:
* text eol=crlf

这条规则会让Git在提交时自动将LF转换为CRLF,检出时保持LF格式(受core.eol影响)。不过这个方案对混合行尾的兼容性略差,若仓库中存在大量混合行尾文件,优先选方案一。

注意事项

  • 无论用哪种方案,都要确保二进制文件被正确标记为binary,避免行尾转换破坏文件内容
  • 如果之前用过dos2unix过滤器,需要先清理旧配置:git config --local --unset filter.dos2unix.smudge和git config --local --unset filter.dos2unix.clean

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:21:02