使用bash在Windows XP计算机上运行git。 我从SVN导出了我的项目,然后克隆了一个裸存储库。
然后我将导出粘贴到裸存储库目录中,并执行了:
git add -A
然后我得到一条消息列表:
LF将由CRLF取代
这种转变的后果是什么? 这是Visual Studio中的.NET解决方案。
#1楼
从〜/ .gitattributes文件中删除以下内容
* text=auto
将阻止git在第一位检查行结尾。
#2楼
在Notepad ++中打开文件。
转到编辑/ EOL转换。
单击“Windows格式”。
保存文件。
#3楼
我对Windows上的git知之甚少,但......
在我看来,git正在转换返回格式以匹配正在运行的平台(Windows)。 CRLF是Windows中的默认返回格式,而LF是大多数其他操作系统的默认返回格式。
有可能,当代码移动到另一个系统时,返回格式将被正确调整。 我还认为git足够聪明,可以保持二进制文件的完整性,而不是试图将LF转换为CRLF,例如JPEG。
总之,您可能不需要为此转换烦恼太多。 但是,如果你将项目归档为tarball,那么编码人员可能会喜欢使用LF线路终结器而不是CRLF。 根据您的关注程度(并且取决于您不使用记事本),如果可以,您可能需要设置git以使用LF返回:)
附录:CR是ASCII码13,LF是ASCII码10.因此,CRLF是两个字节,而LF是一个。
#4楼
Git有三种处理行结尾的模式:
$ git config core.autocrlf
# that command will print "true" or "false" or "input"
您可以通过向上面的命令行添加其他参数true或false来设置要使用的模式。
如果core.autocrlf设置为true,这意味着core.autocrlf将文件添加到git repo中git认为是文本文件时,它会将所有CRLF行结尾转换为LF,然后再将其存储在提交中。 每当你git checkout东西,所有文本文件自动将其LF行结尾转换为CRLF结尾。 这允许跨平台开发项目,这些平台使用不同的行结束样式而不提交非常嘈杂,因为每个编辑器都会更改行结束样式,因为行结束样式始终是LF。
这个方便转换的副作用,这就是你所看到的警告,就是如果你最初创作的文本文件有LF结尾而不是CRLF,它将像往常一样用LF存储,但是当检查时以后它会有CRLF结局。 对于普通文本文件,这通常很好。 在这种情况下,警告是“为了您的信息”,但是如果git错误地将二进制文件评估为文本文件,则这是一个重要的警告,因为git会破坏您的二进制文件。
如果core.autocrlf设置为false,则不会执行任何行结束转换,因此将按原样检入文本文件。 这通常可以正常工作,只要所有开发人员都在Linux上或在Windows上都是如此。 但根据我的经验,我仍然倾向于获得具有混合行结尾的文本文件,最终导致问题。
我个人的偏好是作为Windows开发人员打开设置。
#5楼
这些消息是由于Windows上core.autocrlf默认值不正确造成的。
autocrlf的概念是透明地处理行结束转换。 它确实如此!
坏消息:需要手动配置值。
好消息:每个git安装应该只进行一次(每个项目设置也可以)。
autocrlf如何工作 :
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repo repo repo
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \
这里crlf = win-style end-of-line marker, lf = unix-style(和mac osx)。
(pre-osx cr不受上述三种选择中的任何一种影响)
该警告何时显示(在Windows下)
- 如果你的一个文件中有unix-style lf (= RARELY),则autocrlf = true ,
- 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(windows风格)或LF(unix风格),箭头代表
file to commit -> repository -> checked out file
怎么修
在git安装期间选择了core.autocrlf默认值,并将其存储在系统范围的gitconfig( %ProgramFiles(x86)%\\git\\etc\\gitconfig )中。 还有(按以下顺序级联):
- 位于~/.gitconfig “global”(每用户) ~/.gitconfig ,另一个
- $XDG_CONFIG_HOME/git/config global( $XDG_CONFIG_HOME/git/config或$HOME/.config/git/config )中的“全局”(每用户)gitconfig
- 工作目录中.git/config “local”(per-repo)gitconfig。
因此,在工作目录中编写git config core.autocrlf来检查当前使用的值和
- 将autocrlf=false添加到系统范围的gitconfig#per-system解决方案中
- git config --global core.autocrlf false #per-user solution
- git config --local core.autocrlf false #per-project solution
警告
- git config设置可以被gitattributes设置覆盖。
- crlf -> lf转换仅在添加新文件时发生,回购中已存在的crlf文件不受影响。
道德 (适用于Windows):
- 如果您计划在Unix下使用此项目(并且不愿意将编辑器/ IDE配置为使用unix行结尾),请使用core.autocrlf = true ,
- 如果您计划仅在Windows下使用此项目(或者您已将编辑器/ IDE配置为使用unix行结尾),请使用core.autocrlf = false ,
- 永远不要使用core.autocrlf = input除非你有充分的理由( 例如,如果你在windows下使用unix实用程序或者遇到makefile问题),
PS 安装适用于Windows的git时要选择什么?
如果您不打算在Unix下使用任何项目, 请不要同意默认的第一个选项。 选择第三个( Checkout as-is,commit as-is )。 你不会看到这条消息。 永远。
PPS我个人的偏好是配置编辑器/ IDE以使用Unix风格的结尾,并将core.autocrlf设置为false 。