AI 从 0 开发了一个开源项目:GitHub 代码自动备份到 Gitee

为什么要备份

代码放 GitHub 上,最怕的就是账号出问题或者仓库意外丢失。虽然 GitHub 挺稳的,但多个备份总归安心。

另外我有些项目想让国内的朋友方便看到,GitHub 基本网络不能用,Gitee 就顺畅多了。

之前试过 Gitee 官方的镜像功能,但每个仓库要单独去配置,十几个仓库一个个点下来实在太累了。而且后续有新仓库还得再配一遍。

我想要的效果是:配一次,后面不用管

踩了哪些坑

试了挺多方案,最后用 GitHub Actions 配合 hub-mirror-action 搞定了。但中间踩了几个坑,写出来大家避开。

坑一:私有仓库同步失败

第一次跑直接报错:

fatal: could not read Username for 'https://github.com': No such device or address

默认用 HTTPS 克隆,私有仓库没权限。换成 SSH 方式克隆,把 SSH 公钥同时加到 GitHub 和 Gitee 就好了。

坑二:变量名不能用 GITHUB_ 开头

在 GitHub 配置 Variables 时,提示 Variable name cannot start with "GITHUB_" prefix。原来 GITHUB_ 是 GitHub 的保留前缀,改成 GH_USERNAME 就通过了。

坑三:SSH 密钥设了密码

平时习惯给 SSH 密钥加个密码,结果 Actions 跑的时候卡住了。自动化场景用的 SSH 密钥一定不要设 passphrase,直接回车跳过。

用 opencode 开发这个项目

这个项目是用 opencode 在终端里开发的,全程没离开过命令行。

一开始我就问它"Gitee 怎么实时同步 GitHub 上的所有项目",它给了几个方案,我选了 GitHub Actions 那条路,然后它就开始帮我搭了。

过程中来回改了好几次:

  • 项目名一开始随便起的,后面觉得含义不清楚,让它重新想了一个
  • 目录位置一开始不对,我想把这类 Action 项目统一放一个目录下,让它挪了位置
  • 配置变量时 GitHub 报 GITHUB_ 不让用,直接告诉它,它把所有文件一次全改了
  • workflow 先从测试单仓库开始,确认链路通了再改成全量,后来又调成指定列表,都是聊天完成

最有意思的是私有仓库报错那次,我把 Actions 日志贴给它,它看了之后说是 HTTPS 克隆没权限,改成 SSH 方式就行了,还把 README 里对应的说明一起更新了。

整个过程就是对着终端聊天,不用自己翻文档,也不用挨个文件改。

最后做出来的东西

折腾完整理成一个开源项目,结构很简单:

gh-gitee-sync/
├── .github/workflows/sync-to-gitee.yml
├── README.md
└── .gitignore

配置一次 Secrets 和 Variables,每天凌晨自动同步,也可以随时手动触发。新加仓库改一下列表就行。

项目地址:https://github.com/Idea-flow/gh-gitee-sync

有同样需求的朋友可以直接拿去用,有问题欢迎提 Issue。

一点感受

这个项目其实不大,但如果没 AI,我大概不会花时间去做。以前想到"搞个脚本同步一下",转头又觉得要查文档、配环境、调 bug,嫌麻烦就搁置了。

但 opencode 直接把门槛拉平了。有想法直接问它,它能给出方案、帮你比较、领着你落地。遇到报错也不用自己去搜,贴过去它就能修。

所以现在一些小想法我不会轻易放掉了。遇到"如果有个工具能 XXX 就好了"的念头,直接丢给 AI 问问看,十有八九能给个可行的路子,就算最后没做成,思路也比之前开阔了。

关注一下哦~,会持续分享 AI 工具和效率提升的实操经验。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