feat: v1.1.0 — GitHub 多账号切换 + 自动创建仓库 + 私有 Gitea 仓库支持

面向大众使用的三项核心能力:

1. GitHub 多账号(设置页)
   - 添加多个 GitHub 账号(用户名 + Personal Access Token),一键切换推送目标
   - Token 自动识别账号名;添加时先调 /user 验证,失败给出明确原因
   - 每个账号独立记录同步进度(状态目录 .last-pushed/<账号>/<仓库>),
     切回原账号不会重复推送
   - 旧版「默认(SSH 私钥)」账号自动迁移生成,升级后行为不变;
     首次添加 Token 账号会自动切换

2. 自动创建 GitHub 仓库
   - 添加/同步时 GitHub 上不存在同名仓库,自动按账号设置建为私有/公开
   - 「自动创建」可开关;无 Token 时提示去设置页配置

3. 私有 Gitea 仓库支持
   - 设置页新增 Gitea 用户名/密码;密码经 git credential store 文件
     (.gitcreds,600)供 clone/fetch 使用,镜像仓库 remote 不落密码
   - API 查询同步改用 Basic Auth,私有仓库可被列出和克隆

其他:
- 首页/状态页显示当前 GitHub 目标账号与推送方式
- GitHub Token、Gitea 密码在日志和报错中自动打码
- accounts.json / settings.json / .gitcreds 均 600 权限
- manifest 版本 1.0.0 → 1.1.0,README 补充大众用法说明
This commit is contained in:
cbb
2026-10-13 19:30:18 +08:00
parent 4d6f71af5b
commit 6dcd246567
3 changed files with 618 additions and 42 deletions
+34 -6
View File
@@ -1,13 +1,25 @@
# GiteaHubSync — Gitea → GitHub 镜像同步(飞牛原生应用)
每次推送到飞牛 Gitea(3000 端口)的代码,**10 秒内自动镜像到 GitHub 的 7 个私有仓库**
(SMB_Android / DCU_APP / GD32E50X_BOOT / DCU_DesktopController / Motor_v2 / DCU_ECAT_Master / GD32_BOOT)。
每次推送到飞牛 Gitea(3000 端口)的代码,**10 秒内自动镜像到 GitHub**(默认 7 个仓库:
SMB_Android / DCU_APP / GD32E50X_BOOT / DCU_DesktopController / Motor_v2 / DCU_ECAT_Master / GD32_BOOT,
可任意增减)。
和「Agent 签到助手」一样,是标准的飞牛 `.fpk` 原生应用:**不进 Docker**,依赖已安装的
`python312` 运行时,安装后出现在应用中心已安装列表和桌面启动台,可 启动/停止/重启/卸载,
NAS 重启自动恢复。控制面板带自动同步开关、立即同步、仓库状态、同步日志和
「打开 Gitea(3000 端口)」按钮。
## 功能特性
- **多 GitHub 账号**:设置页可添加多个 GitHub 账号(用户名 + Personal Access Token),
一键切换推送目标;每个账号独立记录同步进度,切回原账号不会重复推送
- **自动创建仓库**:Gitea 上的新仓库加入同步时,若 GitHub 上不存在同名仓库,
自动按账号设置为私有/公开创建(可开关)
- **两种推送方式**:配置了 Token 的账号走 HTTPS 推送(通用,任何人都能用自己的
GitHub 账号使用);未配置 Token 的旧账号继续走 SSH 私钥推送
- **真镜像语义**:Gitea 删分支/标签,GitHub 同步删
- 推送失败下一轮自动重试;开关关掉后完全停止同步
## 安装(三选一)
### 方式一:飞牛网页手动安装(不需要给任何密码)
@@ -15,7 +27,7 @@ NAS 重启自动恢复。控制面板带自动同步开关、立即同步、仓
1. 把 NAS 上的 `fnos-gitea-sync/GiteaHubSync/GiteaHubSync.fpk` 下载到电脑
(通过飞牛文件管理/SMB,目录:`/vol1/@appshare/fn-deepseek-harness/fnos-gitea-sync/GiteaHubSync/`)
2. 飞牛网页 → **应用中心** → 右上角 **手动安装** → 选择该 fpk
3. 等待安装完成(依赖 python312 已满足),应用自动启动,约 1 分钟内完成 7 个仓库的首次同步
3. 等待安装完成(依赖 python312 已满足),应用自动启动,约 1 分钟内完成首次同步
### 方式二:命令行自动安装(和签到系统相同的方式)
@@ -37,6 +49,19 @@ FNOS_HOST=192.168.31.10 FNOS_USER=<管理员账号> FNOS_PASS=<密码> \
- **应用中心管理**:已安装 → GiteaHubSync → 启动/停止/重启/卸载
- **数据目录**:`/vol1/@appdata/GiteaHubSync`(镜像仓库、状态、日志;卸载应用不丢 GitHub 上的代码)
## 使用自己的 GitHub 账号(大众用法)
1. 打开面板 → **⚙️ 设置** →「添加 / 更新 GitHub 账号」
2. 到 [github.com/settings/tokens](https://github.com/settings/tokens) 生成
**Tokens (classic)**,勾选 `repo` 权限
3. 填回面板(用户名留空则按 Token 自动识别),点「验证并添加」——添加第一个 Token
账号后会自动切换为当前账号
4. 「Gitea 用户名」改成你自己的 Gitea 用户名(面板据此列出可同步的仓库)
5. 到 **🧩 项目管理** 添加要同步的仓库;GitHub 上不存在时会自动创建(默认私有)
> Token 只保存在 NAS 本地 `accounts.json`(权限 600),不上传任何地方;
> 日志中的 Token 会自动打码。卸载应用不会动 GitHub 上的任何仓库。
## 重新构建
```bash
@@ -46,6 +71,9 @@ cd /vol1/@appshare/fn-deepseek-harness/fnos-gitea-sync
## 说明
- GitHub 推送走 SSH 22 端口直连(HTTPS 443 在本地网络被断),私钥随应用打包安装在 NAS 本地
- 真镜像语义:Gitea 删分支/标签,GitHub 同步删
- 推送失败下一轮自动重试;开关关掉后完全停止同步
- 带 Token 的账号走 HTTPS 推送(任何网络环境可用);无 Token 的旧账号走 SSH 22
端口直连,私钥随应用打包安装在 NAS 本地
- 从 v1.0.0 升级会自动迁移:旧的同步进度归入「默认(SSH 私钥)」账号,行为不变
- 数据文件:`accounts.json`(GitHub 账号,含 Token)、`settings.json`
(Gitea 用户名 / 自动创建开关)、`repos.json`(同步列表)、`.last-pushed/<账号>/<仓库>`
(每个账号的同步进度)