git将LF替换为CRLF

使用bash在windowsxp机器上运行git。我从SVN导出了我的项目,然后克隆了一个裸存储库

然后,我将导出粘贴到bare repositories目录中,并执行了以下操作:

git添加-A

然后我收到了一张信息列表,上面写着:

LF将被CRLF替换

这种转变的后果是什么?这是Visual Studio中的.NET解决方案

这些消息是由于Windows上的core.autocrlf的默认值不正确造成的

autocrlf的概念是透明地处理行尾转换。的确如此

坏消息:需要手动配置值。
好消息:每次git安装只能执行一次(每个项目设置也可以)

如何autocrlf工作

core.autocrlf=true:core.autocrlf=input:core.autocrlf=false:
回购
^V^V^V
/        \               /        \               /        \
crlf->lf->crlf crlf->如果\/\
/            \           /            \           /            \

这里crlf=win风格的行尾标记,lf=unix风格(和mac osx)

(上述三个选项中的任何一个都不影响osx之前的cr)

此警告何时显示(在Windows下)

autocrlf=true如果您的一个文件(=很少)中有unix风格的lf
autocrlf=input如果您的一个文件(=几乎总是)中有win stylecrlf
autocrlf=false–决不

此警告是什么意思

“警告”LF将被CRLF替换;表示您(拥有autocrlf=true)将在提交签出周期后丢失unix样式的LF(它将被windows样式的CRLF替换)。Git不希望您在windows下使用unix风格的LF

“警告”CRLF将被LF替换;表示您(拥有autocrlf=input)将在提交签出周期后丢失windows样式的CRLF(它将被unix样式的LF替换)。不要在windows下使用input

展示autocrlf工作原理的另一种方式

1)正确:x->LF->CRLF
2) 输入:x->LF->LF
3) 错误:x->x->x

其中,x是CRLF(windows样式)或LF(unix样式),箭头表示

要提交的文件->存储库->签出文件

如何修复

在git安装过程中选择core.autocrlf的默认值,并将其存储在系统范围的gitconfig中(%ProgramFiles(x86)%\git\etc\gitconfig在windows上,而/etc/gitconfig在linux上)。还有(按以下顺序级联):

——”;“全球”;(每个用户)gitconfig位于~/.gitconfig,还有一个
——”;“全球”;(每个用户)gitconfig位于$XDG\u CONFIG\u HOME/git/CONFIG$HOME/.CONFIG/git/CONFIG
——”;“本地”;(按repo)gitconfig位于工作目录中的.git/config

因此,在工作目录中写入git config core.autocrlf,检查当前使用的值和

git config--system core.autocrlf false#每个系统解决方案
git config--global core.autocrlf false#每用户解决方案
git config--local core.autocrlf false#每个项目解决方案

警告
git-config设置可以被gittributes设置覆盖。
crlf->lf转换仅在添加新文件时发生,crlf回购协议中已存在的文件不受影响

道德(适用于Windows):
-如果计划在Unix下使用此项目(并且不愿意将编辑器/IDE配置为使用Unix行结尾),请使用core.autocrlf=true
-如果计划仅在Windows下使用此项目(或已将编辑器/IDE配置为使用unix行结尾),请使用core.autocrlf=false
永远不要使用core.autocrlf=input,除非您有充分的理由(eg如果您在windows下使用unix实用程序或遇到makefiles问题)

PS安装git for Windows时选择什么?
如果您不打算在Unix下使用任何项目,不要同意默认的第一个选项。选择第三个(按原样签出,按原样提交)。您将不会看到此消息。永远

PPS我个人的偏好是将编辑器/IDE配置为使用Unix风格的结尾,并将core.autocrlf设置为false

发表评论