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 被手动改动后永不纠正;同步记录丢失后整仓重推一遍
This commit is contained in:
fn-deepseek-harness
2026-10-17 20:26:19 +08:00
parent 1b2ddded38
commit 74f7270cbc
3 changed files with 229 additions and 14 deletions
+10 -2
View File
@@ -21,6 +21,13 @@ NAS 重启自动恢复。控制面板带自动同步开关、立即同步、仓
- **失败自动重试**:同步失败后每隔 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 上不存在同名仓库,
@@ -88,5 +95,6 @@ cd /vol1/@appshare/fn-deepseek-harness/fnos-gitea-sync
端口直连,私钥随应用打包安装在 NAS 本地
- 从 v1.0.0 升级会自动迁移:旧的同步进度归入「默认(SSH 私钥)」账号,行为不变
- 数据文件:`accounts.json`(GitHub 账号,含 Token)、`settings.json`
(Gitea 地址/用户名/密码、自动创建开关、同步间隔)、`repos.json`(同步列表)、
`.last-pushed/<账号>/<仓库>`(每个账号的同步进度)
(Gitea 地址/用户名/密码、自动创建开关、同步间隔、GitHub 严格核对开关)、
`repos.json`(同步列表)、`.last-pushed/<账号>/<仓库>`(每个账号的同步进度,
仅作「本地有没有新提交」的快速判断;真正的跳过推送以 GitHub 实况比对为准)