去中心化把 Hexo 博客源码一键备份到 Gitee、CODING 和 VPS

本文最后更新于:2022年4月8日 凌晨

这是去中心化博客备份专题的第 2 篇。上一篇在这里。

互联网时代的“狡兔三窟”,叫作“去中心化”。

GitHub 封禁伊朗和俄罗斯开发者的私有账户,不能说明大厂不靠谱或者开源不靠谱,相反,说明了中心化不靠谱。即使 GitHub 那样的大厂,也会因为合规要求而封禁账号。如果开发者仅仅依赖 GitHub 托管源码,那还是落入了中心化的窠臼。

谷月姐不但给 博客 建立了好几个镜像,而且源码放在好几个不同的云盘和源码托管平台。就是要去中心化,免得一旦中美开战, GitHub 封禁中国开发者的账户,导致我的博客全军覆没。

我的 博客 源码在本地有一份,在 GitHub 有一份。接下来,谷月姐要把它备份到不同的云端。如果本地或 GitHub 出错,可以及时恢复。如果我的 GitHub 被封禁,还可以转移到其他的源码托管网站,或者从本地发布我的博客。

上一期,谷月姐介绍了把 Hexo 博客源码打包压缩备份到网盘和远程主机。

本期,谷月姐要把源码备份到 GiteeCODING 和在 VPS 上自建的 Git 服务器。

注意

  1. 其他基于 Git 的代码托管平台也适用本教程。
  2. 它同步不了子模块。

谷月姐推荐一键推送的方法。只需要在 VSCode 中更新过博文以后提交并点击“同步更改”按钮, VSCode 就会调用 git 把最新的博客源代码一次性推送到 GitHubGiteeCODING 和在 VPS 上自建的 Git 服务器。

1 建立仓库

GitHub 上已经有私有仓库了。

Gitee 上建立一个私有仓库,SSH 协议的 URL 是:git@gitee.com:kukmoon/kukmoon_blog.git 。注意:默认分支与 GitHub 上的博客源码仓库的默认分支一致,此处都是 master

CODING 上建立一个私有仓库,SSH 协议的 URL 是:git@e.coding.net:kukmoon/blog/source_code.git 。注意:默认分支与 GitHub 上的博客源码仓库的默认分支一致,此处都是 master

在 VPS 上建立了一个私有仓库,SSH 协议的 URL 是:ssh://kukmoon@999.999.999.999/home/kukmoon/kukmoon_blog

2 上传 SSH 公钥

谷月姐之前已经用 ssh-keygen 命令生成了 SSH 密钥,并将公钥上传到了 GitHub

2.1 将公钥上传到 GiteeCODING

将公钥上传到 GiteeCODING,只需要按照官方文档,在网页上进行操作即可。

2.2 将公钥上传到 VPS

谷月姐的 VPS 没有配置可视化面板,只能用命令行了。

$ cat ~/.ssh/id_rsa.pub | ssh kukmoon@999.999.999.999 'cat >> ~/.ssh/authorized_keys;chmod 700 ~/.ssh;chmod 600 ~/.ssh/authorized_keys'

注意:这条命令适用于 Windows/macOS/Linux,Windows 用户需要事先安装 OpenSSH。

2.3 连接测试

用 ssh -T 测试能否正常连接。

$ ssh -T git@gitee.com
$ ssh -T git@e.coding.net
$ ssh -T kukmoon@999.999.999.999

如果 ssh 命令询问 Are you sure you want to continue connecting (yes/no/[fingerprint])?,按 y 确认连接。

3 在本地配置远程库

通过 git remote set-url --add 命令,为 Git 默认的远程主机 origin 增加多个 URL,这样就可以一次性将博客源码推送到多个托管平台。

执行以下三条命令:

$ git remote set-url --add git@gitee.com:kukmoon/kukmoon_blog.git
$ git remote set-url --add git@e.coding.net:kukmoon/blog/source_code.git
$ git remote set-url --add ssh://kukmoon@999.999.999.999/home/kukmoon/kukmoon_blog

然后,再用 git remote -v 查看:

$ git remote -v
origin  git@github.com:Kukmoon/kukmoon_blog.git (fetch)
origin  git@github.com:Kukmoon/kukmoon_blog.git (push)
origin  git@gitee.com:kukmoon/kukmoon_blog.git (push)
origin  git@e.coding.net:kukmoon/blog/source_code.git (push)
origin  ssh://kukmoon@999.999.999.999/home/kukmoon/kukmoon_blog (push)

四个 push 和一个 fetch 说明,git 从远程主机拉取时,只会从 fetch 对应的 URL 拉取,但是在本地推送时,就会一次性推送到四个 push 对应的 URL。

另一种方法:也可以打开 .git\config 文件,修改 [remote "origin"] 段,把新的 URL 添加到 fetch 字段后面:

[remote "origin"]
	url = git@github.com:Kukmoon/kukmoon_blog.git
	fetch = +refs/heads/*:refs/remotes/origin/*
	url = git@gitee.com:kukmoon/kukmoon_blog.git
	url = git@e.coding.net:kukmoon/blog/source_code.git
    url = ssh://kukmoon@999.999.999.999/home/kukmoon/kukmoon_blog

4 一键推送

以下两种方法都可以把博客源码一次性推送到 GitHubGiteeCODING 和在 VPS 上自建的 Git 服务器。

  • 在本地执行 git push -u origin master
  • 在 VSCode 中点击“同步更改”按钮。

从此实现了真正的去中心化,即使 GitHub 封禁了我的仓库,谷月姐仍然能同步、管理和更新博客。

5 常见问题

Q: 如果要单独推送到 GitHub 怎么办?

A: 新建名为 github 的远程主机,指定 URL,再单独推送。例如:

$ git remote add github git@github.com/Kukmoon/kukmoon_blog.git
$ git push -u github master

单独推送到其他的托管平台,操作方法也是类似的。

6 总结

这样,谷月姐就把博客源码通过 Git 从本地备份到了 GiteeCODING 和在 VPS 上自建的 Git 服务器。读者也可以举一反三,用同样的方法备份自己的源码。

7 下期预告

下期 将介绍使用 GitHub Actions 将博客源码备份到 GiteeCODING


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!