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

6.3 KiB
Raw Permalink Blame History

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 分钟内完成首次同步

方式二:命令行自动安装(和签到系统相同的方式)

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 生成 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 地址」一栏改掉即可, 保存时会自动探测连通性,并同步更新所有已有镜像的拉取地址。

重新构建

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 实况比对为准)