我已经在Stack Overflow上阅读了很多不同的问题和答案,以及关于core.autocrlf设置如何工作的git文档。
以下是我读到的内容:
Unix和Mac OSX (pre-OSX使用CR)客户端使用LF行结束符。< br / > Windows客户端使用CRLF行结束符当核心。在客户端被设置为true, git存储库总是以LF行结束格式存储文件,客户端文件中的行结束符在签出/提交时来回转换,对于使用非LF行结束符的客户端(即Windows),无论客户端上的行结束符文件是什么格式(这与Tim Clem的定义不一致-参见下面的更新)。
下面是一个矩阵,它试图为core的'input'和'false'设置记录相同的内容。带问号的自专制,我不确定行结束转换行为。
我的问题是:
当达成共识时,我将更新答案中的问号。
core.autocrlf value true input false ---------------------------------------------------------- commit | convert ? ? new | to LF (convert to LF?) (no conversion?) commit | convert to ? no existing | LF (convert to LF?) conversion checkout | convert to ? no existing | CRLF (no conversion?) conversion
我并不是真的在寻找各种设置的利弊。我只是寻找数据,使它清楚地期望git如何操作这三个设置中的每一个。
--
更新04/17/2012:在阅读评论中JJD链接的蒂姆·克莱姆的文章后,我修改了“未知”中的一些值;值,以及更改“checkout existing | true to convert to CRLF而不是convert to client”;以下是他给出的定义,比我在其他地方看到的任何定义都更清楚:
核心。独裁者= false
这是默认值,但是大多数人都被鼓励去改变它 立即。使用false的结果是Git永远不会出错 在你的文件上加上行尾。您可以用LF或CRLF签入文件 或CR或这三者的任意组合,Git并不关心。这 可以使差分更难读取和合并更困难。大多数人 在Unix/Linux世界中工作的人使用这个值,因为他们没有 CRLF问题,他们不需要Git做额外的工作 文件被写入对象数据库或写入 工作目录。< / p >
核心。独裁者= true
这意味着Git将处理所有文本文件,并确保 在将该文件写入对象数据库时,CRLF将被LF替换 并在写入工作时将所有LF转回CRLF 目录中。这是Windows上的推荐设置,因为它 确保您的存储库可以在其他平台上使用 .在你的工作目录中保留CRLF
核心。selflf =输入
这意味着Git将处理所有文本文件,并确保 当将该文件写入对象时,CRLF将被LF替换 数据库。然而,它不会起到相反的作用。当你读取文件时 从对象数据库中退出,并将它们写入工作数据库 目录下,它们仍然会有lf来表示行结束。这 设置通常用于Unix/Linux/OS X,以防止crlf 写入存储库。这个想法是,如果你粘贴 代码,并意外地将crlf带入您的一个 当你写文件时,Git会确保它们被lf替换
Tim的文章非常棒,我能想到的唯一缺失的是他假设存储库是LF格式的,这并不一定是正确的,特别是对于仅用于Windows的项目。
将Tim的文章与jmlane迄今为止投票最多的回答进行比较,可以看出在true和输入设置上完全一致,而在false设置上不一致。