为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Windows下强制git使用LF而不是CR + LF?

如何在Windows下强制git使用LF而不是CR + LF?

Git
暮色呼如 2019-10-12 14:34:17
我想强制git在Windows下使用LFnot 检出文件CR+LF。我检查了两个配置选项,但找不到正确的设置组合。我希望它可以将所有文件转换为LF并保留LF在文件上。备注:我曾经使用过,autocrlf = input但这只是在您提交文件时修复文件。我想强迫它使用它们LF。可能我不太清楚:存储库已经在使用,LF但是使用msysgit检出的文件正在使用CR+LF,我想强制使用msysgit来获取它们LF:强制Unix行结尾。>git config --list | grep crlfcore.autocrlf=input
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

在Windows中获取LF结尾的正确方法是首先设置core.autocrlf为false:


git config --global core.autocrlf false

如果使用的是msysgit,则需要执行此操作,因为它true在系统设置中将其设置为。


现在,git将不执行任何以规范化结尾的行。如果你想你的文件检查是标准化的,这样做:设置text=auto在您的.gitattributes所有文件:


* text=auto

并设置core.eol为lf:


git config --global core.eol lf

现在,您还可以通过运行将单个存储库切换到crlf(在工作目录中!)。


git config core.eol crlf

完成配置后,您可能希望git规范化repo中的所有文件。为此,请转到存储库的根目录并运行以下命令:


git rm --cached -rf .

git diff --cached --name-only -z | xargs -n 50 -0 git add -f

如果现在希望git也将工作目录中的文件标准化,请运行以下命令:


git ls-files -z | xargs -0 rm

git checkout .


查看完整回答
反对 回复 2019-10-12
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

尽管这些都不适合我,但我经常会回到这个答案。就是说,对我来说正确的答案是其他答案的混合体。


我发现有效的方法如下:


 git config --global core.eol lf

 git config --global core.autocrlf input

对于在设置了这些全局设置之后签出的回购协议,所有内容都将按照回购协议中的内容进行签出–希望LF(\n)。任何CRLF都将LF在签到时转换为仅。


对于已经签出的现有仓库(仓库中有正确的行尾而不是工作副本),可以运行以下命令来修复它:


git rm -rf --cached .

git reset --hard HEAD

这将从当前目录()中rm递归(r)删除(),而不提示(-f)除已编辑(--cached)以外的所有文件.。在reset随后返回所有这些文件到他们自己的真实行结束(匹配什么在回购)的状态。


如果您需要在回购中修复文件的行尾,我建议使用一种编辑器,该编辑器可以让您像IntelliJ或Sublime Text一样批量执行此操作,但是我敢肯定,任何好的软件都可能会支持这一点。


查看完整回答
反对 回复 2019-10-12
  • 3 回答
  • 0 关注
  • 1504 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信