Visual Studio 代码显示文件已修改,但未修改

Visual Studio Code shows file modified when it's not

我遇到了与此处相同的问题:

一大堆文件显示为在源代码管理下进行了修改,但它们的内容是相同的。我运行推荐了下面3个没有帮助..

git config core.filemode false  
git config --global core.filemode false
git config --global core.autocrlf false

我建议你最好检查visual-studio-code的自动保存功能

你说你正在使用 prettier 来格式化文件:我会去那里看看。它可能 trim 尾随空格。它可能会根据 git 的要求在文件末尾添加尾随换行符。没有适当的 diff 或 diff 的屏幕截图,我只能猜测。

我使用带有如下条目的 .editorconfig 文件来保护尾随空格是语法一部分的文件。第二个条目是另一个示例,其中更漂亮的格式可能会导致问题。

[*.md]
trim_trailing_whitespace = false

# The indent size used in the `package.json` file cannot be changed
# https://github.com/npm/npm/pull/3180#issuecomment-16336516
[{*.yml,*.yaml,package.json}]
indent_style = space
indent_size = 2

我认为 prettier 尊重 editorconfigs(像大多数工具一样)并且 vscode 可以使用插件来实现。由于您一次格式化许多存储库,我不确定哪些文件会应用以及何时应用。

接下来我会查看您的 vscode 设置。这是部分 settings.json ,其目的与上面的示例相同。几乎每个设置在界面中都有对应的设置。查找每个设置或搜索“命令调色板”以快速找到它们。

// Place your settings in this file to overwrite default and user settings.
{
  "files.trimTrailingWhitespace": true,
  "files.insertFinalNewline": true,
  "[plaintext]": {
    "files.insertFinalNewline": false
  },
  "[markdown]": {
    "files.trimTrailingWhitespace": false
  }
}

这些 vscode 设置对我来说尤其重要,可以避免像您遇到的意外问题。

最后,检查每个存储库根目录中的 .gitattributes 文件。他们将在每个项目的基础上覆盖您的全局 git 设置。对我来说重要的条目是:

# Auto detect text files and perform LF normalization
* text=auto

# Special files
LICENSE.txt eol=crlf

# Reasonable Defaults
*.bat eol=crlf
*.cmd eol=crlf
*.ps1 eol=lf
*.sh eol=lf
*.rtf -text

您可以通过指示 git 您希望如何处理事情来回避这些问题。就个人而言,我在来自不同平台的存储库中的 PDF 文件也有类似的问题。这会在 git 本身中产生一些问题(其中文件被标记为已修改但不能丢弃更改。)