67

当我尝试提交一些更改的文件时,我收到以下 TortoiseGit 错误消息

fatal: LF would be replaced by CRLF in <some file in the repo>

现在,在我得到通常的LF vs CRLF答案之前,我知道并理解辩论的内容。其次,我还将全局设置设置为:

core.autocrlf true

第三,我有一个.gitattributes文件

所以我 - 想 - 确保文件被迫拥有CRLF.

我不明白的是,它在说FATAL并阻止我继续。一个警告?当然!我知道我想要做什么吗?我愿意!

我只想让它静默转换 STFU

或者,如果它被迫阻止我,有没有办法可以将 repo 中的所有文件更新为CRLF,因此不再发出此警告?

这些存储库是私有的,因此永远不会在 Windows + Visual Studio 之外开发。

我该如何进行?

4

6 回答 6

76

core.safecrlf如果您只需要警告而不是致命错误,则可能需要设置为“警告”。

来自git config”管理页面

核心.safecrlf

如果为真,当行尾转换处于活动状态时,让 git 检查转换 CRLF 是否可逆。Git 将验证命令是否直接或间接修改了工作树中的文件。
例如,提交一个文件然后签出同一个文件应该会在工作树中产生原始文件。如果 core.autocrlf 的当前设置不是这种情况,git 将拒绝该文件
该变量可以设置为“警告”,在这种情况下,git 只会警告不可逆的转换,但会继续操作。

CRLF 转换可能会损坏数据。
启用后,git 将在提交期间将 CRLF 转换为 LF,在签出期间将 LF 转换为 CRLF。
git 无法重新创建在提交之前包含 LF 和 CRLF 混合的文件
对于文本文件,这是正确的做法:它更正了行尾,以便我们在存储库中只有 LF 行尾。
但对于意外归类为文本的二进制文件,转换可能会损坏数据

如果您及早发现这种损坏,您可以通过在.gitattributes.
提交后,您的工作树中仍然有原始文件,并且该文件尚未损坏。你可以明确告诉 git 这个文件是二进制文件,git 会适当地处理这个文件。

不幸的是,无法区分清理具有混合行结尾的文本文件的预期效果和损坏二进制文件的不良效果。
在这两种情况下,CRLF 都会以不可逆的方式被移除。对于文本文件,这是正确的做法,因为 CRLF 是行尾,而对于二进制文件,转换 CRLF 会破坏数据。

我更喜欢确定我想.gitattributes仅使用文件(使用core.eol您拥有的设置)强制 eol 的确切文件或文件类型,并将其保留autocrlf为 false。

例如,对于具有混合 eol 的文本字段,此博客文章建议:

如果您的计算机中安装了 Notepad++,只需按照以下步骤操作。

  1. 打开有致命问题的文件。
  2. 单击Edit -> EOL Conversion然后选择 Windows 格式或任何您遇到问题的提交。

警告,如果您有 Git 2.17 或 2.18:在 Git 2.17 周期中的8462ff4(“ convert_to_git():safe_crlf/checksafe变为int conv_flags”,2018-01-13,Git 2.17.0)中引入的回归导致autocrlf重写产生警告消息,尽管设置safecrlf=false了.

请参阅Anthony Sottile ( ) 的提交 6cb0912(2018 年 6 月 4 日(由Junio C Hamano 合并 -- --8063ff9 提交中,2018 年 6 月 28 日)asottile
gitster

于 2013-03-18T06:45:16.870 回答
35
git config --global core.safecrlf false
于 2015-11-25T18:33:05.337 回答
13

这将禁用 crlf 致命警告。

git config core.autocrlf false
git config core.safecrlf false
于 2015-11-10T05:26:17.740 回答
4

由于您的仓库是私有的,您可以git-config这样设置:

git config --global core.autocrlf false

这将解决您的问题。如果您还有任何问题,您可以阅读《Pro git》</a>:

如果您是一名 Windows 程序员,正在做一个仅限 Windows 的项目,那么您可以关闭此功能,通过将配置值设置为false将回车记录在存储库中: $ git config --global core.autocrlf false

但是在协作时,您最好在下面执行这些操作:

  1. add .gitattributes, Github help - 处理行尾会有帮助。
  2. git config --global core.safecrlf true
    • 视窗:git config --global core.autocrlf true
    • mac 或 linux:git config --global core.autocrlf input

您可能想阅读Git docs-git config了解更多信息。

于 2018-05-07T16:23:34.173 回答
2

git config --global core.autocrlf false将使用不习惯的 CRLF 签入文件。

我在 Windows 上注意到,core.autocrlf truegit 不喜欢带有 LF 的文件,core.autocrlf input也不喜欢 CRLF。

所以:提交 CRLF 文件core.autocrlf true和 LF 文件core.autocrlf input(或将它们转换为 CRLF)。

通常带有 LF 的文件由代码生成器自动生成(例如https://start.spring.iohttp://yeoman.io/

于 2016-01-11T21:42:02.330 回答
0

使用 .gitattributes 文件,使用

*.h text=auto
*.cpp text=auto
*.txt text=auto

https://git-scm.com/docs/gitattributes中所述。

于 2016-12-16T09:15:29.943 回答