尝试提交Git文件,但得到::致命的:LF将被CRLF <repo中的一些文件>所取代

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

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

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

core.autocrlf true

第三, 我有一个.gitattributes文件 。

所以我想 – 确保或文件被迫有CRLF

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

我只是想要它静静地转换和STFU

或者,如果它被迫阻止我,是否有办法我可以更新回购所有文件是CRLF ,所以这个警告可能会丢失?

这些回购是私人的,所以他们永远不会在Windows + Visual Studio之外开发。

任何人都可以请不要诋毁这个线程autocrlf TRUE vs autocrlf FALSE宗教战争。

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

从“ git config ”pipe理页面 :

core.safecrlf

如果为true,则使git检查在行结束转换处于活动状态时转换CRLF是否可逆。 Git会validation命令是直接还是间接地修改工作树中的文件。
例如,提交文件,然后检出相同的文件,应该在工作树中生成原始文件。 如果core.autocrlf的当前设置不是这种情况,那么git会拒绝这个文件
variables可以设置为“警告”,在这种情况下,git只会警告不可逆的转换,但继续操作。

CRLF转换承受了破坏数据的轻微机会。
当它被启用时,git将在提交期间将CRLF转换为LF,并在结算期间将LF转换为CRLF。
在提交之前包含LF和CRLF混合的文件不能被git重新创build
对于文本文件,这是正确的做法:它纠正行结束,使得我们在存储库中只有LF行尾。
但是,对于意外分类为文本的二进制文件,转换可能会破坏数据

如果您提前认识到这种腐败,您可以通过在.gitattributes明确设置转换types来轻松修复它。
提交后,您仍然有工作树中的原始文件,该文件尚未损坏。 你可以明确地告诉git这个文件是二进制的,git会适当的处理这个文件。

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

我更喜欢识别文件的确切文件或types,我只想用.gitattributes文件强制执行。(具有core.eol设置),并将autocrlf为false。

如果文本混合使用eol,这个博客文章build议,例如:

如果您的计算机中安装了Notepad ++,只需执行以下步骤。

  1. 打开有致命问题的文件。
  2. 点击Edit -> EOL Conversion然后selectWindows格式或任何你有问题提交。
 git config --global core.safecrlf false 

这将禁用crlf致命警告。

 git config core.autocrlf false git config core.safecrlf false 

git config --global core.autocrlf false将签入文件与CRLF,这是不习惯。

我注意到在Windows上,与core.autocrlf true git不喜欢文件LF和core.autocrlf input不喜欢CRLF。

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

通常使用LF的文件是由代码生成器自动生成的(例如https://start.spring.io或http://yeoman.io/

使用.gitattributes文件,请使用

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

正如在https://git-scm.com/docs/gitattributes中所logging的那样。;

Interesting Posts