VSCode 集成源代码控制和 pre-commit

19

在使用 VSCode 钩子,依赖于 Python venv 中安装的软件包时,可以使用 https://pre-commit.com。 在 pre-commit 中,可以指定使用“system”作为环境。这在终端中配合所需的 venv 激活非常好用。

然而,在使用集成源代码控制时,似乎访问了全局解释器,因此需要的软件包不可用。

这里是否有解决方法?目前我在 pre-commit 配置中指定入口点为“path/to/bin/python -m package”。但是我认为集成的源代码控制器也应该至少尊重所选的解释器。

有什么想法吗?

2个回答

3

VSCode似乎随意选择尊重和不尊重什么。 我有同样的情况-在集成终端上提交工作正常; 从源代码控制侧边栏提交会给我一个“找不到Python”的消息(这只是在安装pre-commit钩子之后出现的)。

我猜你将不得不通过试错,在系统中的每个Python安装中安装pre-commit,直到找到侧边栏正在调用哪个Python版本为止。


我没有解决方案,但我这里有一个类似的问题。我安装了一个 pre-commit 钩子 commitlint,同时还有其他钩子(eslint...)。当我尝试从“源代码控制”侧边栏提交时,eslint 通过了,而 commitlint 却失败了,因为“找不到可执行文件 'commitlint'”。 然而,我在集成终端中提交没有任何问题。某处,“源代码控制”没有在正确的位置搜索可执行文件。 - ToddEmon
2
VSCode似乎使用启动时的venv。如果您打开终端,激活venv并从venv内部启动代码,则git将使用已激活的venv。 - Arigion
有人找到解决方案了吗?我有JS项目,在终端使用git hook可以工作,但是在使用vscode源代码控制时,hook被忽略了。 - nerz

0

简而言之:我找到了一个解决方案,但最初需要一些手动操作。

起初,我也尝试使用pre-commit,但发现和一些同事报告的问题相同,即在使用VS Code的图形界面进行暂存和提交时无法正确执行它。(我总是使用终端)。


所以我写了自己的quality-gate.sh脚本,它:

  1. 运行source venv/bin/activate
  2. 然后才运行之前在pre-commit-config.yaml中定义的脚本

然后我手动将git钩子添加到.git/hooks文件夹中,方法如下:

  1. 创建pre-commit钩子mv pre-commit.sample pre-commit
  2. 打开脚本:vim pre-commit
  3. 清空之前示例文件中的所有内容
  4. 添加我想要运行的脚本:
#!/bin/sh
sh ./quality-gate.sh

5. 保存文件:ESC + :wq 6. 完成!
✅ 现在脚本会在我添加了一些更改并运行 "git commit ..." 时运行。
这对于在VS Code中使用图形界面的方法也适用 - 只要脚本运行,"Commit"加载栏就会一直运行 - 所以根据你的预提交脚本具体做了什么,你可能需要耐心等待。
我还在我的 quality-gate.sh 中包含了一个 exit 1 命令,如果任何检查失败,提交将被中止。

附加信息:

由于我们使用的是单一代码库,我在逻辑中包含了changed_files=$(git diff --name-only --cached),以便获取更改的项目文件夹列表,只有在相应文件夹中有暂存文件(即有更改)时,才运行预提交钩子 - 否则将跳过检查。

由于这是一个离题的内容,我不会在这里包含它 - 但如果需要进一步的说明或对此主题感兴趣,请随时评论。


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