docs icon indicating copy to clipboard operation
docs copied to clipboard

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

Open SigureMo opened this issue 3 years ago • 0 comments

ฅ 问题描述 ฅ

由于目前 docs repo 存在一些除大小写外同名的文件,所以在大小写不敏感的文件系统上为 docs repo 做贡献时不免出现一些问题。一些问题也在 https://github.com/PaddlePaddle/Paddle/issues/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

ฅ 其他 ฅ

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

SigureMo avatar Aug 15 '22 14:08 SigureMo