# managergit **Repository Path**: php_project/managergit ## Basic Information - **Project Name**: managergit - **Description**: 用于管理代码仓分支 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-06 - **Last Updated**: 2026-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Git Manager - 多仓库分支管理系统 一个基于 Go + Gin + Vue3 的 Git 多仓库分支管理平台,支持多仓库管理、本地/远端分支查看与删除、细粒度权限控制。 ## ✨ 功能特性 - 🔐 **用户认证与权限管理** - JWT Token 认证 - 三种角色:管理员 (admin)、开发者 (developer)、查看者 (viewer) - 用户可修改密码 - 📁 **多仓库管理** - 添加、编辑、删除代码仓库 - 自动验证 Git 仓库路径有效性 - 仓库列表按权限过滤显示 - **分页显示**:支持分页浏览,每页可设置 10/20/50/100 条 - **模糊搜索**:支持按仓库名称、路径、描述进行模糊搜索 - **双模式显示**:支持列表模式和详细卡片模式切换 - 🌿 **分支管理** - 查看本地分支列表(标记当前分支) - 查看远端分支列表(自动执行 `git fetch --prune`) - **远端分支优化显示**:分别显示远端名称和分支名称 - 删除本地分支(支持强制删除) - 删除远端分支(高危操作,需权限) - 🔐 **细粒度权限控制** - 按用户-仓库配置权限矩阵 - 权限项:查看权限、删除本地分支、删除远端分支 - 权限继承:无查看权限时,子权限自动禁用 - 🎨 **现代化前端界面** - Vue3 + Element Plus - 响应式设计,单页应用 - 实时权限反馈 ## 🚀 快速开始 ### 环境要求 - Go 1.21+ - Git(系统已安装) - 现代浏览器(Chrome、Firefox、Edge 等) ### 安装与运行 ```bash # 1. 克隆或进入项目目录 cd managergit # 2. 安装依赖(如未执行) go mod tidy # 3. 运行项目 go run main.go # 或编译后运行 go build -o managergit.exe main.go ./managergit.exe ``` ### 默认账号 首次启动会自动创建默认管理员账号: - **用户名**: `admin` - **密码**: `admin123` ⚠️ **请在生产环境首次登录后立即修改密码!** ## 📖 使用说明 ### 1. 登录系统 访问 `http://localhost:8080`,使用默认账号登录。 ### 2. 添加代码仓库 1. 以管理员身份登录 2. 点击「代码仓库」→「+ 添加仓库」 3. 填写仓库名称、本地路径(绝对路径)、描述 4. 系统会自动验证路径是否为有效 Git 仓库 **路径示例**: - Windows: `D:\projects\my-repo` - Linux/Mac: `/home/user/projects/my-repo` ### 2.1 仓库列表功能 - **搜索功能**:在顶部搜索框输入关键词,可搜索仓库名称、路径或描述 - **显示模式**:点击「列表」/「详细」按钮切换显示模式 - **列表模式**:表格形式,适合快速浏览 - **详细模式**:卡片网格形式,展示完整信息 - **分页浏览**:底部支持分页,可调整每页显示数量(10/20/50/100) ### 3. 管理分支 1. 在仓库列表中点击「🌿 分支」按钮 2. 切换「本地分支」或「远端分支」标签页 3. 查看分支列表,当前分支会显示「当前」标签 4. 有权限时可点击「删除」按钮删除分支 **远端分支显示**: - 远端分支表格分为「远端」和「分支名称」两列 - 「远端」列显示远端名称(如 origin) - 「分支名称」列显示实际分支名(去除远端前缀) **注意事项**: - 当前分支无法删除 - 删除远端分支为高危操作,需谨慎 - 查看远端分支时会自动执行 `git fetch --prune` ### 4. 用户管理(管理员) 1. 进入「用户管理」 2. 点击「+ 添加用户」创建新用户 3. 可修改用户角色(管理员/开发者/查看者) 4. 可删除用户(不能删除自己) ### 5. 权限配置(管理员) 1. 进入「权限配置」 2. 选择要配置的用户(仅非管理员用户) 3. 在权限矩阵中勾选: - **查看权限**:允许用户看到该仓库 - **删除本地分支**:允许删除本地分支(需先有查看权限) - **删除远端分支**:允许删除远端分支(需先有查看权限) 4. 点击「💾 保存配置」 ## 🏗️ 项目结构 ``` managergit/ ├── main.go # 入口文件 ├── go.mod # Go 模块定义 ├── README.md # 项目文档 ├── .gitignore # Git 忽略文件 ├── internal/ │ ├── model/ # 数据模型 │ │ ├── models.go # 数据表定义 │ │ └── db.go # 数据库初始化 │ ├── middleware/ # 中间件 │ │ └── auth.go # JWT 认证、CORS │ ├── handler/ # 请求处理器 │ │ ├── auth.go # 登录、密码修改 │ │ ├── user.go # 用户管理 │ │ ├── repo.go # 仓库管理 │ │ ├── branch.go # 分支管理 │ │ └── permission.go # 权限管理 │ └── service/ # 业务服务 │ └── git.go # Git 操作封装 └── web/ # 前端静态文件 └── index.html # Vue3 单页应用 ``` ## 🔧 配置说明 ### 数据库配置 项目支持三种数据库类型:**SQLite**(默认)、**MySQL**、**PostgreSQL**。 #### 方式一:使用配置文件(推荐) 编辑项目根目录下的 `config.yaml` 文件: ```yaml database: type: sqlite # 可选: sqlite, mysql, postgres sqlite: path: data/managergit.db mysql: host: localhost port: 3306 user: root password: your_password dbname: managergit charset: utf8mb4 postgres: host: localhost port: 5432 user: postgres password: your_password dbname: managergit sslmode: disable ``` #### 方式二:使用默认配置 如果不创建 `config.yaml`,系统会使用默认配置(SQLite,数据库文件位于 `data/managergit.db`)。 **详细配置说明请查看 [DATABASE.md](DATABASE.md)** ### JWT 密钥 在 `config.yaml` 中配置: ```yaml jwt: secret: your_strong_random_secret_key # 生产环境请修改为强随机字符串 expire_hours: 24 # Token 过期时间(小时) ``` ### 服务器端口 在 `config.yaml` 中配置: ```yaml server: port: 8080 host: "0.0.0.0" ``` ### 启动时指定配置文件 ```bash go run main.go -config=config.yaml ``` ## 🛡️ 权限说明 ### 角色权限 | 功能 | 管理员 | 开发者 | 查看者 | |------|--------|--------|--------| | 查看所有仓库 | ✅ | 需配置 | 需配置 | | 添加/编辑/删除仓库 | ✅ | ❌ | ❌ | | 查看分支 | ✅ | 需配置 | 需配置 | | 删除本地分支 | ✅ | 需配置 | 需配置 | | 删除远端分支 | ✅ | 需配置 | 需配置 | | 用户管理 | ✅ | ❌ | ❌ | | 权限配置 | ✅ | ❌ | ❌ | ### 权限继承规则 - 无「查看权限」时,无法看到该仓库,也无法执行任何操作 - 有「查看权限」但无「删除本地分支」权限时,只能查看,不能删除本地分支 - 有「查看权限」但无「删除远端分支」权限时,只能查看,不能删除远端分支 ## 🔒 安全建议 1. **修改默认密码**:首次登录后立即修改管理员密码 2. **修改 JWT 密钥**:生产环境使用强随机密钥 3. **HTTPS 部署**:生产环境使用 HTTPS 4. **限制访问**:使用防火墙或反向代理限制访问来源 5. **定期备份**:定期备份 `data/managergit.db` 数据库文件 ## 🐛 故障排查 ### 无法添加仓库 - 检查路径是否为绝对路径 - 确认路径指向有效的 Git 仓库(包含 `.git` 目录) - 确认系统已安装 Git 且 `git` 命令可用 ### 无法查看分支 - 检查仓库路径是否正确 - 确认有该仓库的查看权限 - 查看浏览器控制台和服务器日志 ### 无法删除分支 - 确认有对应的删除权限 - 当前分支无法删除 - 删除远端分支需要网络连接和远端权限 ## 📝 开发说明 ### 技术栈 - **后端**: Go 1.21, Gin, GORM, SQLite, JWT - **前端**: Vue3, Element Plus, Axios - **数据库**: SQLite (glebarez/sqlite) ### API 接口 所有 API 接口前缀为 `/api`,需要认证的接口需在 Header 中携带: ``` Authorization: Bearer ``` 主要接口: - `POST /api/auth/login` - 登录 - `GET /api/repos?page=1&page_size=10&search=关键词` - 获取仓库列表(支持分页和搜索) - `GET /api/repos/:id/branches?type=local|remote` - 获取分支列表 - `DELETE /api/repos/:id/branches` - 删除分支 - `GET /api/users` - 获取用户列表(管理员) - `PUT /api/permissions` - 设置权限(管理员) ## 📄 许可证 MIT License ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! --- **Git Manager** - 让 Git 分支管理更简单 🚀