【问题标题】:In a pre-commit-hook is there a way to validate the "state after commit" of the checkout folder?在预提交挂钩中,有没有办法验证结帐文件夹的“提交后状态”?
【发布时间】:2022-12-10 22:33:32
【问题描述】:

我想在 pre-commit 挂钩中运行静态检查(例如 mypypylint)。我目前的幼稚方法(只是在 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


【解决方案1】:

您尝试执行的操作已在预提交 Python 模块中实现。它将为您存储未暂存的更改,运行您在配置文件中请求的所有挂钩,然后将存储的内容弹出。

参考:https://pre-commit.com/

如果您正在使用 Node,用 JS 编写的一个很好的替代方案是 Husky。它实现了许多 got 钩子,并且可以很容易地集成到任何 Node 项目中。

参考:https://typicode.github.io/husky

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 2014-10-01
    • 2016-04-02
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多