首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Windows下强制Git使用LF而不是CR+LF?

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

Stack Overflow用户
提问于 2010-03-25 16:07:33
回答 6查看 351.4K关注 0票数 532

我想强迫Git在Windows下签出文件,只使用LF而不是CR+LF

我检查了这两个配置选项,但未能找到正确的设置组合。

我希望将所有文件转换为LF换行,并将LF保存在文件中。

备注:我使用了autocrlf = input,但这只是在提交文件时修复它们。

我想强迫它让他们使用LF

也许我不太清楚:存储库已经在使用LF了,但是使用用于Windows的Git签出的文件使用的是CR+LF,我想强迫Git使用LF强制Unix行结束来获得它们。

代码语言:javascript
复制
$ git config --list | grep crlf
core.autocrlf=input
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-25 16:37:09

“任择议定书”在其问题中补充说:

使用msysgit签出的文件使用的是CR+LF,我希望强制msysgit使用LF获取它们。

第一个简单的步骤仍然是在.gitattributes文件中:

代码语言:javascript
复制
# 2010
*.txt -crlf

# 2020
*.txt text eol=lf 

( 评论中注意到 by 孙女,指的是行尾转换),以避免对具有正确eol的文件进行CRLF转换。

我一直建议 git config --global core.autocrlf false来禁用任何转换(这将适用于所有版本文件)

请参阅跨平台git配置的最佳实践?

自Git 2.16以来 (Q1 2018),您可以使用git add --renormalize .立即应用这些.gitattributes设置。

但是第二个更强大的步骤涉及到一个gitattribute过滤器驱动程序并添加一个污点步骤。

无论何时更新工作树,脚本都可以强制执行.gitattributes中指定的文件和任何其他格式设置选项,仅针对您在LF eol中指定的文件。

如果"clear“脚本没有做任何事情,那么您将(在提交之后)转换您的文件,完全应用您需要它们遵循的格式。

票数 179
EN

Stack Overflow用户

发布于 2012-10-31 08:38:57

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

代码语言:javascript
复制
git config --global core.autocrlf false

如果使用msysgit,则需要这样做,因为它在系统设置中将其设置为true

现在,git不会执行任何结束规范化的行。如果希望将签入的文件标准化,请执行以下操作:在text=auto中为所有文件设置.gitattributes

代码语言:javascript
复制
* text=auto

并将core.eol设置为lf

代码语言:javascript
复制
git config --global core.eol lf

现在还可以将单个repos切换到crlf (在工作目录中!)通过跑

代码语言:javascript
复制
git config core.eol crlf

在完成配置之后,您可能希望git将回购中的所有文件规范化。要做到这一点,请转到repo的根目录并运行以下命令:

代码语言:javascript
复制
git rm --cached -rf .
git diff --cached --name-only -z | xargs -n 50 -0 git add -f

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

代码语言:javascript
复制
git ls-files -z | xargs -0 rm
git checkout .
票数 647
EN

Stack Overflow用户

发布于 2015-10-29 21:24:19

我经常回到这个问题上,尽管它的其他答案都不适合我。

话虽如此,对我来说,正确的答案是其他问题的混合。

我发现的工作如下:

代码语言:javascript
复制
git config --global core.eol lf
git config --global core.autocrlf input

对于在设置这些全局设置后签出的repos (Git存储库),所有内容都将被签出,无论它在回购程序中是什么--希望是LF (\n)。

在签入(提交)时,任何CRLF都将被转换为LF

使用您已经签出的现有回购(它在回购中有正确的行尾,而不是工作副本),您可以运行以下命令来修复它:

代码语言:javascript
复制
git rm -rf --cached .
git reset --hard HEAD

这将从当前目录(rm) (.)中递归删除(-r),而不使用提示符(-f),除已编辑的文件(--cached)之外的所有文件。然后,reset将所有这些文件返回到它们有真正行尾的状态(匹配回购中的内容)。

如果您需要修复回购中文件的行尾,我建议抓取一个编辑器,它可以让您像IntelliJ或Sublime那样进行批量操作,但我相信任何好的编辑器都可能支持这一点。

票数 381
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2517190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档