Skip to content
| Marketplace
Sign in
Visual Studio>Tools>Git +
Git +

Git +

View

|
106 installs
| (0) | Free
Visual Studio Git Enhancement Extension — toolbar buttons, auto-fetch, smart sync and conventional commits on top of VS built-in Git tools.
Download

GitPlus 图标

Git +

Visual Studio Git 增强扩展
在 VS 内置 Git 工具之上,提供工具栏按钮、自动 Fetch、智能同步、约定式提交及 Git Hook 功能。

English Documentation


✨ 功能

🔄 拉取(自动储藏)

一键拉取,自动处理本地更改。Pull with Stash(拉取+储藏) 按钮被注入到 Git 更改窗口工具栏,紧邻原生 Pull 按钮。点击后:

  1. 通过 git status 检查本地更改
  2. 如有本地更改,自动储藏(git stash push)
  3. 执行 git pull(可选 --rebase)
  4. 恢复储藏(git stash pop)

告别"存在未提交的更改,无法拉取"的错误——快速同步代码而不中断工作流。

当 VS 内置的 Action Button(如解决冲突的"继续"按钮)可见时,Pull with Stash 按钮会自动隐藏以保持界面整洁。

⏱️ 自动 Fetch

按可配置的时间间隔,在后台定期执行 git fetch --all --prune。无需手动操作即可保持与远程仓库同步。自动 Fetch 的间隔信息会显示在 Fetch 按钮的提示文本中。

📝 约定式提交

将约定式提交模板直接插入 Git 提交消息框。插入约定式提交模板 按钮被注入到 Git 更改窗口,紧邻工作项链接按钮。支持:

  • 从预定义的提交类型中选择(feat、fix、docs、style、refactor、perf、test、chore、ci、build、revert),每种类型均附带 emoji 和描述
  • 可选的范围支持 — 从 .gitplus/conventional-commits.settings.json 读取
  • BREAKING CHANGE 尾注插入(含 header 中的 ! 标记)
  • 类型替换 — 选择不同类型可替换消息中已有的类型
  • 通过 ENABLE COMMIT CONVENTION 菜单项启用约定式提交校验

✅ 约定式提交语法校验

对提交消息进行实时语法校验,遵循 Conventional Commits 规范。当通过 .gitplus/conventional-commits.settings.json 启用严格校验后,扩展将:

  • 实时解析提交消息,使用自研的 lexer/parser 完整理解约定式提交语法(类型、范围、! 标记、描述、正文、尾注)
  • 高亮显示语法错误和警告,直接在提交文本框中以波浪下划线标注 — 红色表示错误,黄色表示警告
  • 格式无效时以红色边框勾勒提交消息区域
  • 禁用提交按钮,直至所有错误均已解决
  • 显示诊断消息(CC001–CC014),精确描述问题所在

校验器检查以下内容:

  • 缺失或无效的提交类型
  • 类型/范围后缺少冒号或空格
  • 范围括号格式错误
  • 缺少描述文本
  • 无效的尾注键(如 BREAKING CHANGE、自定义尾注)
  • 意外的多余空行或空格

🪝 约定式提交 Git Hook

GitPlus 内置一个独立的 Git commit-msg Hook 工具(conventional-commits.githook.exe),可在 Git 仓库中安装为 commit-msg 钩子,在 git commit 时自动校验提交消息格式。该工具:

  • 基于 .NET 10 构建,经过 Native AOT 编译为独立可执行文件,无需运行时
  • 读取仓库根目录下的 .gitplus/conventional-commits.settings.json 获取校验规则
  • 内置与 VS 扩展相同的完整 lexer/parser,校验逻辑完全一致
  • 通过菜单中的 ENABLE COMMIT CONVENTION 即可一键安装到当前仓库的 .git/hooks/ 目录

工作流程:

git commit -m "..."
  → .git/hooks/commit-msg 脚本触发
    → conventional-commits.githook.exe 校验消息
      → 格式错误:拒绝提交并显示诊断信息
      → 格式正确:通过校验,提交继续

