如何使用Git pre-commit钩子

4

Yelp detect secrets 是一个防止机密信息进入您的代码库的系统。我想安装它提供的pre-commit hook

我以前从未使用过Git hooks,但是我在.git/hooks/中看到的所有示例文件都是bash文件,而yelp的readme中给出的示例是yaml文件。

他们链接到pre-commit.com;“用于管理和维护多语言pre-commit hooks的框架”。

这是否意味着只有先安装pre-commit框架才能使用yelp pre-commit hook?

如果是这样,我有点迷失在使用pre-commit上。我已经安装了它并且可以调用它。所以在一个现有的repo中,我运行了
pre-commit install
。但是我现在如何添加yelp detect secrets pre commit hook呢?
当然,我已经查阅了pre-commit.com的文档,但是我有些迷失。

你的问题实际上是什么?pre-commit钩子基本上是在执行提交之前运行的任意代码... - Idemax
1个回答

9
要使用 pre-commit,您需要设置一个 .pre-commit-config.yaml 文件,其中包含您想要使用的工具(如空格修复程序、linters、black、flake8 等)。
detect-secrets 还提供了一个使用此机制的 hook,并且您可以使用 它们提供的代码片段 来包含它。
-   repo: https://github.com/Yelp/detect-secrets
    rev: v0.13.0
    hooks:
    -   id: detect-secrets
        args: ['--baseline', '.secrets.baseline']
        exclude: .*/tests/.*

(注:我编辑了代码片段,使用https克隆URL更加便携)

如果您发现detect-secrets难以使用,还有更多处理此类问题的标准工具,例如bandit(也具有pre-commit集成)。

(免责声明:我是pre-commit的作者)


1
那么 .pre-commit-config.yaml 放在存储库的根目录下是吗? - kramer65
按照惯例,它放在代码库的根目录下。 - anthony sottile
你需要至少运行 git init . 命令来运行 install-hooks。 - Luis
有没有办法排除一些特定的行?例如在Kubernetes中,非常常见的词是"secretName",我想在高级别上排除它,而不是使用#pragma: allowlist secret - DeamonMV
1
@DeamonMV 这不是 detect-secrets 的问题跟踪器。 - anthony sottile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接