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

本文详细介绍了在Linux环境下运行从Git仓库拉取的Shell脚本时遇到的换行符错误。问题源于Windows与Linux换行符差异(CRLF与LF)。解决方案包括在IDEA中更改行结束符为LF,并调整Git的`core.autocrlf`配置。通过设置`core.autocrlf=input`,确保在Windows提交时转换为LF,而在Linux拉取时不进行转换。
摘要由CSDN通过智能技术生成

问题描述:

项目软件安装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

一劳永逸,杜绝后续类似问题的出现,可将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在提交和拉取过程的自动转换问题

问题解决,立贴记录!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值