Files
fn-deepseek-harness 74f7270cbc feat: v1.6.0 — 推送前先核对 GitHub 实况(分支/提交号一致就跳过)
- 新增 remote_refs():git ls-remote 读取 GitHub 真实的分支/标签/提交号
- 新增 compare_remote():与本地镜像逐条比对,返回 same/diff/unknown 并给出差异说明
- 同步流程改为:本地无变化 → 默认不打扰 GitHub;本地有变化或严格模式 → 先比对,
  一致则跳过推送并重建同步记录,不同才推送;推送后再核对一次确认落地
- 新增设置项 verify_github(默认关):严格模式每轮都核对 GitHub 实况
- 新增 API:/api/repos/check(单仓库核对)、/api/repos/checkall(全量核对,不推送)
- 状态页新增「GitHub 核对」列 + 单仓库「核对」按钮 + 「🔍 核对 GitHub 实况」
- stats 新增 total_skipped 统计(一致跳过推送次数),状态页新增对应卡片
- 解决:GitHub 被手动改动后永不纠正;同步记录丢失后整仓重推一遍
2026-10-17 20:26:19 +08:00

101 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GiteaHubSync — Gitea → GitHub 镜像同步(飞牛原生应用)
每次推送到飞牛 Gitea(3000 端口)的代码,**自动镜像到 GitHub**(默认 10 秒一轮,间隔 5 秒 ~ 1 天可在设置页调整;默认 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),
一键切换推送目标;每个账号独立记录同步进度,切回原账号不会重复推送
- **同步间隔可调**:设置页可改检查间隔(5 秒 ~ 1 天,默认 10 秒),改完立即生效
- **多项目并行同步**:每轮最多 N 个项目同时克隆/推送(默认 3,可调 1~8);
在状态页点单个仓库的「同步」也不再被整轮同步阻塞(同一仓库有防重入)
- **设置改动即生效**:同步间隔 / 并发数 / 重试次数等数值设置改完自动保存
(失焦或回车即生效,无需点按钮),非法值自动回滚并提示
- **失败自动重试**:同步失败后每隔 1 分钟自动重试失败的仓库,最多 N 次
(默认 5,可调 0~20,0 = 不重试);重试与同步间隔无关,专治网络抖动,
重试中的仓库在状态页显示「重试中 x/N」
- **推送前先核对 GitHub 实况**:每轮同步先读 GitHub 上该仓库**真实的分支和提交号**
(`git ls-remote`),与本地镜像逐条比对——**完全一致就跳过推送**,不同才推;
推送成功后再核对一次,确认 GitHub 真的和本地一致。好处:① 不做无意义推送、省流量;
② 你在 GitHub 上手动删了分支或回退了提交,下一轮就能发现并纠正;
③ 同步记录文件丢了也不会整仓重推一遍。默认「仅本地有新提交时核对」(省流量),
设置页可开 **严格模式**每轮都核对;状态页有「GitHub 核对」列(✓ 一致 / ≠ 不同 / ? 未知)、
单仓库「核对」按钮和「🔍 核对 GitHub 实况」一键全量核对(**只核对不推送**)
- **Gitea 地址可改**:设置页可改同步引擎访问的 Gitea 地址(默认 `http://127.0.0.1:3000`),
保存前自动探测连通性;改地址后已有镜像的拉取地址自动更新,「打开 Gitea」按钮随访问地址自适应
- **自动创建仓库**:Gitea 上的新仓库加入同步时,若 GitHub 上不存在同名仓库,
自动按账号设置为私有/公开创建(可开关)
- **两种推送方式**:配置了 Token 的账号走 HTTPS 推送(通用,任何人都能用自己的
GitHub 账号使用);未配置 Token 的旧账号继续走 SSH 私钥推送
- **真镜像语义**:Gitea 删分支/标签,GitHub 同步删
- 推送失败下一轮自动重试;开关关掉后完全停止同步
## 安装(三选一)
### 方式一:飞牛网页手动安装(不需要给任何密码)
1. 把 NAS 上的 `fnos-gitea-sync/GiteaHubSync/GiteaHubSync.fpk` 下载到电脑
(通过飞牛文件管理/SMB,目录:`/vol1/@appshare/fn-deepseek-harness/fnos-gitea-sync/GiteaHubSync/`)
2. 飞牛网页 → **应用中心** → 右上角 **手动安装** → 选择该 fpk
3. 等待安装完成(依赖 python312 已满足),应用自动启动,约 1 分钟内完成首次同步
### 方式二:命令行自动安装(和签到系统相同的方式)
```bash
cd /vol1/@appshare/fn-deepseek-harness/fnos-gitea-sync
FNOS_HOST=192.168.31.10 FNOS_USER=<管理员账号> FNOS_PASS=<密码> \
/var/apps/nodejs_v24/target/bin/node fnos-install.js
```
### 方式三:先用着原生版
在安装应用前,面板已以原生方式在 `http://192.168.31.10:8899` 运行,功能一致。
安装应用时安装脚本会自动停掉原生版,无缝交接。
## 安装后
- **桌面图标**:「Gitea→GitHub 同步」,点击打开控制面板
- **或直接访问**:`http://192.168.31.10:8899`
- **应用中心管理**:已安装 → 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 上的任何仓库。
如果你的 Gitea 不在默认的 `127.0.0.1:3000`(比如换了端口),到设置页「Gitea 地址」一栏改掉即可,
保存时会自动探测连通性,并同步更新所有已有镜像的拉取地址。
## 重新构建
```bash
cd /vol1/@appshare/fn-deepseek-harness/fnos-gitea-sync
./build.sh
```
## 说明
- 带 Token 的账号走 HTTPS 推送(任何网络环境可用);无 Token 的旧账号走 SSH 22
端口直连,私钥随应用打包安装在 NAS 本地
- 从 v1.0.0 升级会自动迁移:旧的同步进度归入「默认(SSH 私钥)」账号,行为不变
- 数据文件:`accounts.json`(GitHub 账号,含 Token)、`settings.json`
(Gitea 地址/用户名/密码、自动创建开关、同步间隔、GitHub 严格核对开关)、
`repos.json`(同步列表)、`.last-pushed/<账号>/<仓库>`(每个账号的同步进度,
仅作「本地有没有新提交」的快速判断;真正的跳过推送以 GitHub 实况比对为准)