Skip to content

pre-commit 在大小写敏感文件系统上运行失败的临时解决方案 #5140

@SigureMo

Description

@SigureMo

ฅ 问题描述 ฅ

由于目前 docs repo 存在一些除大小写外同名的文件,所以在大小写不敏感的文件系统上为 docs repo 做贡献时不免出现一些问题。一些问题也在 PaddlePaddle/Paddle#44671 进行了陈述。

最近在 docs 中的 Pull requests 中发现有很多贡献者都是使用大小写不敏感的文件系统的,因此也会有些文件始终处于修改状态,在这种情况下 pre-commit 是无法正常工作的,在正常安装 pre-commit 后,再进行 commit 会出现下述错误:

[WARNING] Stashed changes conflicted with hook auto-fixes... Rolling back fixes...
An unexpected error has occurred: CalledProcessError: command: ('/opt/homebrew/bin/git', '-c', 'core.autocrlf=false', 'apply', '--whitespace=nowarn', '/Users/username/.cache/pre-commit/patch1660543009-36147')
return code: 1
expected return code: 0
stdout: (none)
stderr:
    error: 打补丁失败:docs/api/paddle/vision/models/AlexNet_cn.rst:1
    error: docs/api/paddle/vision/models/AlexNet_cn.rst:补丁未应用
    error: 打补丁失败:docs/api/paddle/vision/models/GoogLeNet_cn.rst:1
    error: docs/api/paddle/vision/models/GoogLeNet_cn.rst:补丁未应用
    
Check the log at /Users/username/.cache/pre-commit/pre-commit.log

结果 pre-commit 的修复也是无法起作用的。

#4973 添加了一个自动在中英文之间添加空格的 hook,如果自己手动添加空格是非常麻烦的,很容易有所疏漏,因此贡献者如果不安装 pre-commit 就很容易被 CI 的代码风格检查卡住。而很多贡献者因为本地文件系统大小写不敏感,安装 pre-commit 后 commit 时会出错,不仅自动修复无法生效,而且连 commit 都不行……

ฅ 解决方案 ฅ

正常安装并应用 pre-commit 有两步,第一步全局安装工具 pre-commit

pip install pre-commit==2.17.0

第二步是在相应项目里注册 git hook

pre-commit install

注意第二步是在每个 repo 里都要运行的,比如 Paddle repo 和 docs repo 第二步是都要各自运行一次的。

对于存在大小写不敏感文件系统导致的问题的贡献者,暂时不要在 docs repo 运行第二步,也就是不要在 docs repo 里注册 git hook,以免自动执行 pre-commit 导致的失败。取而代之的是手动逐个为所有有改动的文件运行 pre-commit:

pre-commit run --files <filename>

<filename> 替换成需要修复的文件路径即可

Note

如果之前已经在 docs 项目里安装了 pre-commit(注册了 hook),那么只需要 pre-commit uninstall 即可移除注册的 hook

ฅ 其他 ฅ

本方法仅仅是一个临时解决方案,将来 PaddlePaddle/Paddle#44671 提到的问题解决后直接按照正常步骤安装 pre-commit 即可(就前面所说的第一步 + 第二步)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions