-
Couldn't load subscription status.
- Fork 869
Description
ฅ 问题描述 ฅ
由于目前 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 即可(就前面所说的第一步 + 第二步)