Files
we-mp-rss/docs/github_update.md
T
2025-11-28 00:53:34 +08:00

5.1 KiB

GitHub 更新功能使用说明

本项目新增了从 GitHub 自动更新源码的功能,支持通过 API 接口和命令行工具两种方式使用。

功能特性

  • ✅ 自动检查 Git 仓库状态
  • ✅ 安全的代码更新(支持备份)
  • ✅ 提交历史查看
  • ✅ 分支管理
  • ✅ 代码回滚功能
  • ✅ RESTful API 接口
  • ✅ 命令行工具

API 接口使用

1. 检查 Git 状态

GET /api/github/status

参数:

  • path (可选): 仓库路径

响应示例:

{
  "is_git_repo": true,
  "current_branch": "main",
  "has_changes": false,
  "remote_url": "https://github.com/rachelos/we-mp-rss.git",
  "last_commit": "abc1234 Fix some bugs",
  "ahead_commits": 0,
  "behind_commits": 2,
  "error": null
}

2. 更新代码

POST /api/github/update

请求体:

{
  "branch": "main",        // 可选,目标分支
  "backup": true,           // 可选,是否创建备份
  "path": "/path/to/repo"   // 可选,仓库路径
}

响应示例:

{
  "success": true,
  "message": "成功更新 5 个文件",
  "backup_created": true,
  "backup_path": "/path/to/backup_20231127_143022",
  "updated_files": ["file1.py", "file2.js"],
  "error": null
}

3. 获取提交历史

GET /api/github/commits?limit=10

参数:

  • limit: 返回的提交数量 (默认 10,最大 100)
  • path: 可选的仓库路径

4. 获取分支列表

GET /api/github/branches

5. 回滚到指定提交

POST /api/github/rollback

请求体:

{
  "commit_hash": "abc1234",
  "path": "/path/to/repo"
}

命令行工具使用

项目根目录提供了 github_update.py 脚本,方便命令行操作。

基本用法

# 检查状态
python github_update.py --status

# 更新代码
python github_update.py --update

# 更新到指定分支
python github_update.py --update --branch main

# 更新但不创建备份
python github_update.py --update --no-backup

# 查看提交历史
python github_update.py --history --limit 20

# 查看所有分支
python github_update.py --branches

# 回滚到指定提交
python github_update.py --rollback abc1234

# 以 JSON 格式输出
python github_update.py --status --json

高级用法

# 指定仓库路径
python github_update.py --path /path/to/repo --status

# 组合使用
python github_update.py --update --branch develop --backup

安全特性

1. 自动备份

  • 默认在更新前创建完整备份
  • 备份文件命名格式: backup_YYYYMMDD_HHMMSS
  • 备份包含完整的 Git 仓库历史

2. 状态检查

  • 更新前检查是否有未提交的更改
  • 验证 Git 仓库状态
  • 检查与远程仓库的差异

3. 错误处理

  • 完善的错误提示
  • 操作失败时的回滚机制
  • 详细的日志记录

注意事项

⚠️ 重要提醒

  1. 备份重要性: 建议始终开启备份功能,特别是在生产环境
  2. 未提交更改: 更新前请确保所有更改已提交或暂存
  3. 回滚风险: 回滚操作会永久丢失后续提交,请谨慎使用
  4. 网络依赖: 更新功能需要能够访问 GitHub 仓库

🔧 故障排除

常见问题:

  1. "不是 Git 仓库"错误

    • 确保在正确的 Git 仓库目录中执行操作
    • 检查 .git 目录是否存在
  2. "存在未提交的更改"错误

    • 使用 git status 查看未提交的文件
    • 提交更改: git add . && git commit -m "保存更改"
    • 或暂存更改: git stash
  3. 网络连接问题

    • 检查网络连接
    • 确认能够访问 GitHub
    • 检查防火墙设置
  4. 权限问题

    • 确保有足够的文件系统权限
    • 检查仓库目录的读写权限

集成到自动化流程

Cron 定时更新

# 每天凌晨 2 点自动检查更新
0 2 * * * cd /path/to/we-mp-rss && python github_update.py --status --json > /var/log/github_status.log

# 每周日凌晨 3 点自动更新(带备份)
0 3 * * 0 cd /path/to/we-mp-rss && python github_update.py --update --backup >> /var/log/github_update.log 2>&1

CI/CD 集成

# GitHub Actions 示例
- name: Update from upstream
  run: |
    python github_update.py --update --no-backup
    if [ $? -eq 0 ]; then
      echo "Update successful"
      # 触发后续部署流程
    fi

开发和扩展

添加新功能

  1. 在 tools/github_updater.py 中添加核心功能
  2. 在 apis/github_update.py 中添加 API 接口
  3. 更新命令行工具 github_update.py
  4. 添加相应的测试用例

自定义配置

可以通过修改 GitHubUpdater 类来支持:

  • 不同的 Git 托管平台 (Gitee, GitLab 等)
  • 自定义备份策略
  • 特定的分支保护规则
  • 集成通知系统

技术实现

  • 后端: FastAPI + Python
  • Git 操作: subprocess 调用 git 命令
  • 错误处理: 完善的异常捕获和用户友好的错误信息
  • 安全性: 输入验证、路径检查、操作确认

支持和反馈

如有问题或建议,请通过以下方式联系:

  • 提交 Issue 到项目仓库
  • 查看项目文档
  • 联系开发团队