【问题标题】:VSCode warning: LF will be replaced by CRLF inVSCode 警告:LF 将被替换为 CRLF
【发布时间】:2022-11-10 04:22:02
【问题描述】:

在 VSCode 中,我有一个弹出窗口,上面写着:

warning: LF will be replaced by CRLF in <xxx>

我认为这是一个警告,但我的承诺没有通过。

我检查并尝试在 VSCode 中找到一个配置 GIT 的地方。我读了一些建议,例如:

git config --get core.autocrlf 

我尝试在 VSCode 设置中找到一些选项,但我只是找不到在 VSCode 中配置它的方法。

配置这个的正确方法是什么?非常感谢。

【问题讨论】:

    标签: git visual-studio-code commit


    【解决方案1】:

    在 VSCode 之外,git config --global core.autocrlf false 是一个不错的选择,就像我 mentioned here 一样。

    在 VSCode 中,确保 EOL(行尾)指示器(状态栏中的右下角)是正确的。
    如果您的文件有混合行尾,则没有option to opt out of line ending normalisation for files,这意味着,在保存使用 VS Code 编辑的文件时,它似乎会自动执行行尾规范化,而无需任何形式的用户通知。

    注意:警告信息随着Git 2.37 (Q3 2022)的变化而变化,变为:

    In the working copy of 'hello.txt', LF will be replaced by CRLF 
    the next time Git touches it.
    

    【讨论】:

    • 我在 VSCode 中使用 Git 提交,而不是在命令行上。我不知道如何更改 git 使用的选项。如何在 VSCode 中更改它?
    • @DataT 您可以使用 integrated terminal 并直接从 VSCode 键入这些命令。
    • 谢谢回复。我正在考虑使用 VSCode 中的版本控制功能来运行 GIT,因此,我可以在里面配置选项。这个问题有可能吗?谢谢。
    • @DataT 是的,您可以从终端配置 Git。并将.gitattributes 文件添加到您的源代码中,以便为特定文件指定您想要的EOL,就像我有done before 一样。对于任何其他 Git 操作,我使用 GitLens VSCode extension
    【解决方案2】:

    如果您在 Windows 上工作,则需要确定您想要在沙箱中使用什么行尾,以及您想要在您的存储库中使用什么行尾。 autocrlf 设置的“正确”选择对每个人来说都不一样。

    autocrlf=false:不要弄乱我的文件!

    如果您只是不想让 Git 弄乱行尾,@VonC 的答案是正确的答案 - 将 autocrlf 设置为 false 意味着逐字输入和输出 Git。

    这可以说是autocrlf 的唯一正确设置,因为正如@VonC 指出的那样,像 Windows .bat 文件这样的文件会被换行符转换破坏,而且你真的不希望在二进制文件中发生行尾转换(即一旦您不小心对其进行了 CRLF->LF 转换,.jpg 文件可能无法恢复...)

    autocrlf=input: 修正我创建文件时的错误

    然而,我在 Windows 上的通常答案是不同的:在我的存储库中,我总是想要 Unix 风格的换行符。但是在我的 Windows 机器上,许多讨厌的工具使用 Windows 样式的换行符创建文件。是的,您可以(并且应该)将编辑器设置为使用正确的行尾,但是将 autocrlf 设置为 input 会捕获我的“错误”,例如,当 Windows 机器上的 Python 脚本生成文件时,它通常以 CRLF 行结尾结束。在我的 Windows 配置中,我总是使用 git config --global core.autocrlf input,这意味着我的文件总是使用 Unix 样式的换行符提交,但它们会在存储库中存在时被签出。

    .bat 和二进制文件呢?当此设置导致转换时,Git 会向我发出警告,因此如果它发生在不应发生的文件上,我会收到警告并可以修复该提交的情况。然而,我不记得曾经遇到过这个问题,但是我的 Git 存储库几乎完全是可移植的源代码和文本文件,我真的非常想要 LF 结尾。

    如果您在 Windows PC 上处理面向 Linux 或 Mac 的项目,我认为这是一个不错的设置。

    autocrlf=true:我真的总是希望在我签出的文件中使用 CRLF

    我提到这个是为了完整性,但通常会建议不要这样做。如果您在处理文件时总是希望文件以 CRLF 行结尾,则将 autocrlf 设置为 true 即可,但以 Unix 样式的 LF 行结尾提交它们。这在某些情况下是有道理的,但在许多情况下会造成麻烦。

    做出选择并在全球范围内保存

    根据您收到的消息,我猜true 是您的设置,因此您可能想决定falseinput 中的哪一个最适合您,并通过在其中运行这两个命令之一来全局设置你的 Git Bash 提示符:

    git config --global core.autocrlf false
    

    或者

    git config --global core.autocrlf input
    

    Git 开发者的愿望清单:

    我真正想要的是autocrlf=prompt 设置:在我尝试提交包含 CRLF 的文件时询问我该怎么做。我想我应该让自己成为一个预先提交的钩子......

    【讨论】:

    • core.autocrlf应该总是设置为假。对于特定文件,您可以设置text eol 属性,例如在我的project .gitattributes 中,Windows bat 脚本文件应始终使用 CRLF,而 Go 源文件应始终使用 LF。
    • @VonC 总是使用 false 有很好的论据,但我不同意这一定是一个硬性规则。鉴于 Git 每次 input 导致转换发生时都会警告我,那些可能造成伤害的情况不会默默发生,我看到它们并且我可以对它们做点什么。
    • 我在 VSCode 中使用 Git 提交,而不是在命令行上。我不知道如何更改 git 使用的选项。如何在 VSCode 中更改它?
    • @DataT 根据code.visualstudio.com/docs/editor/versioncontrol,您可以运行我们在 VSCode 内的终端窗口中显示的那些命令。 Git 插件通常只是 Git CLI 的一个包装器,它应该使用相同的配置文件。
    【解决方案3】:

    如果您使用的是 Windows
    修复方法是使用 autocrlf true

    git config --global core.autocrlf true

    除非您再次删除并克隆存储库或重新启动索引,否则您不会看到它工作

    混帐添加 --renormalize 。

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 2010-12-08
      • 1970-01-01
      • 2011-09-23
      • 2019-04-16
      • 2014-09-05
      • 1970-01-01
      • 2011-12-15
      • 2016-10-01
      相关资源
      最近更新 更多