GitHub 私有仓库文件同步成功经验总结
🧩 项目目标
- 从 Gist 文件列表中读取文件路径
- 使用 GitHub API 从私有仓库
rakersfu/wine-hf 下载文件
- 保存到本地目录
/tmp/navpage
- 记录日志到
/tmp/logs/download_from_github.log
🔐 权限配置
- 仓库为私有,必须使用有效的 GitHub Token
- Token 必须属于仓库拥有者或协作者
- Token 权限需包含
repo 范围
📄 Gist 文件列表
文件列表存放在 Gist 中,访问地址:
https://gist.githubusercontent.com/xiongli870110-hue/dae601db6f60c1dfdf0daf72624cac13/raw
📥 下载逻辑(使用 GitHub Contents API)
https://api.github.com/repos/REPO_OWNER/REPO_NAME/contents/FILE_PATH?ref=BRANCH
使用 curl 携带 Token 请求 API
解析 JSON 响应中的 .content 字段(base64 编码)
解码并写入目标文件
✅ 成功标志
- 文件下载后大小正常,不再是空壳
- 日志中显示“下载成功”,并记录每个文件路径
- Gist 文件列表与仓库路径完全匹配
❌ 遇到的问题与解决方案
- 文件内容为空 → 原因是 Token 无权限访问私有仓库
- API 返回 404 → 原因是文件路径错误或分支名不对
- 未登录访问仓库返回 404 → 说明仓库为私有
- 解决方法:更换为仓库拥有者的有效 Token,确认文件路径和分支名
📁 后续建议
- 保留原始目录结构(自动创建子目录)
- 加入重试机制和文件校验
- 封装为模块化脚本,支持多项目同步
- 将 Token 和配置项抽离到
.env 文件中
🎉 本次同步机制已成功运行并集成到定时任务中,具备高可靠性与可维护性。