2019.10.29 更新:由于 Gitalk 对 GitHub 之外的网站支持不好(在 github.io 以外的域名下都不能进行评论),现已迁移至 Valine。 Valine 的博客推送做的不是很好,不过有第三方实现方案。可查阅 官方网站 (opens new window)

2019.11.6 更新:由于 GitHub OAuth API 限制,只能有一个回调网页Authorization callback URL,但是没有限制为 github.io。可在 https://github.com/settings/developers 对应的地方修改。Gitalk 真香。邮件是由 GitHub 发的,稳定性比自己邮箱发会稳定得多。

阅读 Material 主题 (opens new window) 的主题配置文件以后,可以发现,Material 主题的配置文件是自带了评论区的功能,但是给的几个网站都不是很好用。(disqus国内用不了,changyan需要备案,gitment作者删库跑路了停更并把服务器关了)。

# 安装步骤

在 Material 的 github 网站的 issue 下找到了关于新增 gitalk (opens new window) 的 pull request。

所以按照 pull request (opens new window) 修改、添加对应的文件就可以了。

注意在本地不应该修改_config.template.yml,而应该直接修改主题配置文件_config.yml。其他 Hexo 主题的添加方式同理。

其中_config.yml的内容需要到 Github New OAuth Application (opens new window)注册申请。
申请需要填的东西有:

标题 内容
Application name 随便写,建议填你的网站名<username>.github.io
Homepage URL 博客域名https://<username>.github.io/
Application description 随意,可不填
Authorization callback URL 博客域名https://<username>.github.io/

register 以后会得到一个Client IDClient Secret。需要分别填进主题配置文件。

主题配置文件需要作如下修改:

comment:
    use: gitalk

    gitment_client_secret:
    valine_leancloud_appId:
    valine_leancloud_appKey:
    gitalk_owner: # 你的github用户名,如lyh543
    gitalk_repo: # 你的github仓库名,如lyh543.github.io
    gitalk_client_id: # 刚才获取的 Client ID
    gitalk_client_secret : # 刚才获取的 Client secret

# lable 过长的 bug

配置好并 hexo d -g 以后,打开一篇文章,发现“未找到相关的 issues 进行评论”。
使用 Github 登录以后,就会显示 Error: Validation Failed

去 Gitalk 的 Issues 下还真找到了这个 Issue (opens new window), 还是被置顶了的。

看样子 bug 是因为 Gitalk 是默认用文章标题作 issue 的 lable,并以此作为该评论区的唯一识别码。
Github 限制了 issue 的 lable 长度不超过 50,如果使用中文,在链接中一个中文等于三个字符,导致 label 过长,无法正常生成评论。

该 Issues 下有一条评论给出了一个方案 (opens new window),使用标题的 Hash 值的前 50 位作为 label

我尝试以后发现仍然不行,不懂 JavaScript 的我猜测是 JavaScript 的函数名引用错了。
经 Google 以后,找到了一个可用的 JavaScript (opens new window)

# 无法自动为博客初始化 issue 的 bug

还有一个问题,他不会为每一篇博客自动生成 issue,也就是初始化评论。

解决方案有不少,但是感觉挺麻烦的,做的话有点力不从心。在这里抛几个链接吧:

ruby脚本,Gitalk 官方)评论初始化 (opens new window)
Nodejs)自动初始化Gitalk评论 (opens new window)
ruby脚本)自动初始化 Gitalk 和 Gitment 评论 (opens new window)

大概就这样结帖了。