如何强制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
添加并提交它。