- run_sync 改线程池并行:每轮最多 N 个项目同时克隆/推送,项目多时 显著缩短单轮耗时(实测 6 个仓库 3 并发 3 倍加速) - 按仓库防重入:同一仓库同时只允许一个同步,后到者提示 「该仓库正在同步中,请稍候」,避免并发 git 操作损坏镜像 - 状态页单仓库「同步」按钮不再被整轮同步全局拦截(旧版报 「已有同步任务正在进行」),与进行中的整轮真正并行 - 新增「同时同步项目数」设置(1~8),设置页可调,立即生效 - 统计计数与日志写入加锁,修正并行下的计数漂移与日志交错风险 - 首页/状态页显示当前并行数;manifest 1.2.0 → 1.3.0
88 lines
4.9 KiB
Markdown
88 lines
4.9 KiB
Markdown
# 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);
|
||
在状态页点单个仓库的「同步」也不再被整轮同步阻塞(同一仓库有防重入)
|
||
- **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 地址/用户名/密码、自动创建开关、同步间隔)、`repos.json`(同步列表)、
|
||
`.last-pushed/<账号>/<仓库>`(每个账号的同步进度)
|