尽管手动格式化文件,预提交仍抱怨“隐藏的更改与挂钩自动修复冲突”?

Tyl*_*erg 8 git pre-commit-hook clang-format pre-commit.com

我正在使用以下钩子为我的 C++ 项目使用预提交(版本 2.20.0):

repos:
- repo: https://github.com/pre-commit/mirrors-clang-format
  rev: v14.0.6
  hooks:
  - id: clang-format
Run Code Online (Sandbox Code Playgroud)

我只是从几个不同的 .cpp/.h/cmakelists 文件中分别暂存了几行。当我尝试提交这些更改时,我从预提交中收到以下错误:

[WARNING] Unstaged files detected.
[INFO] Stashing unstaged files to C:\Users\tyler.shellberg\.cache\pre-commit\patch1665600217-21836.
clang-format.............................................................Failed
- hook id: clang-format
- files were modified by this hook
[WARNING] Stashed changes conflicted with hook auto-fixes... Rolling back fixes...
[INFO] Restored changes from C:\Users\tyler.shellberg\.cache\pre-commit\patch1665600217-21836.
Run Code Online (Sandbox Code Playgroud)

我对此感到困惑。预提交是否不允许我部分提交文件,或者在提交时根本不允许进行未暂存的更改?

所有文件,无论是暂存的还是未暂存的,都已按 clang-format 进行格式化。我已经手动仔细检查了这一点。

为了清楚起见编辑:

如果我pre-commit run --files [filename]在每个文件(暂存和未暂存)上运行,所有报告都会返回“已通过”或“已跳过”(对于非 cpp 文件)。如果所有文件都通过,为什么会出现问题?

Ant*_*ile 14

输出的第一部分是:

[WARNING] Unstaged files detected.
Run Code Online (Sandbox Code Playgroud)

这意味着你有一个部分分阶段的提交——这很好,pre-commit很好地支持这一点

然后,钩子进行了更改:

- files were modified by this hook
Run Code Online (Sandbox Code Playgroud)

这些更改一定与未暂存的部分冲突,因为随后会出现一条消息,例如:

[WARNING] Stashed changes conflicted with hook auto-fixes... Rolling back fixes...
Run Code Online (Sandbox Code Playgroud)

这意味着您需要确保未暂存部分的格式正确 ( pre-commit run --files whatever.cpp) 或也暂存这些部分,以便它们也得到格式化


免责声明:我创建了预提交

  • 该工具不允许您提交格式错误的内容——这就是重点 (2认同)