⚙️ 基于仓库的提交规范配置

GitPlus 支持基于仓库的提交规范配置。.gitplus/conventional-commits.settings.json 可直接提交到 Git 仓库,使团队成员共享统一的提交消息规则。配置文件支持:

  • enableStrictValidation — 启用/禁用严格校验
  • scopes — 允许的 scope 列表(空列表时不校验 scope)
  • customRules — 自定义提交类型(扩展默认 11 种类型)
  • customFooters — 自定义尾注键(除 BREAKING CHANGE 外)

该文件可从插入约定式提交模板菜单一键生成,包含 JSON Schema 引用以提供 IDE 智能提示。

⚙️ 可配置选项

所有选项可通过 工具 → 选项 → Git + 访问:

类别 选项 默认值 描述
常规 超时(秒) 30 Git 操作超时时间
常规 Git 文件路径 (系统 PATH) 自定义 git.exe 路径
自动 Fetch 启用自动 Fetch ✅ 开 开启/关闭后台自动 Fetch
自动 Fetch Fetch 间隔(分钟) 5 自动 Fetch 调用间隔
拉取 拉取时使用 Rebase ✅ 开 使用 --rebase 代替合并
拉取 显示自动拉取按钮 ✅ 开 显示/隐藏自动拉取按钮
提交 显示约定式提交按钮 ✅ 开 显示/隐藏约定式提交按钮
提交 约定式提交设置文件名 conventional-commits.settings.json 用于提交消息校验的设置文件
日志 日志级别 信息 Git + 输出窗格的日志详细程度

🌐 本地化

扩展界面支持英文和简体中文(zh-Hans)两种语言。


📸 截图

GitPlus

注入到 Git 更改窗口中的 Pull with Stash(拉取+储藏) 按钮、约定式提交 按钮以及实时 语法校验 功能。


📦 安装

前提条件

  • Visual Studio 2022(版本 17.0 或更高)
  • .NET Framework 4.7.2 或更高

通过 VSIX 安装

从 Releases 下载 .vsix 文件,双击安装。或从源码构建:

dotnet build GitPlus.slnx -c Release

生成的 .vsix 文件位于:

GitPlus.Extensions/bin/Release/GitPlus.vsix

🛠️ 开发

技术栈

项目 目标框架 说明
GitPlus.Extensions net472 VS 2022 进程内扩展
GitPlus.Commons netstandard2.0 共享工具库(DI、GitResult、Hash)
GitPlus.ConventionalCommits netstandard2.0 约定式提交 lexer/parser 引擎
GitPlus.ConventionalCommits.GitHook net10.0 Git commit-msg Hook(Native AOT)
GitPlus.Tests net472 单元测试
  • 语言:C# 14(record、模式匹配、file-scoped namespace)
  • 核心依赖:
    • Microsoft.VisualStudio.SDK — VS 扩展性
    • CommunityToolkit.Mvvm — AsyncRelayCommand
    • Lombok.NET — [RequiredArgsConstructor] 源码生成注入
    • Microsoft.Extensions.DependencyInjection — DI 容器
    • Microsoft.Extensions.Logging.Abstractions — 结构化日志
  • 包管理:集中式版本管理(Directory.Packages.props)

项目结构

