记Windows环境下Git使用的一个小坑,换行符自动转换问题

Windows系统使用的换行符是CRLF ,UNIX/LINUX系统使用的换行符是LF
本机(windows系统),编写的文件换行符为CRLF
GIT是由Linux开发人员开发的,源码存储和UNIX/LINUX保持一致,换行符为LF
GitHub 的 Windows 客户端的换行符自动转换功能默认处于“自动模式”。
当你在签出文件时,Git 试图将 UNIX 换行符(LF)替换为 Windows 的换行符(CRLF);
当你在提交文件时,它又试图将 CRLF 替换为 LF。
如果提交的文件是一个 包含中文字符的UTF-8文件,那么这个“换行符自动转换”功能在提交时不是每次都生效
尤其是文件中出现中文字符后有换行符时

(但签出时的转换处理没有问题)
本机编写的文件中的CRLF换行符,在push的时候,没有正确地被替换为LF
而在PULL时,LF又被自动替换为CRLF,
使得原本的文件中的CRLF全部变为CRCRLF
因此git无法正确对比文件发生的变动

和换行符有关的命令设定如下:

    #提交时转换为LF,检出时转换为CRLF
    git config --global core.autocrlf true
    
    #提交时转换为LF,检出时不转换
    git config --global core.autocrlf input
    
    #提交检出均不转换
    git config --global core.autocrlf false
    
    #拒绝提交包含混合换行符的文件
    git config --global core.safecrlf true
    
    #允许提交包含混合换行符的文件
    git config --global core.safecrlf false
    
    #提交包含混合换行符的文件时给出警告
    git config --global core.safecrlf warn
	
	#设置行结束符的类型为lf
    git config --global core.eol lf

	#设置行结束符的类型为crlf
	git config --global core.eol crlf
	
	#设置行结束符的类型为native, native是指平台默认的行结束符。默认的类型是native
	git config --global core.eol native
	

如果你是 Windows 程序员,且正在开发仅运行在 Windows 上的项目,可以将core.autocrlf设置 false 取消此功能
把回车(CR)保留在版本库中


以上总结了,各种博客中针对这个问题的回答
但是在实际的实验中,并没有发现git的自动替换换行符功能不正常运行的情况
记Windows环境下Git使用的一个小坑,换行符自动转换问题_第1张图片
记Windows环境下Git使用的一个小坑,换行符自动转换问题_第2张图片
将一个本地仓库的readme.txt push到github中,再下载下来对比
可以发现,就算是中文后的CRLF换行符也很好地被替换为LF
之后将github仓库中的内容pull到本地合并时也没有发现任何的不同,证明这些LF又被替换为了CRLF

记Windows环境下Git使用的一个小坑,换行符自动转换问题_第3张图片
因此我暂时保留了git的自动替换换行符功能,这个问题留待以后深入研究。
请各位大神解答一二!

你可能感兴趣的:(Git)