尝试提交Git文件,但获取:: fatal:LF将被<some file =“”in =“”repo =“”> </some>中的CRLF替换

时间:2013-03-17 23:21:18

标签: windows visual-studio git

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

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

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

core.autocrlf true

第三,I've got a .gitattributes file

所以我 - 想要确保或文件被迫CRLF

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

我只想让它以静默方式转换为STFU

或者,如果它被迫阻止我,有没有办法可以将仓库中的所有文件更新为CRLF,那么此警告可能会丢失?

这些repo是私有的,所以它们永远不会在Windows + Visual Studio之外开发。

任何人都可以提供帮助,而不必将此帖子诋毁为autocrlf TRUE vs autocrlf FALSE宗教战争。

6 个答案:

答案 0 :(得分:65)

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

来自"git config" mange page

core.safecrlf

  

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

     

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

     

如果您提前发现此类损坏,可以通过在.gitattributes中明确设置转化类型轻松解决此问题   提交后,您仍然在工作树中保留原始文件,此文件尚未损坏。你可以明确告诉git这个文件是二进制文件,git会适当地处理文件。

     

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

我更喜欢使用.gitattributes文件来识别我想强制执行eol的确切文件或文件类型(使用core.eol设置),并将autocrlf设置为false

如果是混合eol的文本文件,例如,blog post表示:

  

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

     
      
  1. 打开发生致命问题的文件。
  2.   
  3. 点击Edit -> EOL Conversion,然后选择Windows格式或任何您遇到问题的人。
  4.   

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

commit 6cb0912Anthony Sottile (asottile)(2018年6月4日) (由Junio C Hamano -- gitster --合并于commit 8063ff9,2018年6月28日)

答案 1 :(得分:23)

git config --global core.safecrlf false

答案 2 :(得分:8)

这将禁用crlf致命警告。

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

答案 3 :(得分:4)

由于您的回购是私有的,您可以像这样设置git-config

git config --global core.autocrlf false

这将解决您的问题。如果您有任何进一步的问题, 您可以阅读《Pro git》

  

如果您是Windows程序员,只执行Windows项目,则可以关闭此功能,通过将配置值设置为 false <来记录存储库中的回车符/强>:   $ git config --global core.autocrlf false

但是在合作时,你最好在下面做这些:

  1. 添加.gitattributesGithub help-Dealing with line endings会有所帮助。
  2. git config --global core.safecrlf true
    • 窗口:git config --global core.autocrlf true
    • mac或linux:git config --global core.autocrlf input
  3. 您可能需要阅读Git docs-git config了解详情。

答案 4 :(得分:1)

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

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

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

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

答案 5 :(得分:0)

使用.gitattributes文件,使用

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

如记录在案 https://git-scm.com/docs/gitattributes