Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gita - Git 管理平台

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 & 协议

  • Git Smart HTTP 协议(clone / push / pull)
  • Git LFS(大文件存储)
  • 仓库内容浏览(目录树、文件内容、Raw 下载、Archive 打包)

自动化 & 集成

  • Webhook(事件推送、投递日志、重试机制)
  • Actions(CI/CD 工作流、运行记录、日志查看)
  • Access Token 管理(API 认证)
  • JWT 认证(Bearer Token)

UI

  • Kotlin Multiplatform UI(Compose Multiplatform)
  • 支持 Android / Desktop / iOS / Web(JS + Wasm)
  • Gitea 风格的创建表单(仓库、组织)
  • 页面:Dashboard、仓库、组织、Issues、搜索、管理后台、SSH Keys、设置

Gitea API 兼容

  • 路由格式兼容 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+

1. 克隆项目

git clone <repository-url>
cd gita

2. 运行

cargo run

首次启动时服务会自动进入初始化配置页面(http://localhost:3030),在浏览器中完成以下配置:

  • 服务端口 — HTTP 监听端口(默认 3030)
  • 数据库 — 选择 SQLite / MySQL / PostgreSQL,填写连接信息(MySQL/PostgreSQL 会自动建库建表)
  • 日志级别 — trace / debug / info / warn / error
  • 存储路径 — Git 仓库数据存放目录
  • SSH 服务 — 是否启用 SSH 协议

保存后重启服务即可生效。

3. 手动配置(可选)

也可以手动创建配置文件:

# .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"

4. 初始化设置

首次启动后访问前端页面,创建超级管理员账户。

也可通过 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"
  }'

5. 登录

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>"

API 端点

公开 API

方法 路径 说明
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

认证 API(需 Bearer Token)

用户

方法 路径 说明
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

Issues & Pull Requests

方法 路径 说明
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}] 保护分支

Webhooks

方法 路径 说明
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 统计信息

Git 协议

方法 路径 说明
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

LFS 协议

方法 路径 说明
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

开发计划

  • 核心功能(用户、组织、仓库、认证)
  • Gitea API 兼容(Issues、PRs、Labels、Milestones、Collaborators、Forks)
  • Git Smart HTTP 协议
  • Git SSH 协议
  • Git LFS
  • Webhook 系统
  • 仓库内容浏览
  • SSH Keys 管理
  • 保护分支
  • 搜索功能
  • 管理后台
  • Kotlin Multiplatform UI
  • PostgreSQL 支持
  • Releases 版本发布
  • PR Reviews 审查
  • 初始化配置 Web UI
  • Actions (CI/CD)
  • Wiki 系统
  • 包管理器集成

许可证

MIT License

About

A Gitea-like Git management platform written in Rust, compatible with Gitea API, supporting Git protocol, LFS, Webhooks, and a Kotlin Multiplatform cross-platform UI. 一个用 Rust 实现的类似 Gitea 的 Git 管理平台,兼容 Gitea API,支持 Git 协议、LFS、Webhook,以及 Kotlin Multiplatform 跨平台 UI。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages