git用CRLF代替LF
在Windows XP机器上使用bash运行git。 我从SVN中导出了我的项目,然后克隆了一个裸仓库。
然后,我将导出粘贴到裸存储目录中,并执行:
git add -A
然后我得到一个消息列表:
LF将由CRLF取代
这种转换的后果是什么? 这是Visual Studio中的.NET解决方案。
Git有三种处理行结束符的模式:
$ git config core.autocrlf
# that command will print "true" or "false" or "input"
您可以通过向上述命令行添加true
或false
的附加参数来设置要使用的模式。
如果core.autocrlf
设置为true,这意味着只要你将文件添加到git repo中,git认为它是一个文本文件,它就会将所有CRLF行结束符转换为LF,然后将其存储在提交中。 每当你git checkout
一些东西时,所有的文本文件都会自动将它们的LF行结束符转换为CRLF结尾。 这允许使用不同行结束样式的平台开发项目,而不会提交非常嘈杂的声音,因为每个编辑器都会更改行结束样式,因为行尾样式始终始终为LF。
这种方便的转换的副作用,这就是你看到的警告是关于,如果你创作的文本文件最初有LF结尾而不是CRLF,它将像往常一样用LF存储,但是当选中时后来它会有CRLF结局。 对于普通的文本文件,这通常很好。 在这种情况下,警告是“供您参考”,但如果git错误地将二进制文件评估为文本文件,这是一个重要的警告,因为git会破坏您的二进制文件。
如果core.autocrlf
设置为false,则不会执行换行转换,因此将按原样检入文本文件。 这通常可以正常工作,只要所有的开发人员都在Linux或全部在Windows上。 但根据我的经验,我仍然倾向于使用混合行结尾的文本文件,最终导致问题。
作为Windows开发人员,我的个人偏好是将设置保持为ON。
有关包含“输入”值的更新信息,请参阅http://kernel.org/pub/software/scm/git/docs/git-config.html。
这些消息是由于Windows上的core.autocrlf
默认值不正确造成的。
autocrlf
的概念是透明地处理行结束autocrlf
转换。 它确实!
坏消息:值需要手动配置。
好消息是:每个git安装只能进行一次(每个项目设置也是可能的)。
autocrlf
如何工作 :
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repo repo repo
^ V ^ V ^ V
/ / /
crlf->lf lf->crl crlf->lf /
/ / /
这里crlf
=赢式结束标记, lf
= unix-style(和mac osx)。
(pre-osx cr
在上述三个选项中没有任何影响)
此警告何时显示(在Windows下)
- autocrlf
= true
如果你在其中一个文件中使用了unix风格的lf
(= RARELY),
- autocrlf
= input
,如果你有赢风格crlf
在文件中的一个(=几乎总是)
- 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) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x
其中x是CRLF(窗口式)或LF(unix式),箭头表示
file to commit -> repository -> checked out file
怎么修
core.autocrlf
缺省值在git安装过程中被选中并存储在系统范围的gitconfig( %ProgramFiles(x86)%gitetcgitconfig
)中。 还有(按照以下顺序级联):
- 位于~/.gitconfig
“全局”(每用户) ~/.gitconfig
,还有一个
- $XDG_CONFIG_HOME/git/config
xDG_CONFIG_HOME $XDG_CONFIG_HOME/git/config
或$HOME/.config/git/config
“global”(per-user)gitconfig和
- 在工作目录中的.git/config
中的“local”(per-repo)gitconfig。
因此,在工作目录中写入git config core.autocrlf
来检查当前使用的值和
- 将autocrlf=false
添加到系统范围的gitconfig#per-system解决方案
- git config --global core.autocrlf false
#per-user解决方案
- git config --local core.autocrlf false
#per-project解决方案
警告
- git config
设置可以被gitattributes
设置覆盖。
- crlf -> lf
仅在添加新文件时发生转换,则不会影响存储在回购站中的crlf
文件。
道德 (适用于Windows):
- 如果你打算在Unix下使用这个项目(并且不愿意配置你的编辑器/ IDE使用unix行尾),使用core.autocrlf
= true
,
- 如果您打算仅在Windows下使用此项目(或者您已将您的编辑器/ IDE配置为使用unix行尾),请使用core.autocrlf
= false
,
- 除非你有足够的理由(例如,如果你在Windows下使用unix实用程序或者遇到makefile问题),否则不要使用core.autocrlf
= input
,
PS 安装git for Windows时选择什么?
如果您不打算在Unix下使用您的任何项目,请不要同意默认的第一个选项。 选择第三个( 原样签出,按现状提交 )。 你不会看到这个消息。 永远。
PPS我的个人偏好是将编辑器/ IDE配置为使用Unix风格的结尾,并将core.autocrlf
设置为false
。
如果您已经检出代码,则这些文件已经被编入索引。 更改你的git设置后,你应该刷新索引
git rm --cached -r .
并用git重新编写git索引
git reset --hard
https://help.github.com/articles/dealing-with-line-endings/#refreshing-a-repository-after-changing-line-endings
链接地址: http://www.djcxy.com/p/92361.html