Zhucy123/source-code-mgmt ↗★ 0
source-code-mgmt
DSH plugin: source code management in the sidebar footer — env checks (git/gh), SSH ed25519 key setup, GitHub/Gitee dual-platform (SSH config 443 + Gitee OpenAPI), connectivity test, push / new repo, and auto-ignore files over 100MB with per-file skipped reasons. Cross-platform (Windows / Linux / macOS).
安装
此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗
说明文档
阅读完整 README ↗激活配置(安装后必做)
插件不会因为 pnpm add 就自动出现在侧边栏。请在 ~/.dsh/profiles/web/cordis.patch.yml 中添加 insert 条目(若文件已有其他插件的 insert,照格式并列添加即可):
- insert:
- id: source-code-mgmt
name: 'source-code-mgmt'
保存后完全重启 dsh web(不是刷新页面,而是要停掉旧进程后重新启动),然后浏览器 F5 刷新,左栏底部即出现「代码管理」按钮。
用命令直接追加(幂等,已存在则跳过)——PowerShell:
$patch = "$HOME\.dsh\profiles\web\cordis.patch.yml" $addLines = "`n# Activate the source-code-mgmt plugin (installed as a profile dependency).`n- insert:`n - id: source-code-mgmt`n name: 'source-code-mgmt'`n" $utf8NoBom = [System.Text.UTF8Encoding]::new($false) if (Test-Path $patch) { $content = [System.IO.File]::ReadAllText($patch) if ($content -notmatch 'source-code-mgmt') { [System.IO.File]::AppendAllText($patch, $addLines, $utf8NoBom) Write-Host "OK: 已追加 source-code-mgmt 激活条目" -ForegroundColor Green } else { Write-Host "SKIP: cordis.patch.yml 已包含 source-code-mgmt" -ForegroundColor Yellow } } else { Write-Host "ERROR: 未找到 $patch" -ForegroundColor Red }
3. 激活插件:同上(见上方「激活配置」;追加 insert 条目后完全重启)
dsh web
**Linux / macOS:**
```bash
# 3. 激活插件:同上(见上方「激活配置」;追加 insert 条目后完全重启)
dsh web
方式三:从 GitHub 安装(分发场景)
Windows / Linux / macOS 通用:
# 3. 激活插件:同上(见上方「激活配置」;追加 insert 条目后完全重启)
dsh web
方式三装完同样不会自动激活(激活方式同方式一);且它是实际拷贝到 node_modules,改动源码需重新
pnpm add拉取(不像link:是符号链接、改源码即生效)。
验证安装是否成功
安装 + 激活 + 重启后,可以核对以下几点:
- 依赖已写入:
~/.dsh/profiles/web/package.json的dependencies里应有source-code-mgmt。 - 符号链接已建立(
link:方式):~/.dsh/profiles/web/node_modules/source-code-mgmt指向源码目录(Windows 显示为 Junction)。 - 激活条目已添加:
~/.dsh/profiles/web/cordis.patch.yml里有source-code-mgmt的 insert 条目。 - 重启后按钮可见:左栏底部出现「代码管理」按钮。
常见排障
| 现象 | 原因 / 处理 |
|---|---|
已 pnpm add 并重启,但按钮不出现 | 最常见:没在 cordis.patch.yml 里激活。补上 insert 条目后完全重启(不是刷新)。 |
改了 cordis.patch.yml 但仍不出现 | 服务未真正重启——旧进程还占着 3080 端口。停掉旧 dsh web 进程再启动。 |
| 出现「Failed to load plugins」 | 插件 host 端 index.js 启动报错(多为依赖解析问题)。查看启动日志,确认 node_modules 依赖已装齐。 |
使用步骤
- 重启 dsh web 并刷新浏览器
- 点击左栏底部「代码管理」按钮
- 面板打开(秒显预加载数据)
- ①确认 Git / GitHub CLI 已安装 → ②生成密钥并测试连接 → ③选择工作区后推送或新建仓库
后端 API 路由
| 路由 | 方法 | 说明 |
|---|---|---|
/api/source-code-mgmt/env | GET | 环境检查(git/gh 版本) |
/api/source-code-mgmt/ssh | GET | SSH 密钥 / config / gh 登录状态 |
/api/source-code-mgmt/gen-key | POST | 生成 ed25519 密钥 |
/api/source-code-mgmt/write-config | POST | 写入 SSH config(body provider: github 默认 / gitee) |
/api/source-code-mgmt/ssh-test | POST | 测试 SSH 连接(body provider: github 默认 / gitee) |
/api/source-code-mgmt/default-dir | GET | 当前工作区目录 |
/api/source-code-mgmt/workspaces | GET | 列出所有工作区目录 + 自定义目录集合(DSH 工作区 + 插件自定义目录) |
/api/source-code-mgmt/pick-dir | POST | 宿主端弹出原生文件夹选择对话框,返回选中的路径 |
/api/source-code-mgmt/add-workspace | POST | 校验目录存在并持久化加入插件自定义目录列表,返回合并后的工作区列表 |
/api/source-code-mgmt/remove-workspace | POST | 仅删除自定义目录的下拉记录(不删实际文件夹),返回更新后的列表 |
/api/source-code-mgmt/align | POST | 强制对齐:git fetch + `git reset --hard origin/ |
| `,本地完全重置为远程状态 | ||
/api/source-code-mgmt/init-git | POST | 仅 git init + 设置默认身份,不拉取不推送(由用户决定下一步) |
/api/source-code-mgmt/repo-exists | POST | 检测同名仓库是否存在(body provider: github/gitee) |
/api/source-code-mgmt/repo?dir= | GET | 获取仓库状态(query provider: github/gitee) |
/api/source-code-mgmt/push | POST | 提交并推送(git 操作,平台无关) |
/api/source-code-mgmt/pull | POST | 从远程拉取更新(git pull --ff-only,已最新/成功/冲突反馈) |
/api/source-code-mgmt/merge-push | POST | 拉取并推送(git pull --rebase + git push,本地有更改且远程有更新时合并推送) |
/api/source-code-mgmt/force-push | POST | 强制推送(git push --force,覆盖远程为本地状态) |
/api/source-code-mgmt/force-pull | POST | 强制拉取(git pull --force,拉入远程更新) |
/api/source-code-mgmt/create | POST | 新建仓库并推送(body provider;GitHub 走 gh repo create,Gitee 走 OpenAPI + SSH push) |
/api/source-code-mgmt/set-visibility | POST | 修改仓库可见性(body provider;GitHub 走 gh repo edit,Gitee 走 PATCH /repos/{owner}/{repo}) |
/api/source-code-mgmt/gitee-token | GET/POST | GET:令牌是否已配置 + 账号;POST:保存({token})或清除({clear:true})Gitee 令牌 |
安全
所有路由均为 loopback-only(sec-fetch-site + Origin 校验),仅本机浏览器可访问,LAN/手机来源一律 403——与控制面板同一策略。
跨平台
- Windows / Linux / macOS 通用
- 用
process.platform检测平台 ~/.ssh通过homedir()定位(Windows:C:\Users\用户名\ .ssh,Linux:/home/用户名/.ssh)- Linux/macOS 下 SSH config 自动设 0600 权限
- git / gh / ssh / ssh-keygen 二进制自动探测:启动时依次按 ①环境变量覆盖 → ②PATH 查找(Windows 加
.exe)→(仅 Windows)③Git 自带目录(usr\bin/bin)回退,最后兜底用裸命令名。因此只要装了 Git,即使ssh不在 PATH 里也能正常工作,换设备无需额外配置。 - 如需手动指定二进制路径,可用环境变量覆盖:
DSH_SCM_GIT/DSH_SCM_GH/DSH_SCM_SSH/DSH_SCM_SSH_KEYGEN - SSH 传输修复:Git for Windows 自带的 MSYS
ssh.exe(usr\bin\ssh.exe)在被 detached/agent 进程调用时可能报couldn't create signal pipe, Win32 error 5,导致git push/git pull失败。插件执行 git 远程命令时会自动注入GIT_SSH指向解析到的可用ssh(通常为系统 OpenSSHC:\Windows\System32\OpenSSH\ssh.exe),避免该问题。
开发
git clone https://github.com/Zhucy123/source-code-mgmt.git
cd source-code-mgmt
## 使用步骤
1. 重启 dsh web 并刷新浏览器
2. 点击左栏底部「**代码管理**」按钮
3. 面板打开(秒显预加载数据)
4. ①确认 Git / GitHub CLI 已安装 → ②生成密钥并测试连接 → ③选择工作区后推送或新建仓库