# objGitLab **Repository Path**: pei6/obj-git-lab ## Basic Information - **Project Name**: objGitLab - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-20 - **Last Updated**: 2026-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # objGitLab 基于 objGit 的多仓库管理平台(类 GitLab),前后端分离。 ## 技术栈 - **后端**: JDK 21, Spring Boot 3.2, Spring Security, JWT, Spring Data JPA - **数据库**: MySQL 8(生产) / H2 内存数据库(开发) - **前端**: React 18 + TypeScript + Vite(见 `frontend/`) - **集成**: 通过 ProcessBuilder 调用 objGit CLI ## 快速开始(开发模式) ### 环境要求 | 工具 | 版本 | 说明 | |------|------|------| | JDK | 21+ | 后端编译和运行 | | Maven | 3.8+ | 后端依赖管理和构建 | | Node.js | 18+ | 前端构建和开发服务器 | | objgit | 最新 | 需在系统 PATH 中可执行 | 开发模式**不需要**安装 MySQL 和 Redis(使用 H2 内存数据库)。 ### 1. 启动后端 在项目根目录下执行(PowerShell 中参数需加引号): ```powershell mvn spring-boot:run '-Dspring-boot.run.profiles=dev' ``` Linux / macOS / CMD: ```bash mvn spring-boot:run -Dspring-boot.run.profiles=dev ``` 启动成功标志: ``` Started ObjGitLabApplication in ~9 seconds Created default user: admin / admin123 ``` - 后端地址:`http://localhost:8080/api` - dev profile 效果:H2 内存数据库、排除 Redis/LDAP/OAuth2、自动创建测试用户 - **注意**:每次重启后端,H2 数据会清空 ### 2. 启动前端 ```bash cd frontend npm install # 首次运行或依赖变化时 npm run dev ``` 启动成功标志: ``` VITE v5.x.x ready ➜ Local: http://localhost:5173/ ``` - 前端地址:`http://localhost:5173/` - Vite 自动将 `/api` 请求代理到后端 `http://localhost:8080` - 修改前端代码后页面自动热更新 ### 3. 使用 1. 打开 `http://localhost:5173/` 2. 用 **admin** / **admin123** 登录 3. 创建分组 → 在分组下创建仓库 4. 进入仓库详情页使用各功能(加载 KCL、数据管理、工作区状态、提交历史等) ### 默认账号(dev 环境) | 用户名 | 密码 | 角色 | |--------|------|------| | admin | admin123 | 管理员 | | user2 | user2pass | 普通用户 | ## 生产模式 不加 dev profile,使用 MySQL: ```bash mvn spring-boot:run ``` 需先修改 `src/main/resources/application.yml`: - `spring.datasource.url` / `username` / `password`:MySQL 连接 - `spring.data.redis.*`:Redis(可选) - `objgit.base-path`:仓库存储根目录(默认 `./data/repos`) - `jwt.secret`:JWT 密钥(生产环境务必修改) 建表:JPA `ddl-auto: update` 时表会自动创建,或手动执行 `src/main/resources/schema.sql`。 ### API 示例 - 健康检查: `GET /api/v1/health` - 登录: `POST /api/v1/auth/login` Body: `{"username":"admin","password":"admin123"}` - 分组列表: `GET /api/v1/groups` Header: `Authorization: Bearer ` - 创建分组: `POST /api/v1/groups` Body: `{"name":"My Group","ownerId":1}` - 仓库列表: `GET /api/v1/groups/{groupId}/repositories` - 创建仓库: `POST /api/v1/groups/{groupId}/repositories` Body: `{"name":"my-repo","modelType":"optional"}` - MR: `GET/POST /api/v1/repositories/{id}/merge-requests`,`PUT .../merge-requests/{id}/approve`,`POST .../merge` - 同步: `POST /api/v1/repositories/{id}/sync` 或 `POST /api/v1/groups/{id}/sync` Body: `{"direction":"push"|"pull"}` - 备份元数据: `GET /api/v1/repositories/{id}/backup-metadata`,`GET /api/v1/groups/{id}/backup-metadata` - 仪表盘: `GET /api/v1/dashboard`;审计: `GET /api/v1/audit-logs?page=0&size=20` - 分支保护: `GET/PUT /api/v1/repositories/{id}/branch-protections` - 操作策略: `GET/PUT /api/v1/repositories/{id}/operation-policies`(push/merge/delete_branch/force_push 所需最低权限) - 镜像: `GET/POST/PUT/DELETE /api/v1/repositories/{id}/mirrors`(定时同步由 `app.mirror-sync-cron` 控制) - 仓库复制: `POST /api/v1/repositories/{id}/copy` Body: `{ "targetGroupId": 1, "name": "new-repo" }` - OAuth2 登录: 配置 GITHUB_OAUTH_CLIENT_ID/SECRET 或 GOOGLE_OAUTH_CLIENT_ID/SECRET 后,前端跳转 `/api/oauth2/authorization/github` 等,回调带 token 重定向到前端 `/oauth2/callback?token=xxx` - LDAP: 配置 `spring.ldap.*` 后,密码登录失败时会尝试 LDAP bind,成功则同步用户 - 监控: `GET /api/actuator/health`,`GET /api/actuator/prometheus` 更多路径见《架构设计文档》§4。 ## 模块与包结构 - `common`:统一响应、全局异常、ResourceNotFoundException - `config`:Security、Redis、请求日志、DataInitializer - `entity`:JPA 实体(Group, User, Team, Repository, RepoPermission, UserTeam, RepoBranch, AuditLog) - `repository`:Spring Data JPA 接口 - `service`:Group, Repository, Team, Permission, RepoPermission, Audit - `controller`:Auth, Group, Repository, RepoPermission, Team, Health - `security`:JWT 工具、CurrentUser、JwtAuthenticationFilter - `objgit`:ObjGitAdapter(ProcessBuilder 调用 objgit init/clone/merge/push/pull) ## 开发计划 见 [doc/TODO.md](doc/TODO.md)。