# git-pull-master **Repository Path**: qq492607291/git-pull-master ## Basic Information - **Project Name**: git-pull-master - **Description**: git-pull-master是一款专为Windows服务器设计的Web版Git部署管理工具。它通过简洁的网页界面,让您轻松管理云服务器上的多个项目,实现一键式Git Pull更新操作。告别繁琐的远程登录和命令行操作,只需在浏览器中点选项目,即可完成代码部署,极大提升团队协作和项目维护效率,是开发者的云端部署利器。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-14 - **Last Updated**: 2025-12-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Git部署管理系统 一个基于PHP的Web界面Git部署工具,专为Windows服务器环境设计,提供直观的项目管理和一键Git Pull功能。 ## 📋 系统概述 ### 项目背景 在Windows Server 2012环境中管理多个Git项目的更新,传统的命令行操作效率低下且容易出错。本系统提供了Web化的解决方案,让项目管理变得更加简单高效。 ### 核心功能 - 🔄 **一键Git Pull** - 支持多项目批量更新 - 📊 **实时状态监控** - 项目状态实时更新 - 🔍 **自动项目扫描** - 自动发现Git仓库 - 📝 **操作日志记录** - 详细的更新日志 - 🎯 **项目过滤管理** - 活动/忽略项目分类 - 🛡️ **增强版Git管理** - 专为Windows环境优化 ## 🏗️ 系统架构 ``` git-pull-master/ ├── git-deploy/ # 核心应用目录 │ ├── index.php # 主界面 │ ├── login.php # 登录页面 │ ├── install.php # 安装脚本 │ ├── test_git.php # 测试脚本 │ ├── api/ # API接口 │ │ ├── update.php # 执行Git更新 │ │ ├── projects.php # 获取项目列表 │ │ ├── scan_projects.php # 扫描项目 │ │ ├── logs.php # 获取日志 │ │ ├── add_project.php # 添加项目 │ │ └── toggle_ignore.php # 切换忽略状态 │ ├── config/ # 配置文件 │ │ ├── database.php # 数据库配置 │ │ ├── config.php # 系统配置 │ │ └── security.php # 安全配置 │ ├── lib/ # 核心类库 │ │ ├── GitManagerEnhanced.php # 增强版Git管理器 │ │ ├── GitManager.php # 基础Git管理器 │ │ ├── GitManagerWin.php # Windows专用Git管理器 │ │ ├── GitInfo.php # Git信息获取 │ │ ├── ProjectScanner.php # 项目扫描器 │ │ └── Auth.php # 认证管理 │ ├── assets/ # 静态资源 │ ├── logs/ # 日志目录 │ ├── install.sql # 数据库结构 │ └── update_database.sql # 数据库更新 ├── README.md # 项目说明 ├── SRS.md # 需求文档 └── operateLog.md # 操作日志 ``` ## 🛠️ 环境要求 ### 服务器环境 - **操作系统**: Windows Server 2012 R2 及以上 - **Web服务器**: Nginx 1.15.11 / Apache 2.4+ - **PHP版本**: PHP 7.4.3 及以上 - **数据库**: MySQL 5.7.26 及以上 - **Git**: Git 2.0+ (推荐2.35+) ### PHP扩展要求 ```ini extension=pdo_mysql extension=mbstring extension=json extension=curl ``` ### 系统权限 - Web服务器对项目目录的读写权限 - Git命令执行权限 - 数据库连接权限 ## 🚀 快速开始 ### 1. 下载部署 ```bash # 克隆项目到Web根目录 git clone git-pull-master # 或者直接解压到Web目录 # 确保 git-deploy 目录可被Web服务器访问 ``` ### 2. 数据库配置 ```bash # 创建数据库 mysql -u root -p CREATE DATABASE git_deploy CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 导入数据库结构 mysql -u root -p git_deploy < git-deploy/install.sql ``` ### 3. 安全配置设置 #### 方法一:使用环境变量(推荐) 1. **创建环境配置文件**: ```bash # 复制示例文件 cp .env.example .env # 编辑环境配置 notepad .env ``` 2. **设置环境变量**: ```bash # 在 .env 文件中配置 DB_HOST=localhost DB_USER=your_database_username DB_PASS=your_database_password DB_NAME=git_deploy API_KEY=your_secure_random_api_key_here ADMIN_PASSWORD=your_admin_password_here ``` #### 方法二:创建配置文件 1. **复制示例配置**: ```bash # 复制数据库配置示例 cp git-deploy/config/database.example.php git-deploy/config/database.php # 复制安全配置示例 cp git-deploy/config/security.example.php git-deploy/config/security.php ``` 2. **编辑配置文件**: 编辑 `git-deploy/config/database.php` 设置数据库连接 编辑 `git-deploy/config/security.php` 设置安全密钥 #### 安全建议 - 🔒 **密钥生成**:使用 `php -r "echo bin2hex(random_bytes(32));"` 生成安全的API密钥 - 🔒 **密码哈希**:使用 `password_hash('your_password', PASSWORD_DEFAULT)` 生成密码哈希 - 🔒 **文件权限**:确保配置文件不被Web服务器直接访问 - 🔒 **定期更新**:定期更换密钥和密码 - 🔒 **最小权限**:数据库用户只授予必要的权限 **重要**:`.env`、`database.php`、`security.php` 文件已被 `.gitignore` 排除,不会提交到Git仓库。 ### 4. Web服务器配置 #### Nginx配置示例 ```nginx server { listen 80; server_name your-domain.com; # 替换为您的域名 root /path/to/git-pull-master/git-deploy; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 限制访问敏感文件 location ~ ^/(config|logs)/ { deny all; } # 限制访问API目录 location ~ ^/api/ { # 可以添加IP白名单限制 # allow 192.168.1.0/24; # deny all; } } ``` ### 5. 权限设置 确保以下目录具有写入权限: ```bash # Windows环境权限设置 # 右键文件夹 -> 属性 -> 安全 -> 编辑权限 # 给IIS_IUSRS或相应的Web服务用户添加完全控制权限 git-deploy/logs/ git-deploy/config/security.php ``` ### 6. 访问系统 1. 打开浏览器访问:`http://your-domain.com/` 2. 首次访问会自动跳转到安装页面 3. 完成安装后即可使用 ## 📖 使用指南 ### 基本操作 #### 1. 扫描项目 - 点击"扫描Git项目"按钮自动发现服务器上的Git仓库 - 系统会递归扫描指定目录下的所有.git文件夹 #### 2. 项目管理 - **查看项目**: 主页面显示所有活动的Git项目 - **项目状态**: - 🟢 等待更新 (idle) - 🟡 更新中 (updating) - 🔴 更新失败 (error) #### 3. 执行更新 - 点击项目卡片上的"更新"按钮 - 系统自动执行 `git pull origin ` - 实时显示更新进度和结果 #### 4. 查看日志 - 点击"📋"图标查看项目更新日志 - 日志包含执行时间、状态和详细输出 #### 5. 项目过滤 - **全部项目**: 显示所有项目 - **活动项目**: 显示未被忽略的项目 - **忽略项目**: 显示已忽略的项目 ### 高级功能 #### 项目忽略功能 对于不想自动更新的项目,可以设置为忽略状态: 1. 点击项目卡片的"👁️"按钮 2. 选择"忽略"将项目排除在自动更新之外 3. 忽略的项目不会出现在活动项目列表中 #### 批量操作 - 支持多项目同时更新(开发中) - 支持批量设置忽略状态(开发中) ## 🔧 技术特性 ### 增强版Git管理器 系统专门为Windows环境优化了Git命令执行: #### 智能Git路径检测 ```php // 自动检测Git安装路径 $possiblePaths = [ 'C:\Program Files\Git\bin\git.exe', 'C:\Program Files (x86)\Git\bin\git.exe', 'C:\msys64\usr\bin\git.exe', 'git' // 系统PATH中的git ]; ``` #### 双重执行方式 - **shell_exec**: 优先使用,更适合Windows环境 - **exec**: 备用方案,兼容性更强 #### 安全目录配置 自动解决Git 2.35+版本的安全目录问题: ```php // 自动添加安全目录配置 $safePath = str_replace('\\', '/', realpath($this->projectPath)); exec("git config --global --add safe.directory " . escapeshellarg($safePath)); ``` #### 错误检测机制 智能识别各种Git执行错误: ```php $errorPatterns = [ 'fatal:', 'error:', 'Permission denied', 'not found', 'Failed to', 'could not', 'Unable to' ]; ``` ### 数据库设计 #### projects表 ```sql CREATE TABLE projects ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL COMMENT '项目名称', path VARCHAR(500) NOT NULL COMMENT '项目绝对路径', git_remote VARCHAR(500) COMMENT 'Git远程仓库地址', branch VARCHAR(100) DEFAULT 'main' COMMENT '默认分支', status ENUM('idle', 'updating', 'error') DEFAULT 'idle', ignored TINYINT(1) DEFAULT 0 COMMENT '是否忽略项目', last_update TIMESTAMP NULL COMMENT '最后更新时间', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` #### update_logs表 ```sql CREATE TABLE update_logs ( id INT PRIMARY KEY AUTO_INCREMENT, project_id INT NOT NULL, status ENUM('success', 'failed', 'in_progress') NOT NULL, output TEXT COMMENT 'Git命令输出', executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (project_id) REFERENCES projects(id) ); ``` ## 🛡️ 安全配置 ### API安全 - 使用API密钥验证请求 - 支持IP白名单限制 - 请求频率限制(开发中) ### 文件安全 - 敏感配置文件拒绝直接访问 - 日志目录访问保护 - 输入数据过滤和转义 ### 会话安全 - 基于PHP Session的用户认证 - 密码加密存储 - 会话超时机制 ## 🔍 故障排除 ### 常见问题 #### 1. Git命令执行失败 **症状**: 更新时提示"Git命令执行失败" **解决方案**: ```bash # 检查Git是否正确安装 git --version # 检查Git路径配置 访问: http://your-domain.com/test_git.php # 检查Web服务器权限 确保Web服务用户有执行Git命令的权限 ``` #### 2. 数据库连接错误 **症状**: "数据库连接失败" **解决方案**: ```php // 检查 database.php 配置 define('DB_HOST', 'localhost'); define('DB_USER', 'your_username'); define('DB_PASS', 'your_password'); define('DB_NAME', 'git_deploy'); // 检查数据库服务是否运行 net start mysql // 检查用户权限 mysql -u username -p SHOW GRANTS FOR CURRENT_USER(); ``` #### 3. 权限问题 **症状**: "权限被拒绝"或无法写入日志 **解决方案**: ```bash # Windows环境下设置文件夹权限 # 1. 右键文件夹 -> 属性 -> 安全 # 2. 点击"编辑"添加用户权限 # 3. 选择"IIS_IUSRS"或相应的Web服务用户 # 4. 勾选"完全控制" # 或者通过命令行(管理员权限) icacls "C:\path\to\git-deploy\logs" /grant IIS_IUSRS:(OI)(CI)F ``` #### 4. 字符编码问题 **症状**: Git输出中文乱码 **解决方案**: 系统已自动设置UTF-8编码: ```php putenv("LANG=en_US.UTF-8"); putenv("LC_ALL=en_US.UTF-8"); ``` ### 调试模式 启用调试模式获取更多信息: ```php // 在 config/config.php 中添加 define('DEBUG_MODE', true); // 在 update.php 中查看调试信息 $result = $git->pull($project['branch']); var_dump($result['debug_info']); ``` ## 📈 性能优化 ### 数据库优化 - 定期清理过期日志 - 添加适当的索引 - 使用连接池 ### 前端优化 - Bootstrap 5.x 响应式设计 - 异步加载避免页面阻塞 - 本地缓存静态资源 ### Git优化 - 使用浅克隆减少数据传输 - 配置Git缓存优化 - 并行执行多个项目更新(开发中) ## 🔧 自定义配置 ### 扫描配置 编辑 `config/config.php`: ```php return [ 'web_root' => 'D:\\phpstudy_pro\\WWW', // Web根目录 'max_scan_depth' => 3, // 最大扫描深度 'excluded_dirs' => '/^(node_modules|vendor|\.git|\.idea)/', // 排除目录 'auto_scan_interval' => 3600, // 自动扫描间隔(秒) ]; ``` ### 分支配置 ```php // 默认分支设置 'default_branch' => 'main', // 或 'master' // 特定项目分支配置 'project_branches' => [ 'project-name' => 'develop', 'another-project' => 'feature/new-ui' ]; ``` ## 🔄 更新升级 ### 版本升级 1. **备份数据**: ```bash mysqldump -u root -p git_deploy > backup.sql ``` 2. **更新代码**: ```bash git pull origin main ``` 3. **更新数据库**: ```bash mysql -u root -p git_deploy < update_database.sql ``` 4. **清理缓存**: ```bash # 删除临时文件和缓存 del /Q logs\*.tmp ``` ### 配置迁移 系统会自动检测配置文件格式并进行兼容性处理。 ## 🤝 贡献指南 ### 开发环境搭建 1. 克隆项目到本地开发环境 2. 配置本地数据库 3. 修改 `config/database.php` 为开发环境配置 4. 运行 `install.php` 初始化数据库 ### 代码规范 - PSR-4 自动加载规范 - PHP 7.4+ 语法标准 - 注释使用中文和英文结合 - 遵循Git提交规范 ### 提交规范 ``` feat: 新功能 fix: 修复问题 docs: 文档更新 style: 代码格式调整 refactor: 代码重构 test: 测试相关 chore: 构建或工具相关 ``` ## 📄 许可证 本项目采用 MIT 许可证,详见 [LICENSE](LICENSE) 文件。 ## 🆘 支持与反馈 ### 技术支持 - 📧 邮箱: support@example.com - 💬 问题反馈: [GitHub Issues](https://github.com/your-repo/issues) - 📖 文档: [项目Wiki](https://github.com/your-repo/wiki) ### 常见问题 请查看 [FAQ](docs/FAQ.md) 获取常见问题的解答。 --- **项目开发时间**: 2025年12月 **当前版本**: v1.0.0 **兼容系统**: Windows Server 2012+ **技术栈**: PHP 7.4+, MySQL 5.7+, Nginx, Git