Prettier on git commit hook 显示代码风格问题,但只有 CRLF 差异

Prettier on git commit hook shows code style issues, but only CRLF differences

我在我的 TypeScript 项目中使用 Prettier。我在 Visual Studio 代码中保存时格式化所有文件。 我还配置了一个 pre-commit git hook with Husky 来检查所有文件的格式。

这就是我的 pre-commit 挂钩文件的样子:

#!/bin/sh
. "$(dirname "[=11=]")/_/husky.sh"

cd ./MyApp/ClientApp

npx prettier --check .

有趣的部分来了。我使用 VS Code 处理 MyApp/ClientApp 目录中的文件,它会在保存时完成所有格式设置。到目前为止一切顺利。

但是,当我尝试进行提交时,Prettier 预提交挂钩被执行并且我收到以下错误:

git commit
Checking formatting...
[warn] src\dataTypes\numeratorObjectType.ts
[warn] src\viewModels\numeratorViewModel.ts
[warn] Code style issues found in the above file(s). Forgot to run Prettier?
husky - pre-commit hook exited with code 1 (error)

如果我在 VS Code 中打开这些文件并保存它们,则没有任何反应,因为它们已经被格式化。

所以我通过 运行 在 MyApp/ClientApp 目录中执行以下命令手动执行 Prettier:

npx prettier --write .

此命令输出所有文件,其中两个有问题的文件显然已重新格式化:

我还看到这些文件在 git 中发生了更改。但是,git diff 什么也没显示。当我执行 git add . 时,我收到以下警告:

The file will have its original line endings in your working directory. warning: LF will be replaced by CRLF

这意味着这些文件只有行尾有问题。 根据 this thread,我在我的 git 存储库中设置了以下配置参数:

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

似乎在执行git add时,CRLF 的警告消失了,但它仍然没有解决 Prettier 的问题。它仍然显示代码风格问题,即使文件中没有真正的 differences/styling 问题。

我在 Windows,我想这可能很重要。

知道这里有什么问题吗?目前,在预提交挂钩上检查 Prettier 格式没有任何意义。

在进一步挖掘问题并感谢 @eDonkey@torek 的评论后,我找到了解决方案。我测试了 2 天,似乎有效。

请注意,此解决方案可能适用于只有 Windows 开发人员的项目。如果你们所有人都在 Mac/Linux,您可能希望使用 LF 而不是 CRLF。如果团队混杂,我不确定这里有没有完美的解决方案。

首先,配置git不做CRLF -> LF转换:

git config core.autocrlf false

接下来,配置 Prettier 使用 CRLF 作为行尾字符。您可以通过将以下设置添加到 Prettier's config file:

来实现
"endOfLine": "crlf"

如果您的某些文件已经有 LF 行结尾,您可能需要将它们转换为 CRLF。为此使用 npx prettier --write . 就足够了。

我唯一注意到的是 git 现在在每行末尾添加 ^M 个字符:

但这对我来说不是问题。