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

我想强制git在Windows下使用LF而不是CR+LF签出文件。 我检查了两个configuration选项,但我无法find正确的设置组合。

我希望它将所有文件转换为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 

,以避免任何crlf转换为正确的EOL文件。

请参阅跨平台gitconfiguration的最佳做法?


但第二个更强大的步骤涉及一个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 

完成configuration后,您可能需要git来标准化存储库中的所有文件。 要做到这一点,去你的回购的根,并运行这些命令:

 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 . 

我经常回到这个答案,尽pipe这些答案都不适合我。 也就是说,对我来说正确的答案是其他人的混合物。

我发现的作品如下:

  git config --global core.eol lf git config --global core.autocrlf input 

对于在设置全局设置后签出的回购协议,所有内容都将作为回购协议中的内容进行检查 – 希望LF\n )。 任何CRLF将在登记时转换为LF

使用已经检出的现有仓库 – 在仓库中有正确的行结尾,但不是工作副本 – 您可以运行以下命令来修复它:

 git rm -rf --cached . git reset --hard HEAD 

这将从当前目录( . )中recursion删除( r )( r )没有提示符( -f )的所有文件,除了那些已经编辑过的文件( --cached )。 然后reset将所有这些文件返回到它们具有其真实行结束的状态(匹配回购中的内容)。

如果你需要修复repo中文件的行结尾,我build议你抓取一个编辑器,这个编辑器可以像IntelliJ或者Sublime Text一样批量执行,但是我相信任何好的编译器都可以支持。

core.autocrlf=input是你想要的正确的设置,但是你可能需要做一个git update-index --refresh和/或git reset --hard来让更改生效。

core.autocrlf设置为input ,git将不会在检出时应用换行符(所以如果你在回购库中有LF的话,你会得到LF),但是它会确保万一你搞砸了, CRLFs在工作中不知何故,他们将不会进入回购。

如果您(i)想强制所有用户使用文本文件的LF行结尾,并且(ii)您不能确保所有用户更改其gitconfiguration,那么可以使用git 2.10开始。 2.10或更高版本是必需的,因为2.10将text = auto的行为与eol = lf一起固定 。 来源 。

因此,把一个.gitattributes文件放到你的git仓库的根目录下面,内容如下:

 * text=auto eol=lf 

添加并提交它。