GitPlus.Extensions/                  # VS 扩展主项目(net472)
├── GitPlusPackage.cs                # AsyncPackage 入口,DI 初始化 + Injector 调度
├── Configurations/
│   └── GitPlusOptionPage.cs         # 工具 → 选项 对话框页 + GitPlusOption POCO
├── Injectors/
│   ├── InjectorBase.cs              # UI 注入器抽象基类
│   ├── GitWindowActionButtonPanelInjector.cs  # Pull with Stash 按钮注入
│   └── GitWorkItemActionStackPanelInjector.cs # 约定式提交 + 语法校验 + Git Hook
├── Services/
│   ├── WindowWatcher.cs             # DTE 窗口生命周期事件
│   ├── GitCommandService.cs         # git.exe 进程封装
│   └── AutoFetchService.cs          # 定时自动 Fetch
├── Commons/
│   ├── DependencyObjectExtensions.cs # WPF VisualTree 扩展(FindChild/InsertElement 等)
│   ├── FileBrowserEditor.cs         # 文件浏览器 UITypeEditor
│   ├── GitWindowLocator.cs          # VisualTree 元素定位器
│   ├── GitWindowViewModelExtensions.cs # VS 内部 ViewModel 反射扩展
│   ├── OutputWindowLogger.cs        # VS Output Window 日志提供程序
│   ├── ResourceExtensions.cs        # 资源 URI 辅助方法
│   └── WaveUnderlineAdorner.cs      # 波浪下划线装饰器
├── Resources/
│   ├── GitButtonStyle.xaml          # ImageButton 控件模板
│   └── Icons.xaml                   # DrawingImage 矢量图标
└── Assets/
    ├── conventional-commits.rules.json        # 内置提交类型规则
    ├── conventional-commits.rules.schema.json # 规则 JSON Schema
    ├── conventional-commits.settings.schema.json # 设置 JSON Schema
    └── conventional-commits.githook.exe       # Git Hook 可执行文件

GitPlus.Commons/                     # 共享工具库(netstandard2.0)
├── Extensions.cs                    # DI 容器 / 字符串扩展
├── GitResult.cs                     # Git 操作结果模型
├── Hash.cs                          # 哈希工具
├── LocalizedAttributes.cs           # 本地化特性类
├── Properties/
│   └── Languages.resx               # 多语言资源(自动生成 .Designer.cs)
└── Text/
    └── TextSpan.cs                  # 文本范围结构

GitPlus.ConventionalCommits/         # 约定式提交引擎(netstandard2.0)
├── Lexer.cs                         # 词法分析器
├── Parser.cs                        # 语法分析器(递归下降)
├── ParserSettings.cs                # 解析器配置
├── Diagnostic.cs                    # 诊断模型(CC001–CC014)
├── ConventionalCommitRules.cs       # 提交规则模型
├── ConventionalCommitSettings.cs    # 仓库级设置模型
└── Syntaxs/
    ├── SyntaxKind.cs                # Token/AST 节点类型枚举
    ├── SyntaxToken.cs / SyntaxNode.cs / SyntaxTree.cs
    ├── HeaderSyntax.cs / ScopeSyntax.cs
    ├── BodySyntax.cs / FooterSyntax.cs
    └── CommitSyntax.cs              # 顶层 AST 节点

GitPlus.ConventionalCommits.GitHook/ # Git Hook 独立工具(net10.0, PublishAot)
├── Program.cs                       # 入口点:读取设置、校验提交消息
└── ConventionalCommitOptionsJsonSerializerContext.cs # AOT JSON 序列化上下文

GitPlus.Tests/                       # 单元测试(MSTest, net472)
├── GitResultTests.cs
└── ConventionalCommits/             # 约定式提交测试(8 个测试类,覆盖各类场景)

构建

# 构建全部项目(包括 Git Hook 的 AOT 发布)
dotnet build GitPlus.slnx

# Release 构建
dotnet build GitPlus.slnx -c Release

运行测试

dotnet test GitPlus.slnx

调试 (F5)

在 Visual Studio 中打开解决方案,将 GitPlus.Extensions 设为启动项目,按 F5 — 这会启动 VS 实验实例并加载扩展。


🧪 测试

GitPlus.Tests 项目使用 MSTest,目标框架为 net472,并引用 WPF 程序集以支持基于 DependencyObject 的测试。测试覆盖:

  • GitResult 的成功/失败语义
  • 约定式提交解析器:正常提交、异常边界、真实场景、带配置的解析等

📄 许可证

本项目基于 MIT 许可证开源 — 详见 LICENSE.txt。


Made with ❤️ by View

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft