当前位置: 代码网 > it编程>编程语言>Java > IDEA和GIT关于文件中LF和CRLF问题及解决

IDEA和GIT关于文件中LF和CRLF问题及解决

2025年09月30日 Java 我要评论
问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上linux运行报错。问题思考根据描述信息可以查看到\r字样,初步判别为换行符导致1、将脚本文件移动至notepad++中,通过视图&md

问题描述

项目软件安装shell脚本上git仓库管理,但拉取后,上linux运行报错。


问题思考

根据描述信息可以查看到\r字样,初步判别为换行符导致

1、将脚本文件移动至notepad++中,通过视图—>显示符号—>显示所有符号,一顿操作后,可以看到脚本中一串crlf的符号


相关名词解释:

  • cr:carriage return,对应ascii中转义字符\r chr(13),表示回车
  • lf:linefeed,对应ascii中转义字符\n chr(10),表示换行
  • crlf:carriage return & linefeed,\r\n,表示回车并换行

进而了解到普遍使用的编辑器idea因为默认是windows使用场景,所以换行符的默认设置为crlf;但shell脚本是在linux下运行,则需要被替换为lf

在idea右下角,除了编码格式以外,还有个line separator


废话不多说,为了解决问题,就立马着手将所有的shell脚本改成了lf

1、一劳永逸,杜绝后续类似问题的出现,可将idea的默认配置修改为了lf


*最后的选项,大致是允许idea的配置覆盖重写代码的样式设置;可视自身情况选择或取消,与本文影响不大

2、兴致冲冲,将修改后的代码提交后,让测试同事重新验证,emmm对面拉取的还是crlf。尴尬要犯了

  • 首先怀疑是git未能识别到crlf和lf这类修改
  • 尝试将文件删除后commit & push再新增lf格式文件后 commit & push失败!!!
  • 在搜了git lf和crlf问题后,发现此事儿有点猫腻

git的默认设置中有一个字段:core.autocrlf ,作用就是:

在push的时候会把crlf转换成lf;pull的时候则会把lf转换成crlf

原本git这个自动转换的配置是在做好事儿,但是却坑苦了不懂它的人… …

ok!!!明白了原理,那么解决思路就来了

解决过程

以下命令在git bash中执行即可

  • 场景一、代码在window提交,在windows使用(即默认场景)
$ git config --global core.autocrlf true
  • 场景二、代码在windows提交,在linux或者mac系统或者jenkins上专门打包为服务器使用,无需git在pull时进行自动转换;(即git在push时把crlf转换成lf,pull时不转换)
$ git config --global core.autocrlf input
  • 场景三、不想要git自动转换:
$ git config --global core.autocrlf false

综上:

1、编辑器本身的换行符问题

2、git在提交和拉取过程的自动转换问题

问题解决!!!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com