如何强制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

对于在设置全局设置后签出的回购协议,所有内容都将检查为回购协议中的内容 - 希望LFn )。 任何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?

下一篇: TortoiseGit client User info