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) 或也暂存这些部分,以便它们也得到格式化
免责声明:我创建了预提交