青梅梦呓

和世界交手的这许多年,你是否光彩依旧,兴致盎然

0%

使用Git Submdule 分离Hexo主题

Hexo 博客应该与其主题进行分离,需要更新主题,或者使用的评论,分享组件不可用,只需要做很小的改动

更重要的是,将代码copy到博客目录中,随博客一起推至Github等代码托管平台,但是Theme中的配置文件一同推了上去,其中包括不少appID,AK,SK这样的信息(例如leancloud), 这些影响都是灾难级的。

使用Git Submodule 能够很好地解决这些问题 ,对主题进行单独的管理,使之成为一个单独的部件, 非常的棒!

Ps: 这是我19年9月写的,之前博客域名过期,趁着春节将博客内容进行迁移,离本文记录时间已经过去了一段时间,请谨慎参考。

关于Git Submodule

官方文档给出了非常详解的解释和用例,我们在生产中也有不少用到的地方; 具体请移步这里 , 在此不做赘述。

具体步骤

1
2
3
4
5
6
//在本地Clone主题文件(以NexT主题为例): 
cd ${hexo} //进入到Hexo的目录
git submodule add https://github.com/theme-next/hexo-theme-next themes/next

//更新 _config.yml 使用NexT的主题
theme: next

此时就拥有了两个仓库,一个是Hexo的,一个是NexT主题的,后者只有拉取并无修改的权限,且其中包含一些信息并不适合推入Github公有仓库,建立一个私有仓库是比较合适的(GitHub放开了私有仓库,后面准备用Travis CI,就不考虑GitLab了)

1
2
3
4
cd ${hexo}/themes/next  //进入到子模块
//${github} 单独去一个远程仓库的名称,默认是origin 既然在github上,我就设置为github
git remote add ${github} git@github.com:${you_github_name}/${hexo-theme-next}.git //${hexo-theme-next} 是指你建立的私有的主题仓库名
git push -u ${github} master

拉取一个新的分支,并在上面进行自己的配置

1
2
3
4
git checkout -b ${release}
// 对主题进行个性化的修改和配置,增加第三方的插件,[具体请参考官方文档](https://hexo-theme-next.netlify.com/docs/)
//与本文主题无关,先行略过
git push -u ${github} ${release}

打开.gitmodule 文件,将其中的URL改为自己的仓库,并指定使用分支为release分支

1
2
3
4
   [submodule "themes/next"]
path = themes/next
url = https://github.com/${github_name}/${git_repo_name}
branch = release

通过以上简单的修改,可以将Hexo的主题与博客分离出来,使用私有仓库免去秘钥信息的泄漏,觉得上传到远程托管平台就不安全的话,可以单独生成线上使用的配置文件,就没有必要使用私有仓库。

当然,这样的也有一点问题,升级原来的主题的时候可能会有冲突,在自己的分支上合并master分支的代码,可能需要手动解决。 总体来说还是比较值得的。

总结

尽可能的将单独的模块分离出来,升级维护都是很方便的事情,也是编码的常见操作。安全问题很容易被忽略,任何秘钥的信息都不应该由自己主动泄漏出去。