如何为 Git 子模块配置独立的 Black 代码格式化设置

冬伟吖_8480

冬伟吖_8480

2026-11-01

871人浏览

原创

如何为 Git 子模块配置独立的 Black 代码格式化设置

VS Code 的 .vscode/settings.json 仅作用于当前工作区,无法按子目录(如 Git 子模块)自动切换 Black 格式化参数;需通过多根工作区或项目级配置(如 pyproject.toml)实现真正的差异化设置。

vs code 的 `.vscode/settings.json` 仅作用于当前工作区,无法按子目录(如 git 子模块)自动切换 black 格式化参数;需通过多根工作区或项目级配置(如 `pyproject.toml`)实现真正的差异化设置。

在大型 Python 项目中,主仓库与子模块可能遵循不同的代码风格规范(例如行宽限制:主仓库和 sub_01 要求 --line-length=150,而 sub_02 严格限定为 100)。你尝试在各目录下分别配置 .vscode/settings.json,但发现 VS Code 始终采用主工作区的设置(如 150),这是因为 VS Code 的用户/工作区设置不具备路径感知的“嵌套覆盖”能力——它不会根据当前编辑文件的物理路径动态加载对应子目录下的 settings.json。

✅ 正确解决方案如下:

✅ 方案一:使用 pyproject.toml(推荐,符合 Black 官方最佳实践)

Black 自 v22.1.0 起原生支持基于项目根目录的 pyproject.toml 配置,且会自动向上查找最近的配置文件。你只需为每个子模块(及主仓库)各自维护独立的 pyproject.toml:

# main_repo/pyproject.toml
[tool.black]
line-length = 150
# main_repo/subs/sub_01/pyproject.toml
[tool.black]
line-length = 150
# main_repo/subs/sub_02/pyproject.toml
[tool.black]
line-length = 100

✅ VS Code 的 ms-python.black-formatter 扩展会自动识别并应用当前文件所在目录的 pyproject.toml 配置(无需额外设置),真正实现“按路径生效”。

✅ 方案二:启用多根工作区(Multi-root Workspace)

将主仓库与各子模块作为独立文件夹添加到一个 .code-workspace 文件中,每个文件夹可拥有专属 settings.json:

git提交前检查
git提交前检查

在代码提交 git 前,通过 git diff 对比修改内容,逐文件审查变更点,检测潜在 BUG、隐含风险与可优化项,输出结构化审查报告。当用户表达提交前检查、提交检查、commit 前检查、pre-commit review、提前审查代码、检查一下改动、看看能不能提交等意图时使用此技能。注意:此技能与「代码评审」不同——代码评审在开发完成后结合需求文档与概要设计进行完整度审查,提交前检查是轻量级的基于 git diff 的代码质量把关。

下载
// main_repo.code-workspace
{
  "folders": [
    { "path": "." },
    { "path": "subs/sub_01" },
    { "path": "subs/sub_02" }
  ],
  "settings": {
    "[python]": {
      "editor.formatOnSave": true,
      "editor.defaultFormatter": "ms-python.black-formatter"
    }
  }
}

然后在 subs/sub_02/.vscode/settings.json 中单独指定:

{
  "black-formatter.args": ["--line-length=100"]
}

⚠️ 注意:此方式需手动打开 .code-workspace 文件(而非单纯打开 main_repo/ 文件夹),否则子模块设置不生效。

❌ 不可行方案说明

  • 单一工作区下的多层 .vscode/settings.json 会被合并(非覆盖),且 VS Code 总是优先采用最外层(主目录)的 black-formatter.args,无法按路径区分(参见 VS Code Issue #32693 —— 该功能目前仍为“已提出但未实现”状态)。

? 总结:永远优先使用 pyproject.toml 进行 Black 配置。它跨编辑器、跨 CI/CD 一致,且天然支持子模块隔离;.vscode/settings.json 仅应作为 IDE 特定行为(如保存触发时机)的补充,而非核心格式规则的载体。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1851

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4964

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1789

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

29797

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3547

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3567

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1223

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2763

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 8.1万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.9万人学习