VSCode集成了源代码控制和预提交



使用https://pre-commit.com使用依赖于Python venv中安装的包的VSCode挂钩。在预提交时可以指定使用";系统";作为环境。这在具有所需venv活动的终端上非常有效。

然而,使用集成的源代码管理似乎可以访问全局interper,因此所需的包不可用。

这里有变通办法吗?就目前而言,我指定入口点";path/to/bin/python-m包";在预提交配置中。但我确实认为,综合源代码管理至少应该尊重选定的interper。

有什么想法吗?

VSCode似乎随意选择它尊重什么和不尊重什么。我也有同样的情况——在集成终端上进行承诺效果良好;从源代码管理侧边栏进行操作给了我一个";Python找不到"消息(仅在安装预提交挂钩后才出现(。

我的猜测是,你必须反复尝试,在系统中的每个Python安装中安装pre-commit,直到你找到侧边栏正在调用哪个。

TLDR:我找到了一个解决方案,但最初需要一些手动工作。

起初,我也尝试使用pre-commit,但发现了与我的一些同事报告的VS Code在通过GUI进行转移和提交时无法正确执行它相同的问题。(我总是使用我的终端(


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

  1. 运行source venv/bin/activate
  2. 并且之后只有运行先前在pre-commit-config.yaml下定义的脚本

然后我在.git/hooks文件夹中手动添加了git挂钩,方法是:

  1. 创建预提交挂钩mv pre-commit.sample pre-commit
  2. 打开脚本:vim pre-commit
  3. 删除上一个示例文件中的所有内容
  4. 添加我要运行的脚本:
#!/bin/sh
sh ./quality-gate.sh
  1. 保存文件:ESC+:wq
  2. 完成!🎉

✅现在,每当我进行(又称添加(一些更改并运行";git提交&";。

这也适用于VS代码中的GUI方法-;提交"只要您的脚本运行,加载栏就会一直运行,所以您可能需要耐心等待,这取决于您的预提交脚本到底做了什么。

如果任何检查失败,我还在quality-gate.sh中包含了一个exit 1命令,因此提交将被中止。



附加信息:

由于我们使用的是monoreo,我在changed_files=$(git diff --name-only --cached)中包含了一些逻辑,以便获得已更改项目文件夹的列表,以便如果相应文件夹中有暂存文件(也就是说有任何更改(,则仅运行预提交挂钩,否则将跳过检查。

由于这不是主题,我不会在这里包括它,但如果需要进一步的说明,或者如果你对这个主题感兴趣,请随时发表评论。

相关内容

最新更新