【发布时间】:2022-12-10 22:33:32
【问题描述】:
我想在 pre-commit 挂钩中运行静态检查(例如 mypy、pylint)。我目前的幼稚方法(只是在 pre-commit 挂钩中运行这些检查)由于未暂存的更改和未跟踪的文件而给了我误报和误报。
那我呢实际上想要做的是轻松创建提交,通过隐藏未暂存和未跟踪的本地更改来清理工作区,然后运行测试。
当然,我可以为此创建一个别名以使事情变得更容易,但那样我将不再被允许直接git commit(我也必须共享 git 配置文件)。
我也可以使用 pre-commit 挂钩,但我看不到允许 git commit -m"foo" file1 file2 的方法(即提供文件名而不是之前暂存所有更改)。
是否有一种预期的(甚至是内置的)方法来检查“提交后的状态,不包括本地修改(未跟踪和未暂存)”适用于
git commit -m"foo" file1 file2
【问题讨论】:
-
您正在寻找 pre-commit.com 它会按照您的描述进行操作:它会在运行您启用的挂钩之前存储未暂存的更改。
-
您可能会考虑将其转化为答案,以收获应有的声誉。不过,我会等待一两天,希望在 2022 年出现一些内置方法。看不出这不是默认行为的原因。
-
这不是默认行为,因为实际上涉及到相当多的机制,还有很多极端情况。 Git 本身说提交只是提交暂存的内容,因此您应该能够期望未暂存的更改保持不变。预提交违反了这是一种谨慎的方式,但也有极端情况:如果钩子所做的更改与未暂存的更改冲突怎么办? (例如,如果黑色是你的钩子之一,那很容易想象)。我从来没有遇到过这种情况,所以我不知道在那种情况下预提交会做什么,但现在我必须测试一下,我很好奇。
-
我应该补充... 预提交挂钩作者有责任扫描索引而不是文件系统上的文件。 Git 为它提供了所有必要的工具,但是做起来并不容易。这就是为什么我很高兴可以为我的 Python 项目使用预提交,为我的 Node 项目使用 Husky。
标签: git static-analysis pre-commit-hook