前言
使用git作为版本管理工具的朋友们,有没有遇到更新完同事写的脚本无法运行的问题?逻辑正确的脚本换台机器不能运行了多半是换行符捣的鬼,修改git中的core.autocrlf设置即可解决问题,那么autocrlf是什么意思呢?我来简单件解释下。
core.autocrlf
autocrlf
是三部分的缩写 auto-cr-lf
,分开来看应该是3组词 auto/carriage-return/linefeed,直译的话就是自动回车换行。
还是说下前面的问题,这是因为 Windows 使用回车(CR)和换行(LF)两个字符来结束一行,而 MacOS 和 Linux 只使用换行(LF)一个字符来结束一行。
当你在Windows下用常见编辑器写一个Shell脚本是,直接拿到Linux去执行很可能会报错,而在Linux编辑的文件拿到Windows环境下打开通常会显示成一行。
git 作为一个多人共同使用的版本管理工具,使用者的系统可能是Windows、Linux或者是Mac中的任意一种,所以在共同操作一个文件时就会造成换行符混乱,这时就要用到 core.autocrlf参数了。
core.autocrlf
参数不仅影响检出时的换行符装换,还会影响提交时的换行符转换,共有 true
、false
、input
三种可选值
1 | # 提交时转换为LF,检出时转换为CRLF |
根据他们的定义我们可以选择一种保险的方式,在windows系统上设置为 true
,在 Linux 和 Mac 上设置为 input
,如果所有使用者仅在统一系统下工作,设置成 false
就好了。
core.safecrlf
前一个 autocrlf 大家听到的应该比较多,而这个safecrlf可能很多人是第一次听到,它的默认只是false
,若果改成true
表示拒绝提交混合换行符的代码,也就是说如果你的代码中同时包含两种系统中不同的换行格式会被禁止提交,如果设置成 warn
表示只提出警告但可以提交。
总结
- 多人合作的git库如果下载之后,其中的脚本不能直接运行先看看是不是换行符搞的鬼
- Windows平台建议设置
git config --global core.autocrlf true
- Linux平台建议设置
git config --global core.autocrlf input
- 可以使用工具
dos2unix
与unix2dos
将LF
和CRLF
相互转化
一代文豪东坡居士,却写多篇祈雨文~