终于把一直想做的 GitHub 备份程序做出来了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
SingeeKing
10.19D

终于把一直想做的 GitHub 备份程序做出来了

  •  
  •   SingeeKing
    PRO
    ImSingee 9 天前 1821 次点击

    https://github.com/ImSingee/git-plus

    单一二进制直接运行,或是也打了一个 docker 镜像可用;建议运行在 NAS


    从当年 GitHub 封了俄罗斯以后就一直想有这么个备份工具吧,之前靠一堆 bash 脚本完成的,现在算是借 AI 的手用 Go 重写了又做了个 Web 页面

    1. 支持备份自己的 Repo 、Star 的 Repo 和 Watch 的 Repo

    算是做了两方面的考量,一是自己写的代码存档下(防止被封号),二是自己收藏/关注的存档下(防止删库等)

    2. 记录所有的变更历史

    可能是自己误操作,也可能是收藏的 repo 出了什么变故;有的时候库可能还在,但 branch 被覆盖了

    现有的工具遇到这种情况大都没做特殊处理,需要靠自己跑 reflog 或是按时间去找 commit

    我的设计是,完整记录所有分支头的 commit 变化 随意回滚

    3. 定时同步

    可选的定时同步,可以每天固定跑一次

    期货功能

    其实还有一些功能在计划中,比如索引所有的仓库来搜索、仓库有更新发通知(参考 ReleaseBot),也包括支持更多源(如 Gitlab )等,感兴趣的话也可以直接回复这个帖子,等发布了我 at 告知

    12 条回复    2026-04-16 16:09:55 +08:00
    ixinshang
        1
    ixinshang  
       9 天前
    感觉不错呀。
    以前想着拿 gitea 来备份。 但是效果不怎么好
    TrackBack
        2
    TrackBack  
       9 天前
    看着不错,有空试试
    不过我记得 github 有个导出全部数据的按钮吧,有没有可能定时调用那个?
    a1210968738
        3
    a1210968738  
       8 天前 via Android
    我记得 gogs 好像也有定时同步的功能
    Sliots
        4
    Sliots  
       8 天前
    @ixinshang 可以用 Gitea Mirror
    loading
        5
    loading  
       8 天前
    我群晖也在那个时候部署了类似功能,省事运行很久了。
    villivateur
        6
    villivateur  
       8 天前
    我也一直用 Gitea 的 Mirror 功能,感觉那个功能更全一点
    bhqt
        7
    bhqt  
       8 天前
    等着等着,目前是用 Forgejo 做镜像
    SingeeKing
        8
    SingeeKing  
    OP
    PRO
       8 天前   1
    @ixinshang
    @villivateur
    @Sliots

    我自己之前其实也自建过 gitea ,但是它还是没做到我想的「记录所有的变更历史」

    我遇到过几次,某个项目转闭源了,然后 force push 只留了个 README ,然后等我发现的时候 gitea 后台的 gc 也把历史的 git blob 清理了

    有一个专门的 Gitea Mirror 倒是解决了这种问题,但它是检测到异常变更而要求人工介入的,我觉得这种是个心智负担
    SingeeKing
        9
    SingeeKing  
    OP
    PRO
       8 天前
    @TrackBack 理论上可以,但我不会用它来做 repo 的同步,每次要下载全量数据太恐怖了,而且也不支持 star 的 repo 的下载
    SingeeKing
        10
    SingeeKing  
    OP
    PRO
       8 天前
    @bhqt 将数据 [导出] 到其它平台确实在计划中,但是最根本的数据我还是觉得存文件系统最保险,因为各种 git 平台都会有内置的 gc 功能,用它来做单一存储很不保险(可以参考我上面回复 gitea 的)
    SingeeKing
        11
    SingeeKing  
    OP
    PRO
       8 天前
    @villivateur 你是觉得缺了什么功能呢? issue 之类的嘛
    villivateur
        12
    villivateur  
       8 天前
    @SingeeKing issue, action, lfs, release 都能给你同步过来
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3680 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 00:17 PVG 08:17 LAX 17:17 JFK 20:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86