如何强制git在Windows下使用LF而不是CR + LF?
我想强制git使用LF
而不是CR+LF
在Windows下签出文件。 我检查了两个配置选项,但我无法找到正确的设置组合。
我想它的所有文件转换为LF
,保持LF
上的文件。
备注:我使用了autocrlf = input
但这只是在您提交它们时修复了这些文件。 我想强制它让他们使用LF
。
大概我不是那么清楚:存储库已经在使用LF
但使用msysgit检出的文件正在使用CR+LF
,我想强制msysgit使用LF
来获取它们: 强制Unix行结束 。
>git config --list | grep crlf
core.autocrlf=input
OP在他的问题中补充道:
使用msysgit检出的文件正在使用CR+LF
,我想伪造msysgit以使用LF
获取它们
第一个简单的步骤仍然在.gitattributes
文件中:
*.txt -crlf
,以避免使用正确的eol文件进行crlf转换。
请参阅跨平台git配置的最佳实践?
但第二个更强大的步骤涉及一个gitattribute筛选器驱动程序并添加一个涂抹步骤
每当你更新你的工作树时,只有你在.gitattributes
指定的文件才可以强制执行LF eol
和任何其他格式化选项。
如果“ clear
”脚本没有做任何事情,你将会(在提交之后)转换你的文件,完全按照你需要遵循的格式。
在Windows中获得LF结尾的正确方法是首先将core.autocrlf
设置为false
:
git config --global core.autocrlf false
如果您使用的是msysgit,则需要执行此操作,因为它在系统设置中将其设置为true
。
现在git不会做任何行结束标准化。 如果你想让你检入的文件被标准化,执行下面的操作:在你的.gitattributes
为所有文件设置text=auto
:
* 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 .
我经常回到这个答案,尽管这些都不适合我。 也就是说,对我来说正确的答案是其他人的混合物。
我发现的作品如下:
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
然后将所有这些文件返回到它们具有其真实行结束的状态(匹配回购中的内容)。
如果你需要修复repo中文件的行结尾,我建议抓取一个编辑器,让你像IntelliJ或Sublime Text一样批量执行此操作,但是我相信任何好的操作都可以支持这一点。
链接地址: http://www.djcxy.com/p/24447.html上一篇: How do I force git to use LF instead of CR+LF under windows?