搜索

首页  >  问答  >  正文

使用 tortoisegit 提交项目时,出现LF will be replaced by CRLF in...

在提交项目时,出现一堆warning:LF will be replaced by CRLF in...,一直卡在更新索引,准备提交那儿,在网上查了,说是换行符的问题,解决办法 git config --global core.autocrlf false即可解决,然而我这里没有效果,不知是哪里的问题,哪位大神帮忙看下。下面是config中的内容

迷茫迷茫2767 天前939

全部回复(2)我来回复

  • 漂亮男人

    漂亮男人2017-05-02 09:51:01

    在解决你的问题之前,我需要多啰嗦几句。在你通过github或者其他远程托管服务器来和其他人进行协同开发代码的时候,确保换行符被正确处理是一项很重要的事。首先,你需要知道不同的操作系统对换行符的定义会有所不同,Unix或类Unix操作系统的换行符叫做LF,而windows系统的叫做CRLF,二者具有很大的区别:

    Unix系统里,每行结尾只有“<换行>”,即"n";Windows系统里面,每行结尾是“<换行><回车>”

    Note:引自回车(CR)与换行(LF), 'r'和'n'的区别.

    这就是造成问题的根源——即如果你使用的是windows系统,而你的小伙伴用的是Mac的话,当你们使用git协同开发软件时,就会出现换行符不统一的问题。

    git其实可以自己处理换行符不统一的问题,但是可能会产生意想不到的结果。因此,有必要进行相关的设置,一般如果你不想麻烦的话,可以采用常用的方法,如下所示:

    $ git config --global core.autocrlf true

    其实,在你安装windows版本的git或者torgoiseGit时,你可能已经进行过这样的配置,也许你当时并未知道,比如楼主之所以产生这样的警告:

    warning:LF will be replaced by CRLF in...

    就是因为你进行了上面的配置。至于为什么会一直卡在那儿,可能是因为需要替换的地方太多,也许你耐心等一会儿就好了。对了,你将true改为false的话,是让git自行处理,所以并没有报警告,这并没有从根本上解决问题,这样做可能会造成你与你的小伙伴的换行符不统一。

    当然,有更好的方法解决换行符不统一的问题——使用.gitattributes文件统一换行符。这个文件有点儿类似于.gitignore,不仅名字很类似,使用方式,编写语法也很像。

    这个文件必须位于仓库的根目录,可以像其他文件一样进行修改、提交。下面介绍如何编写这个文件:

    文件内容看起来像一张表格,总共分为两列:左边一列是git要匹配的文件名;右边是git需要采用的换行符格式。下面我们来看一个栗子:

    # Set the default behavior, in case people don't have core.autocrlf set.
    * text=auto
    
    # Explicitly declare text files you want to always be normalized and converted
    # to native line endings on checkout.
    *.c text
    *.h text
    
    # Declare files that will always have CRLF line endings on checkout.
    *.sln text eol=crlf
    
    # Denote all files that are truly binary and should not be modified.
    *.png binary
    *.jpg binary

    如果你熟悉.gitignore的话,你会觉得上面这个文件的左边一列很熟悉,这里我们就不再赘述了,不熟悉的话,请自行查阅相关资料。唯一的不同就是.gitattributes文件多了右边一列,如text, text eol=crlf, binary,刚刚我们也说过这一列是用来设置左边对应文件使用的换行符格式的,左右两列用空格隔开。下面我们来详细介绍下右边一列的语法:

    • text=auto
      让git自行处理左边匹配的文件使用何种换行符格式,这是默认选项。

    • text eol=crlf
      对左边匹配的文件统一使用CRLF换行符格式,如果有文件中出现LF将会转换成CRLF。

    • text eol=lf
      对左边匹配的文件统一使用LF换行符格式,如果有文件中出现CRLF将会转换成LF。

    • binarybinary
      告诉git这不是文本文件,不应该对其中的换行符进行改变。另外,binary和符号-text -diff告诉git这不是文本文件,不应该对其中的换行符进行改变。另外,binary和符号-text -diff是等价的。

    上面这些语法应该已经足够了,如果有兴趣的,可以自行查阅相关资料,比如官方的资料:https://git-scm.com/book/en/v...。

    一般来说,第二种方法是最好的方案,虽然相比第一种要麻烦一些。

    P.S:已整理为博客:Git处理换行符问题

    回复
    0
  • 为情所困

    为情所困2017-05-02 09:51:01

    你搞反了吧,应该设置成true才对。

    回复
    0
  • 取消回复