Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
SigureMo opened this issue Aug 15, 2022 · 1 comment
Closed

Comments

@SigureMo
Copy link
Member

SigureMo commented Aug 15, 2022

ฅ 问题描述 ฅ

由于目前 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 即可(就前面所说的第一步 + 第二步)

@Ligoml Ligoml pinned this issue Aug 16, 2022
@SigureMo
Copy link
Member Author

应该已经被 #5174 解决,之后可直接按上述正常步骤使用 pre-commit 即可,无需手动执行

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant