English | 中文
一个用 Rust 实现的类似 Gitea 的 Git 管理平台,兼容 Gitea API,支持 Git 协议、LFS、Webhook,以及 Kotlin Multiplatform 跨平台 UI。
- 用户管理(注册、登录、个人资料、SSH Keys)
- 组织管理(组织与子组织层级结构、成员角色权限)
- 仓库管理(创建、编辑、删除、Fork、协作者、保护分支)
- Issues & Pull Requests(创建、评论、标签、里程碑、PR Reviews)
- Star / Watch 功能
- 全文搜索(仓库、用户、Issues)
- 管理后台(用户/仓库/组织管理、统计信息)
- 初始化配置(首次启动通过 Web UI 配置数据库、端口等)
- Releases(版本发布、附件管理)
- Git Smart HTTP 协议(clone / push / pull)
- Git LFS(大文件存储)
- 仓库内容浏览(目录树、文件内容、Raw 下载、Archive 打包)
- Webhook(事件推送、投递日志、重试机制)
- Actions(CI/CD 工作流、运行记录、日志查看)
- Access Token 管理(API 认证)
- JWT 认证(Bearer Token)
- Kotlin Multiplatform UI(Compose Multiplatform)
- 支持 Android / Desktop / iOS / Web(JS + Wasm)
- Gitea 风格的创建表单(仓库、组织)
- 页面:Dashboard、仓库、组织、Issues、搜索、管理后台、SSH Keys、设置
- 路由格式兼容 Gitea
/api/v1/ 规范
- 支持
owner/repo 路径参数
- 兼容 Gitea 响应结构
| 组件 |
技术 |
说明 |
| 语言 |
Rust |
Edition 2021 |
| 应用框架 |
summer-rs 0.7 |
DI、配置、插件系统 |
| Web 框架 |
Axum 0.8 |
路由、中间件、提取器 |
| ORM |
Sea-ORM 2 |
异步数据库操作 |
| 数据库 |
SQLite / MySQL 8.0 / PostgreSQL |
三数据库支持 |
| 认证 |
JWT + Bcrypt |
Token 认证 + 密码加密 |
| 校验 |
Validator 0.19 |
请求参数校验 |
| HTTP 客户端 |
Reqwest 0.12 |
Webhook 投递 |
| 组件 |
技术 |
| 框架 |
Kotlin Multiplatform |
| UI |
Compose Multiplatform |
| 架构 |
MVI (Orbit MVI) |
| DI |
Koin |
| 网络 |
Ktor Client |
| 平台 |
Android / Desktop (JVM) / iOS / Web (JS + Wasm) |
- Docker & Docker Compose
- TOML 配置文件
gita/
├── src/
│ ├── entities/ # Sea-ORM 实体(29 张表)
│ │ ├── user.rs
│ │ ├── organization.rs
│ │ ├── user_organization.rs
│ │ ├── repository.rs
│ │ ├── collaborator.rs
│ │ ├── star.rs / watcher.rs
│ │ ├── branch.rs / commit.rs / tag.rs
│ │ ├── issue.rs / issue_comment.rs / issue_label.rs
│ │ ├── pull_request.rs / pull_request_review.rs / pull_request_review_comment.rs
│ │ ├── label.rs / milestone.rs
│ │ ├── release.rs / release_asset.rs
│ │ ├── action_run.rs / action_run_job.rs
│ │ ├── webhook.rs / webhook_delivery.rs
│ │ ├── lfs_object.rs / lfs_lock.rs
│ │ ├── ssh_key.rs / protected_branch.rs
│ │ └── access_token.rs
│ ├── models/ # 请求/响应 DTO
│ │ ├── gitea/ # Gitea 兼容响应结构
│ │ └── *.rs
│ ├── services/ # 业务逻辑层(24 个服务)
│ ├── handlers/ # HTTP Handler(30 个模块)
│ ├── middleware/ # Auth 中间件
│ ├── actions/ # CI/CD Actions 系统
│ │ ├── runner.rs # 工作流执行器
│ │ ├── dispatcher.rs # 事件分发
│ │ ├── workflow_parser.rs # YAML 工作流解析
│ │ └── log_store.rs # 运行日志存储
│ ├── git/ # Git 协议实现
│ │ ├── smart_http.rs # Smart HTTP 协议
│ │ ├── ssh_server.rs # SSH 服务器
│ │ ├── repository.rs # 裸仓库操作
│ │ ├── tree.rs # 目录树解析
│ │ └── hooks.rs # Git Hooks
│ ├── webhook/ # Webhook 系统
│ │ ├── dispatcher.rs # 事件分发 & 投递
│ │ └── events.rs # 事件类型定义
│ ├── config.rs # 配置结构
│ ├── routes.rs # 路由注册
│ ├── main.rs # 入口
│ └── lib.rs
├── app/ # Kotlin Multiplatform 前端
│ └── app/
│ ├── shared/ # 共享代码
│ │ └── src/commonMain/kotlin/com/gita/app/
│ │ ├── model/ # 数据模型
│ │ ├── repository/ # API 调用层
│ │ ├── viewmodel/ # MVI ViewModel
│ │ ├── ui/ # Compose UI
│ │ │ ├── pages/ # 页面组件
│ │ │ └── theme/ # 主题
│ │ ├── di/ # Koin DI 模块
│ │ └── api/ # Ktor 客户端
│ ├── androidApp/ # Android 入口
│ ├── desktopApp/ # Desktop 入口
│ └── iosApp/ # iOS 入口
├── sql/
│ ├── schema.sql # MySQL 建表脚本
│ ├── schema.sqlite.sql # SQLite 建表脚本
│ ├── schema.postgres.sql # PostgreSQL 建表脚本
│ └── migrations/ # 增量迁移脚本
├── config/
│ └── app.toml # 应用配置
├── .env # 环境变量(DATABASE_URL)
├── docker-compose.yml
├── Cargo.toml
└── README.md
共 29 张表,支持 SQLite、MySQL、PostgreSQL 三引擎,首次启动自动建库建表。
| 表名 |
说明 |
users |
用户(用户名、邮箱、密码哈希、个人资料、可见性) |
organizations |
组织(名称、slug、描述、层级 parent_id、统计) |
user_organizations |
用户-组织关联(角色:owner/admin/member/guest) |
repositories |
仓库(owner_type + owner_id、可见性、fork、统计) |
collaborators |
仓库协作者(权限:read/write/admin/owner) |
stars / watchers |
用户 Star / Watch 仓库 |
access_tokens |
API 访问令牌(SHA-256 哈希存储、scopes、过期) |
branches / commits / tags |
Git 分支、提交、标签 |
issues |
Issues / Pull Requests(状态、指派、里程碑) |
issue_comments |
Issue 评论 |
labels / issue_labels |
仓库级标签定义 + Issue-标签多对多关联 |
milestones |
里程碑(截止日期、Issue 统计) |
pull_requests |
Pull Request(源/目标分支、合并状态) |
pull_request_reviews / pull_request_review_comments |
PR 审查 + 审查评论 |
webhooks / webhook_deliveries |
Webhook 配置 + 投递日志 |
lfs_objects / lfs_locks |
LFS 对象存储 + 文件锁 |
ssh_keys |
用户 SSH 公钥 |
protected_branches |
保护分支规则 |
action_runs / action_run_jobs |
Actions 运行记录 + 任务 |
releases / release_assets |
版本发布 + 附件 |
- Rust 1.70+
- SQLite(默认)、MySQL 8.0 或 PostgreSQL 12+
git clone <repository-url>
cd gita
首次启动时服务会自动进入初始化配置页面(http://localhost:3030),在浏览器中完成以下配置:
- 服务端口 — HTTP 监听端口(默认 3030)
- 数据库 — 选择 SQLite / MySQL / PostgreSQL,填写连接信息(MySQL/PostgreSQL 会自动建库建表)
- 日志级别 — trace / debug / info / warn / error
- 存储路径 — Git 仓库数据存放目录
- SSH 服务 — 是否启用 SSH 协议
保存后重启服务即可生效。
也可以手动创建配置文件:
# .env — 数据库连接
DATABASE_URL="sqlite://./gita.db" # SQLite
# DATABASE_URL="mysql://user:pass@localhost:3306/gita" # MySQL
# DATABASE_URL="postgres://user:pass@localhost:5432/gita" # PostgreSQL
# config/app.toml
[web]
port = 3030
[sea-orm]
uri = "${DATABASE_URL}"
[gita.storage]
base_path = "./data"
首次启动后访问前端页面,创建超级管理员账户。
也可通过 API:
# 检查设置状态
curl http://localhost:3030/api/v1/setup/status
# 创建初始管理员
curl -X POST http://localhost:3030/api/v1/setup \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"email": "admin@example.com",
"password": "admin123"
}'
curl -X POST http://localhost:3030/api/v1/users/login \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "admin123"
}'
返回 JWT token,后续请求携带:
curl http://localhost:3030/api/v1/user \
-H "Authorization: Bearer <token>"
| 方法 |
路径 |
说明 |
| POST |
/api/v1/users/login |
用户登录 |
| GET |
/api/v1/setup/status |
检查初始化状态 |
| POST |
/api/v1/setup |
创建初始管理员 |
| GET |
/api/v1/search/repositories |
搜索仓库 |
| GET |
/api/v1/search/users |
搜索用户 |
| GET |
/api/v1/search/issues |
搜索 Issues |
| 方法 |
路径 |
说明 |
| GET |
/api/v1/user |
获取当前用户 |
| GET |
/api/v1/users/search |
列出用户 |
| GET |
/api/v1/users/{username} |
按用户名查找 |
| GET/POST/DELETE |
/api/v1/user/keys[/{id}] |
SSH Keys 管理 |
| PUT/DELETE |
/api/v1/user/starred/{owner}/{repo} |
Star / Unstar |
| 方法 |
路径 |
说明 |
| GET/POST |
/api/v1/orgs |
列出 / 创建组织 |
| GET/PATCH/DELETE |
/api/v1/orgs/{org} |
查看 / 编辑 / 删除组织 |
| GET |
/api/v1/orgs/{org}/members |
列出成员 |
| GET |
/api/v1/orgs/{org}/repos |
列出组织仓库 |
| 方法 |
路径 |
说明 |
| GET/POST |
/api/v1/repos |
列出 / 创建仓库 |
| GET/PATCH/DELETE |
/api/v1/repos/{owner}/{repo} |
查看 / 编辑 / 删除仓库 |
| GET |
/api/v1/repos/{owner}/{repo}/branches |
列出分支 |
| GET |
/api/v1/repos/{owner}/{repo}/branches/{branch} |
获取分支 |
| GET |
/api/v1/repos/{owner}/{repo}/commits |
列出提交 |
| GET |
/api/v1/repos/{owner}/{repo}/tags |
列出标签 |
| GET |
/api/v1/repos/{owner}/{repo}/contents |
获取目录/文件内容 |
| GET |
/api/v1/repos/{owner}/{repo}/raw/{ref}/{path} |
获取 Raw 文件 |
| GET |
/api/v1/repos/{owner}/{repo}/archive/{format} |
下载 Archive |
| 方法 |
路径 |
说明 |
| GET/POST |
/api/v1/repos/{owner}/{repo}/issues |
列出 / 创建 Issue |
| GET |
/api/v1/repos/{owner}/{repo}/issues/{index} |
获取 Issue |
| GET/POST |
/api/v1/repos/{owner}/{repo}/issues/{index}/comments |
评论 |
| GET/POST |
/api/v1/repos/{owner}/{repo}/pulls |
列出 / 创建 PR |
| GET/PATCH |
/api/v1/repos/{owner}/{repo}/pulls/{index} |
查看 / 编辑 PR |
| 方法 |
路径 |
说明 |
| GET/POST/DELETE |
/api/v1/repos/{owner}/{repo}/labels[/{id}] |
标签管理 |
| POST/DELETE |
/api/v1/repos/{owner}/{repo}/issues/{index}/labels |
Issue 标签 |
| GET/POST/DELETE |
/api/v1/repos/{owner}/{repo}/milestones[/{id}] |
里程碑管理 |
| GET/PUT/DELETE |
/api/v1/repos/{owner}/{repo}/collaborators/{username} |
协作者管理 |
| POST/GET |
/api/v1/repos/{owner}/{repo}/forks |
Fork |
| GET/POST/DELETE |
/api/v1/repos/{owner}/{repo}/protected_branches[/{name}] |
保护分支 |
| 方法 |
路径 |
说明 |
| GET/POST |
/api/v1/repos/{owner}/{repo}/hooks |
列出 / 创建 Webhook |
| PATCH/DELETE |
/api/v1/repos/{owner}/{repo}/hooks/{id} |
编辑 / 删除 Webhook |
| GET |
/api/v1/repos/{owner}/{repo}/hooks/{id}/deliveries |
投递日志 |
| 方法 |
路径 |
说明 |
| GET/POST |
/api/v1/admin/users |
用户管理 |
| DELETE |
/api/v1/admin/users/{username} |
删除用户 |
| GET |
/api/v1/admin/repos |
仓库列表 |
| GET |
/api/v1/admin/orgs |
组织列表 |
| GET |
/api/v1/admin/statistics |
统计信息 |
| 方法 |
路径 |
说明 |
| GET |
/{owner}/{repo}.git/info/refs |
Git 服务发现 |
| POST |
/{owner}/{repo}.git/git-upload-pack |
Git fetch |
| POST |
/{owner}/{repo}.git/git-receive-pack |
Git push |
| 方法 |
路径 |
说明 |
| POST |
/{owner}/{repo}.git/info/lfs/objects/batch |
批量操作 |
| PUT |
/{owner}/{repo}.git/info/lfs/objects/{oid} |
上传对象 |
| GET |
/{owner}/{repo}.git/info/lfs/objects/{oid} |
下载对象 |
| POST/GET |
/{owner}/{repo}.git/info/lfs/locks |
锁管理 |
首次启动通过 Web UI 配置,也可手动编辑 config/app.toml:
[web]
port = 3030
[sea-orm]
uri = "${DATABASE_URL}" # 从环境变量读取
[gita.storage]
base_path = "./data" # Git 仓库存储路径
[gita.lfs]
enabled = true # 启用 LFS
[gita.webhook]
max_retries = 3 # Webhook 最大重试次数
[gita.ssh]
enabled = true # SSH 服务
port = 2222 # SSH 端口
支持的数据库 URL 格式:
| 数据库 |
URL 格式 |
| SQLite |
sqlite:///path/to/db.sqlite |
| MySQL |
mysql://user:pass@host:3306/gita |
| PostgreSQL |
postgres://user:pass@host:5432/gita |
MIT License