Gits Studio
一个类似 SourceTree 的 VSCode 插件原型:在一个侧边栏里集中管理多个 git 项目,支持克隆线上仓库、添加本地仓库,以及对每个项目执行提交 / 拉取 / 抓取 / 推送。
功能(最小原型)
- 克隆远程仓库:输入远程地址 → 选择存放目录 → 确认项目名 → 自动
git clone 并加入列表
- 添加本地仓库:选择文件夹(可以是仓库内任意子目录,会自动定位仓库根目录)→ 自动读取
origin 地址 → 加入列表
- 项目卡片:每个项目以卡片展示——左侧是以项目名首字母生成的彩色图标,右侧多行显示 名称 / 当前分支 / 本地路径 / 远程地址;本地路径不存在时卡片置灰并提示
- 三个统计值(卡片底部,每个前面有图标标明含义):
✎ 未提交的更改文件数、↑ 待推送的提交数、↓ 待拉取的提交数(相对上游分支;没有上游时显示 –)。待拉取数以本地的远程跟踪分支为准,抓取之后才是最新的
- 拖拽排序:按住卡片拖动即可调整顺序,顺序直接保存到配置文件
- 双击卡片:在新窗口打开该项目
- git 操作(卡片底部按钮):
- 提交全部更改(
git add -A + git commit -m);设置了提交模板时直接用模板文字提交,不再弹输入框
- 拉取
git pull
- 抓取
git fetch --all --prune
- 推送
git push(当前分支无上游时会询问是否 push -u origin <branch>)
- 进度条:拉取 / 抓取 / 推送期间卡片底部显示进度条,统计值处显示「正在拉取… 45%」;百分比来自 git
--progress 输出的各阶段(Counting / Compressing / Receiving / Resolving deltas / Writing …)按权重折算,还没有百分比时显示滚动动画。操作期间该卡片的按钮禁用,通知栏也同步显示百分比
- 卡片菜单(点卡片上的
··· 按钮或在卡片上右键,页面内弹出):在新窗口打开、在集成终端打开、复制本地路径、从列表移除(不删除磁盘文件);本地路径不存在的卡片只留后两项
- 顶部工具栏:克隆远程仓库、添加本地仓库(宽按钮,侧边栏过窄时自动只显示图标)、提交全部项目(
✓✓:遍历列表,有未提交更改的项目按顺序依次 add -A + commit;设了提交模板就用模板,否则只问一次提交信息、所有项目共用;失败的项目汇总成一条错误提示)、推送全部项目(☁↑:有待推送提交的项目按顺序依次 push,没有上游分支的跳过;卡片上同样显示进度条)、刷新、设置(齿轮);同样的命令也在命令面板中(Gits Studio: …)
- 齿轮菜单(点击齿轮弹出,做法与 File Studio 相同):
- 界面语言(二级菜单):跟随 VS Code / 中文 / English / Deutsch / Français / 日本語 / 한국어,当前项打勾,点了立即切换(无需重启)。命令标题、菜单项等
package.json 里声明的文案仍跟随 VS Code 的显示语言
- 提交模板…:弹输入框设置默认提交信息,行尾显示当前模板;留空则清除,恢复为每次询问
- 打开配置文件
所有 git 命令与输出都记录在「输出」面板的 Gits Studio 通道中,便于调试。
配置文件
项目列表保存在 ~/.x1/git-studio/conf.yaml(projects 的数组顺序即卡片顺序),可手工编辑后点「刷新」:
version: 1
projects:
- name: my-project
path: /Users/me/code/my-project
remote: git@github.com:me/my-project.git
language: auto
commitTemplate: 'chore: update'
| 字段 |
说明 |
projects[].name |
列表中显示的项目名称 |
projects[].path |
本地仓库的绝对路径 |
projects[].remote |
远程地址(origin),可为空 |
language |
界面语言:auto(跟随 VS Code)/ zh-cn / en / de / fr / ja / ko,由齿轮菜单维护 |
commitTemplate |
提交模板;设置后点「提交」直接用它作为提交信息。由齿轮菜单维护,删掉这个键即恢复每次询问 |
写入采用读—合并—写,只改动认识的键,手工加的其他键原样保留。
开发与调试
npm install
npm run compile # 或 npm run watch
在 VSCode 中打开本目录,按 F5 选择:
- Run Extension:默认语言
- Run Extension (zh-CN):VS Code 显示语言为中文(
--locale=zh-cn,界面语言设为「跟随 VS Code」时生效)
校验翻译是否齐全(src 里每个 t('...') 在各语言包中都有译文、package.nls.*.json 键一致):
npm run check-l10n
打包(会先跑 check-l10n 与编译):
npm run package # 生成 release/gits-studio-<version>.vsix
release/ 目录连同里面的 vsix 一起提交到仓库,安装时直接取该目录下的文件。
目录结构
src/
extension.ts # 入口:初始化语言、创建输出通道与卡片视图,注册命令
i18n.ts # 插件自己的界面语言(t()),独立于 VS Code 的显示语言,可运行时切换
config.ts # ~/.x1/git-studio/conf.yaml 读写(projects / language / commitTemplate)
git.ts # 基于 child_process 的 git 命令封装;解析 --progress 输出得到百分比
projectsView.ts# 项目卡片视图(WebviewView):下发数据与文案、转发命令、进度消息、保存拖拽顺序
commands.ts # 所有命令的实现
media/
main.css # 卡片、进度条、齿轮菜单样式(全部使用 VSCode 主题变量)
main.js # 卡片渲染、统计值、进度条、齿轮菜单、按钮转发、HTML5 拖拽排序
l10n/ # 运行时文案:bundle.l10n.<lang>.json,英文原文作 key
scripts/
check-l10n.js # 校验翻译是否齐全
resources/
icon.svg # 市场图标源文件(128 网格,蓝色渐变背景)
icon.png # 市场图标(由 icon.svg 导出,128×128)
icon-branch-badge-g.svg # 活动栏 / 视图图标(单色,右下角 G 徽章)
package.nls*.json# package.json 贡献点文案
已知限制
- 依赖系统已安装
git 并在 PATH 中
- 执行 git 命令时禁用了终端交互(
GIT_TERMINAL_PROMPT=0),HTTPS 仓库请配置凭据助手,SSH 仓库请使用 ssh-agent / 钥匙串
- 进度百分比依赖 git 的
--progress 输出:仓库很小、瞬间完成时看不到中间百分比,只有滚动动画与最后的 100%
- 原型阶段不支持选择性暂存、分支切换、查看历史等功能