4.5 KiB
4.5 KiB
GitM - Gitea 仓库镜像同步工具
将多个 Gitea 服务器的仓库自动镜像同步到本地存储,支持定时同步和手动同步。
功能特性
- 单文件部署 - 前端内嵌到 Go 二进制,无需额外依赖
- Web 管理界面 - Vue 3 + Element Plus,中文界面
- 多服务器管理 - 同时管理多个 Gitea 服务器
- 仓库自动发现 - 一键发现服务器上的所有仓库
- 镜像同步 - 使用
git clone --mirror完整镜像,支持 Token 认证 - 实时进度 - 同步过程实时展示当前克隆/同步的仓库及进度
- 定时同步 - 可配置每个服务器的自动同步间隔
- SQLite 存储 - 轻量级数据库,无需额外安装
快速开始
前置要求
- Go 1.21+(需要 CGO 支持 SQLite)
- GCC(Windows 下需安装 MinGW-w64)
- Node.js 18+(仅开发时需要)
安装与运行
# 1. 初始化(设置管理员密码)
$env:CGO_ENABLED="1"; go run main.go --init
# 2. 启动服务(默认监听 :9000)
$env:CGO_ENABLED="1"; go run main.go
启动后浏览器访问 http://localhost:9000
使用流程
- 登录 - 使用初始化时设置的密码登录
- 添加服务器 - 填写 Gitea 服务器地址和 API Token
- 测试连接 - 验证服务器和 Token 是否可用
- 发现仓库 - 扫描服务器上的所有仓库
- 同步 - 将仓库镜像克隆到本地,支持手动和定时同步
打包部署
# 构建前端
cd web
npm install
npm run build
cd ..
# 打包为单文件 exe
$env:CGO_ENABLED="1"; go build -o gitm.exe
打包后的 gitm.exe 包含前后端,直接运行即可。
运行
# 首次初始化
.\gitm.exe --init
# 启动服务
.\gitm.exe
# 指定监听地址
.\gitm.exe --addr :8080
# 指定数据目录
.\gitm.exe --data /path/to/data
开发模式
前后端分别启动,支持热更新:
# 终端 1:启动后端(默认 :9000)
$env:CGO_ENABLED="1"; go run main.go
# 终端 2:启动前端开发服务器(:5173,自动代理 API 到 :9000)
cd web
npm install
npm run dev
开发时访问 http://localhost:5173
命令行参数
| 参数 | 说明 | 默认值 |
|---|---|---|
--init |
初始化数据库并设置管理员密码 | - |
--addr |
监听地址 | :9000 |
--data |
数据存储目录 | ./data |
系统设置
通过 Web 界面可配置:
- 管理员密码 - 修改登录密码
- 监听地址 - 修改服务端口(需重启)
- 仓库目录 - 仓库镜像存储路径
- 最大并发数 - 同步时的并发数量(1-10)
项目结构
├── main.go # 程序入口
├── internal/
│ ├── config/ # 配置管理
│ ├── database/ # SQLite 数据库操作
│ ├── gitea/ # Gitea API 客户端
│ ├── handler/ # HTTP 请求处理
│ ├── middleware/ # JWT 认证中间件
│ ├── models/ # 数据模型
│ └── sync/ # 同步引擎与调度器
├── web/ # Vue 3 前端
│ ├── src/
│ │ ├── api/ # API 请求封装
│ │ ├── views/ # 页面组件
│ │ ├── stores/ # Pinia 状态管理
│ │ └── router/ # 路由配置
│ └── vite.config.ts
└── data/ # 运行时数据(自动创建)
├── gitm.db # SQLite 数据库
└── repos/ # 镜像仓库存储
API 接口
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/login |
登录 |
| POST | /api/init |
初始化密码 |
| GET | /api/settings |
获取系统设置 |
| PUT | /api/settings |
更新系统设置 |
| GET | /api/servers |
服务器列表 |
| POST | /api/servers |
添加服务器 |
| PUT | /api/servers/:id |
更新服务器 |
| DELETE | /api/servers/:id |
删除服务器 |
| POST | /api/servers/test |
测试连接 |
| GET | /api/servers/:id/repos |
仓库列表 |
| POST | /api/servers/:id/discover |
发现仓库 |
| POST | /api/servers/:id/sync |
同步服务器 |
| GET | /api/servers/:id/sync/status |
同步进度 |
| POST | /api/sync/all |
同步全部服务器 |
| GET | /api/sync/logs |
同步日志 |
| GET | /api/sync/stats |
同步统计 |
技术栈
后端: Go / Gin / SQLite / JWT
前端: Vue 3 / TypeScript / Element Plus / Vite / Pinia
License
MIT