# 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+(仅开发时需要) ### 安装与运行 ```bash # 1. 初始化(设置管理员密码) $env:CGO_ENABLED="1"; go run main.go --init # 2. 启动服务(默认监听 :9000) $env:CGO_ENABLED="1"; go run main.go ``` 启动后浏览器访问 `http://localhost:9000` ### 使用流程 1. **登录** - 使用初始化时设置的密码登录 2. **添加服务器** - 填写 Gitea 服务器地址和 API Token 3. **测试连接** - 验证服务器和 Token 是否可用 4. **发现仓库** - 扫描服务器上的所有仓库 5. **同步** - 将仓库镜像克隆到本地,支持手动和定时同步 ## 打包部署 ```bash # 构建前端 cd web npm install npm run build cd .. # 打包为单文件 exe $env:CGO_ENABLED="1"; go build -o gitm.exe ``` 打包后的 `gitm.exe` 包含前后端,直接运行即可。 ### 运行 ```bash # 首次初始化 .\gitm.exe --init # 启动服务 .\gitm.exe # 指定监听地址 .\gitm.exe --addr :8080 # 指定数据目录 .\gitm.exe --data /path/to/data ``` ## 开发模式 前后端分别启动,支持热更新: ```bash # 终端 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