了解如何使用 repo: local 配置预提交

Rya*_*yan 18 pre-commit.com

我正在尝试在工作中进行预提交工作(我让它在个人计算机上工作)。我们的安全设置不允许预先提交引用外部存储库并从中安装外部包。

看来我的选择是:

  1. 在本地 git 服务器上保留所需存储库的副本
  2. 设置 .pre-commit-config.yml 以使用本地存储库

在决定采取哪条路径之前,我想更多地了解本地存储库的工作原理,但在预提交网站(或其他地方)上找不到大量有关具体细节的文档。

我有 .pre-commit-config.yml 设置,如下例所示。

repos:
-   repo: local
    hooks:
      - id: isort
        name: Run isort
        entry: isort
        language: system
      - id: black
        name: Run black
        entry: black
        language: system
      - id: flake8
        name: Run flake8
        entry: flake8
        language: system
      - id: pydocstyle
        name: Run pydocstyle
        entry: pydocstyle
        language: system
Run Code Online (Sandbox Code Playgroud)

如果我使用上面的 .pre-commit-config.yml,则使用什么系统版本的软件包?它是活动 conda 环境中的版本(我正在使用 conda)吗?我认为情况会是这样,但预提交挂钩似乎正在运行,即使我没有isortblack、 和flake8pydocstyle我认为情况确实如此,但即使我在激活的 conda 环境中

这对我来说似乎很奇怪,但我无法在网上找到任何内容来确认这些软件包的系统版本将在本地存储库设置中使用。

language: python另外,如果我使用而不是会发生什么language: system

除了我概述的内容之外,如果其他人对使用预提交和我面临的安全限制有任何想法,我也很乐意。

Ant*_*ile 19

存储库本地挂钩记录在此处

一般来说,它们是框架的逃生舱口,通常不是您应该采取的路线(建议的路线是使用可重用存储库)

language: system是一个额外的逃生舱口,在这种模式下,预提交不会管理您的工具,您必须手动安装它们(这完全违背了框架的目的,但它在某些用例中启用了一定程度的遗留兼容性)。因为language: system它将运行这些工具,就像您在 shell 中运行它们一样(例如entry: flake8将使用任何which flake8返回值)

language: python另一方面是托管环境,预提交将为您设置并安装它。〜通常,如果您使用language: pythonwith,repo: local您将利用它additional_dependencies来安装这些东西

网站上也记录了每种语言


免责声明:我创建了预提交

  • 已经有一个“语言:conda”——是的,“类型”控制着运行的文件——这表示这些都是单独的问题(评论经常被删除),并且可能会受益于单独的问答 (2认同)
  • 如果您的预提交挂钩依赖于已在某种需求文件中指定的 Python 包,那么它是否仍然违背了框架使用本地挂钩的目的?当我已经执行了 `pipenv install --dev flakeheaven` 并可以使用 `pipenv run flakeheaven` 干净、安全地运行它时,创建一个单独的 Venv 只是为了运行 Flakeheaven 似乎很浪费。我很好奇您是否认为这是您框架中的某种反模式,或者这是否是可接受/支持的用例。 (2认同)
  • 是的,因为我不能只是克隆你的存储库并运行工具——我必须以某种方式找出你的自定义开发环境并对齐所有星星并安装所有东西并使其正常工作 (2认同)