Git配置autocrlf来处理文件crlf

问题背景及解决方案

遇到这两个错误, 基本上都是叫你将 autocrlf 设置为 false. 但是我觉得这样很不妥。

  1. 如果你的源文件中是换行符是LF,而autocrlf=true, 此时git add就会遇到 fatal: LF would be replaced by CRLF 的错误。有两个解决办法:

    • 将你的源文件中的LF转为CRLF即可【推荐】
    • 将autocrlf 设置为 false
  2. 如果你的源文件中是换行符是CRLF,而autocrlf=input, 此时git add也会遇到 fatal: CRLF would be replaced by LF 的错误。有两个解决办法:

    • 将你源文件中的CRLF转为LF【推荐】
    • 将autocrlf 设置为true 或者 false

实际项目处理建议:

  1. 如果项目中没有对源文件的换行符作出规定,在Mac上设置 autocrlf = input, 在Windows上设置autocrlf = true(默认值);
    这样的话,

    • Windows:(true)
      提交时,将CRLF 转成 LF再提交;
      切出时,自动将LF 转为 CRLF;
    • MAC/Linux: (input)
      提交时, 将CRLF 转成 LF再提交;
      切出时,保持LF即可;

    即可保证仓库中永远都是LF. 而且在Windows工作空间都是CRLF, 在Mac/Linux工作空间都是LF.

  2. . 如果项目对源文件的换行符作出强制规定,比如在.editorconfig文件中设置end_of_line = lf
    Git配置autocrlf来处理文件crlf_第1张图片
    那么就没必要autocrlf = true;因为此时工作区代码会因为上面这个设置换行符作了强制规定为LF,如果autocrlf 再设为true就会有冲突了;
    此种情况autocrlf = input即可。

注意:当修改了autocrlf的值后,项目代码最好删除再重新clone,不然本地文件换行符不会自动变的。

core.autocrlf概念

假如你正在Windows上写程序,又或者你正在和其他人合作,他们在Windows上编程,而你却在其他系统上,在这些情况下,你可能会遇到行尾结束符问题。这是因为Windows使用回车和换行两个字符来结束一行,而Mac和Linux只使用换行一个字符。虽然这是小问题,但它会极大地扰乱跨平台协作。

Git可以在你提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF。用core.autocrlf来打开此项功能,如果是在Windows系统上,把它设置成true,这样当签出代码时,LF会被转换成CRLF:

$ git config --global core.autocrlf true
表示要求git在提交时将crlf转换为lf,而在检出时将crlf转换为lf。

Linux或Mac系统使用LF作为行结束符,因此你不想 Git 在签出文件时进行自动的转换;当一个以CRLF为行结束符的文件不小心被引入时你肯定想进行修正,把core.autocrlf设置成input来告诉 Git 在提交时把CRLF转换成LF,签出时不转换:

$ git config --global core.autocrlf input
表示在提交时将crlf转换为lf,而检出时不转换 。
这样会在Windows系统上的签出文件中保留CRLF,会在Mac和Linux系统上,包括仓库中保留LF。

如果你是Windows程序员,且正在开发仅运行在Windows上的项目,可以设置false取消此功能,把回车符记录在库中:

$ git config --global core.autocrlf false
表示提交和检出代码时均不进行转换

CRLF、CR、LF详解

名词解释

  • CR:Carriage Return,对应ASCII中转义字符\r,表示回车
  • LF:Linefeed,对应ASCII中转义字符\n,表示换行
  • CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行

众所周知,

  • Windows操作系统采用两个字符来进行换行,即CRLF;
  • Unix/Linux/Mac OS X操作系统采用单个字符LF来进行换行;
  • 另外,MacIntosh操作系统(即早期的Mac操作系统)采用单个字符CR来进行换行。

你可能感兴趣的:(git,前端格式化)