记折腾博客(二)

Updated at 2021.02.28, 787 words, 4 mins

继续上篇。

在所有的东西都配置好之后,运行 hugo 命令即可在 public 目录下构建出网站内容。静态站点需要将 public 目录作为网站的根目录进行部署。我的想法是,一份部署在国外 GitHub 上,一份部署在国内 gitee 上,这样一来除了可以做备份之外,还可以将 gitee 上的站点作为镜像,这样如果主域名访问较慢的情况下,可以切换到速度较快的国内站点进行访问。

在将博客仓库推到 GitHub 之后,发现 GitHub 貌似没有提供自定义部署文件夹的功能,只有指定的 /root 或者 /doc 两个选择。那么解决方法有两个,要么将打包后的目标文件夹从 public 改为 doc,要么想办法把 public 文件夹作为一个仓库进行部署。

在网上查阅发现,git 可以将指定的文件夹拷贝到另一个新分支,也就是使用 git subtree 命令。因此我打算将 public 的内容作为新分支 deploy 进行部署,使用以下命令:

git subtree push --prefix public origin deploy

执行完命令后,本地和远程仓库都有了 deploy 分支,并且分支内容和 public 完全一致。

更新:之前使用的 git subtree 方法由于 push 时经常 conflict 因此废弃掉,换做部署 /docs 文件夹的方式,具体操作步骤可以查看这篇文章

之后进行域名绑定,在阿里云上添加了 A 记录和 CNAME 记录,然后将 IP 地址和域名分别指向 GitHub 的 IP 和 GitHub 为我的博客仓库分配的预览地址。

可以使用 ping github.com 命令来获取 GitHub 的 IP 地址

还有一个问题,如何使本地仓库同步到两个远程仓库呢?在我网上查阅发现,只需要在本地仓库下的 .git/config 下添加第二个远程仓库的 url 即可,我打开 git config 发现内容如下:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[user]
    name = CaptainOfPhB
    email = xxxxxxxx@gmail.com
[remote "origin"]
    url = git@github.com:CaptainOfPhB/captainofphb.github.io.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "deploy"]
    remote = origin

那么只需要在 remote.origin.url 下面再添加一条远程仓库的 url 即可,这样就可以把本地仓库同步到两个远程仓库:

[remote "origin"]
  url = git@github.com:CaptainOfPhB/captainofphb.github.io.git
  url = git@gitee.com:<user_acount>/<repository_name>.git
  fetch = +refs/heads/*:refs/remotes/origin/*

添加完之后,使用 git remote -v 进行查看,打印出:

origin  git@github.com:CaptainOfPhB/captainofphb.github.io.git (fetch)
origin  git@github.com:CaptainOfPhB/captainofphb.github.io.git (push)
origin  git@gitee.com:<user_acount>/<repository_name>.git (push)

这表示第一个 url 地址 git 用来做 fetch 或 pull,第二第三用来做 push 同步。

然后运行 git push 之后,发现仓库会同步到 gitee 了。然后在 gitee page 上进行配置,选择 deploy 分支直接 docs 子目录进行部署即可,与 GitHub 类似。

你可以点击 daijiangtao.namedaijiangtao.gitee.io 访问我的博客。

完。