利用Jekyll在GitHub Pages上部署博客

2023-05-16

开始之前

我觉得阮一峰的《 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门》是一个很经典的入门,每个Jekyll初学者都应该先去看一看,另外 GitHub Pages官网以及 Jekyllcn也是遇到问题时首先要查找的站点。

需要对Git的基本操作有些了解:

Git基本操作

##设置全局用户名和email,作为每次提交的记录
git config --global user.name “name"
git config --global user.email “mail.com”

##添加一个仓库
git remote add origin git@….git
git push -u origin master

##当提示权限不够时,添加ssh公钥
##在用户的.ssh目录下找id_rsa.pub等文件,没有的话去生成
ssh-keygen -t rsa -C "youremail@example.com”

##设置pull的默认地址
git branch --set-upstream-to=origin/master
##设置push的默认地址
git remote add origin git@….git

##配置别名
git config --global alias.xx ''

##临时保存工作区
git stash
git stash pop

## 回滚
git reset —hard 版本号

## 强行回滚远程服务器
git push -f

配置别名后会很方便,如果我有一个这样的别名:

bogon:portfolio zhangao$ git config --global alias.ci
commit -m
在提交的时候用ci就行了。单个人使用Git,不协同工作的话,还是比较简单的。

GitHub Pages

GitHub Pages上比较简单,只需要建立一个和你用户名相同的Repository就行了,比如:
这样就建立了一个Repository,这样就能通过username.github.io来访问了。
你也可以在设置里面选择生成一个默认的页面。

下面主要还是说下在使用Jekyll过程中实际的问题

评论系统

我之前使用的是Disqus,后来感觉速度不怎么样,就换了 多说,多说还是很好用的,适合国内环境。

博客搬家

我之前没有找到mac版的,就自己做了一个:
CSDN博客导出工具Mac版
CSDN博客导出工具Mac By Swift

代码高亮

高亮的插件有很多,Jekyll的Pygments就已经超过 100多种语言,使用起来也很简单,在yml配置文件中设置:
pygments: true
然后在需要高亮的代码那里:
{% highlight ruby %}
def foo
  puts 'foo'
end
{% endhighlight %}
ruby替换为 你所使用的语言的短名称即可。
如果设置了pygments之后编译出错的朋友需要再加一条配置:
excerpt_separator: ""
这是Jekyll的bug导致的,这样虽然可以用pygments完成代码高亮,却又不能用excerpt取到文章摘要了。
最后我使用的是 Sunlight,支持的语言比较多,完全可配置,可定制,能支持Objective-C的高亮:
但是和我发表在CSDN上的文章使用的代码高亮插件不一样,我又想要使用这个Sunlight,就只能自己写个用正则查找替换的工具转了:
全文本替换工具Mac

显示分类

显示分类:
<h4>分类列表</h4>
	<hr>
    {% for category in site.categories %}
    <li class="category_list_item"><a href="/showCategory.html?categoryName={{ category | first }}">{{ category | first }}</a> ({{ category | last | size }})
    </li>
    {% endfor %}
显示所有的分类一般都没什么问题,主要在具体分类页面进行处理。
基于Jekyll的静态特性,这个地方处理起来不太优雅,我参考了其他人的做法,最后选择将文章列表储存在JSON里面:
var articleList = [{% for post in site.posts %}
		<span style="white-space:pre">	</span>{"title":"{{post.title}}",
			"url":"{{site.url}}{{post.url}}",
	<span style="white-space:pre">	</span>	"date":"{{ post.date | date:'%Y-%m-%d' }}",
			"excerpt": '{{ post.excerpt | strip_html | strip_newlines | truncate:170 }}'
			{% if post.categories != empty %}
			,
			"categories":[{% for category in post.categories %}"{{category}}"{% if forloop.last == false %},{% endif %}{% endfor %}]{% endif %}}
			{% if forloop.last == false %},{% endif %}{% endfor %}];
我在这里判断了文章有没有分类,如果没有分类的话,就不添加到这个JSON里了,另外说下post.excerpt:
  • excerpt 是获取文章的摘要信息,这个信息可以显示在文章列表里面
  • strip_html 是除去HTML标签,因为摘要里面不需要显示图片之类的,纯文本即可
  • strip_newlines 是去掉换行符
  • truncate 这个就是字面意思了,摘要的长度
然后在JS里面去取请求的参数,筛选出需要显示的文章,做法比较常规就不说了。
如果参数中有特殊符号(比如我就有这样的分类名称:cvs||svn)或是中文(比如“分享”),url就用encodeURI函数转义一下:
<a href="javascript:void(window.location.href=encodeURI('/showCategory.html?categoryName={{ category | first }}'))">{{ category | first }}</a>
取的时候用decodeURI函数去取。

strip_newlines无法去除换行符,或者遇到其他换行符之类的问题

比如我有遇到strip_newlines无法去除换行符的问题,如果去不掉的话,某些内容放进JSON的时候,自然而然的就出现问题了,因为不能连接字符串,但是又跨行了。strip_newlines只能去掉Unix的换行符,于是我就再一次使用了我之前写的 全文本替换工具Mac,做了一次替换:

实现分页

Jekyll本身对分页限制很多,只支持 HTML文件,不支持md,其次,对分类和标签的分页也不支持,这就很令人难受,只能将就用用了。
在_config.yml文件里面添加:
paginate: 10
paginate_path: "page:num"
paginate表示开启分页并设置每页的数量;paginate_path是指定分页时Jekyll寻找HTML文件的路径,比如这里设置为page:num,那么Jekyll在分页时,第一页还是你的博客的index.html,第二页就是/page2/index.html,第三页就是/page3/index.html。如果指定的path不存在会自动往上级目录找,直到根目录的index.html,或者这个参数没有设置的话默认值就是page:num。
在首页里面对文章进行分页,用一个简单的循环:
{% for post in paginator.posts %}
    <a href="{{ post.url }}">{{ post.title }}</a>
{% endfor %}
为了生成分页的链接,在根目录的index.html文件里面加上:
{% if paginator.total_pages > 1 %}
	{% if paginator.previous_page %}
		<a href="{{ paginator.previous_page_path }}">上一页</a>
	{% endif %}
	
	{% if paginator.next_page %}
		<a href="{{ paginator.next_page_path }}">下一页</a>
	{% endif %}
{% endif %}
如果想要显示所有的页码:
{% for page in (1..paginator.total_pages) %}
	{% if page == 1 %}
		<a href="/index.html">{{ page }}</a>
	{% else %}
		<a href="{{ site.paginate_path | replace: ':num',page }}">{{ page }}</a>
	{% endif %}
{% endfor %}
因为第一页是index.html,不是page1,所以要特殊处理一下。这样一个简单的分页就完成了。
附分页对象paginator的所有属性:
  • page 当前页码
  • per_page 每页文章数量
  • posts 当前页的文章列表
  • total_posts 总文章数
  • total_pages 总页数
  • previous_page 上一页页码 或 nil
  • previous_page_path 上一页路径 或 nil
  • next_page 下一页页码 或 nil
  • next_page_path 下一页路径 或 nil
本来在显示分类页面也准备加上分页的,后来一想,所有的文章信息已经存在JSON里了,做分页也是一个假分页,就作罢了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用Jekyll在GitHub Pages上部署博客 的相关文章

  • 我可以通过链接分享我的私人 GitHub 存储库吗?

    我在 GitHub 上的私人存储库中有一个 Java 应用程序 我想与没有帐户的人共享它 我在网站上没有找到任何与此相关的选项 有没有办法做到这一点 协作者只能是 GitHub 用户 无法在非 Github 用户之间共享私有存储库 您需要
  • 如何重命名 GitHub 网站上的目录/文件夹?

    我在 GitHub 网站上找到了一种方法rename https github com blog 1436 moving and renaming files on github一个文件并成功完成 我也找到了一种方法rename https
  • 通过 GitHub、Sonatype Maven 存储库提供 JavaDocs [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 尽管 Github 为 Java 开源项目提供了一个不错的家园 但与更成熟的开源托管场所相比 仍然缺少一些东西 到目前为止 我发现 S
  • 无法验证 GitHub 中的虚假电子邮件

    我已经创建了一个 GitHub 帐户 并且我不喜欢公开分享我的电子邮件地址 我厌倦了垃圾邮件 所以我关注了 GitHub保密您的电子邮件地址 https help github com articles keeping your email
  • git - 更新 fork 的 master 并将我的分支重新建立到它之上?

    我分叉了一个 github 项目 然后将其克隆到本地 然后我在新分支中做了一些更改my github the project repo 然后我添加并提交了更改 并推送到我的 github 存储库并提交了拉取请求 所有者已收到我的请求 并希望
  • Haskell Stack 从 github 安装包依赖项

    是否可以使用 Haskell 堆栈从 github 安装软件包的版本 例如在一个 cabal or a stack yaml文件 如何在 git repo branch revision 上指向依赖项 对于堆栈 The 的文档stack y
  • 自动将所有 GitHub 存储库镜像到 gitlab

    对于 GitLab 必须手动为每个存储库设置拉 推镜像 我想知道那里有any way可以自动将所有 Github 存储库同步到 GitLab 这样 当您在 GitHub 中创建新的存储库时 GitLab 中的存储库将自动创建 并充当拉取镜像
  • Composer 用于下载私有 GitHub 存储库

    我无法使用 Composer 下载 github 私人存储库 php composer phar update 我收到以下错误 The https api github com repos company private1 https ap
  • git config --global user.email 重新安装后不会让我更改电子邮件

    嘿 我完全重新安装了 Github 删除了所有文件 现在我再次安装了它 但是当我尝试设置它时 我遇到了一些问题 git config global user email 电子邮件受保护 cdn cgi l email protection
  • Git - 创建拉取请求而不分叉

    使用 git 已经有一段时间了 关于 git pull request 有很多教程和解释 其动机是什么等等 我遇到两种情况 1 分叉 git 仓库 我查看了一些公共 git 存储库并决定我想要做出贡献 所以我 通过以下方式创建重复的存储库F
  • 部分共享git仓库

    我是 git 新手 我想知道是否支持以下场景 如果支持的话如何支持 即用于设置和更新的 git 命令 可以从三个不同的地方获取存储库 本地 镜像 和 github mirror 完全镜像 local github 镜像 local 但 受版
  • BRISK 特征检测器检测零个关键点

    下面显示的 Brisk 探测器没有给我任何关键点 有人可以提出一个问题吗 我将尝试用一些代码解释我在下面所做的事情 include opencv2 features2d features2d hpp using namespace cv u
  • git 推送到 github 失败并显示“错误:pack-objects 因信号 967 死亡”

    我触发了这个命令 git push origin master 我得到这个结果 Counting objects 15626 done Delta compression using up to 4 threads error pack o
  • 如何从 GitHub 上彻底删除问题?

    是否可以从 GitHub 问题跟踪器中完全删除问题 不可以 github API 只允许您打开 关闭 重新打开问题 这是问题 API 文档 http developer github com v3 issues
  • PHP Github Pull 脚本错误“权限被拒绝(公钥)”

    我已经设置了一个 PHP 脚本来执行 GitHub 拉取 这包含在我的 Github 文件夹中 home mysite public html github github pull php 我的服务器已经有 SSH 公钥 就像我执行git
  • 如何从现有存储库中的分支创建新的 GitHub 存储库?

    I have master and 新项目分支机构 现在我想创建一个全新的存储库及其基于新项目分支的主存储库 背景 我有一个存储库 其中包含三个独立的应用程序 事情并不是这样开始的 仓库中最初只有一个应用程序 然而 随着时间的推移 业务需求
  • GitHub MarkDown:可以使用宏和变量吗?

    我一直在学习 github markdown 我有一个关于变量和宏的问题 是否可以定义变量或宏来防止重复打印文本块 用例是我有一个表生成一个大的超链接网格 链接如下所示 http www a big long big big long hy
  • 如何分叉一个已经分叉了上游的仓库?

    我想分叉 namecoin namecoin 但我已经分叉了比特币 比特币 后者是前者的上游父级 叉链是 比特币 比特币 gt vinced namecoin gt namecoin namecoin 当我分叉 namecoin namec
  • git:检查标签,修改某些内容,然后再次标记它

    我觉得我应该知道这一点 但我很困惑 我在 github 上分叉了一个存储库 我需要的是签出一个标签 称为 v1 0 5 修改文件上的语句 使用名为 1 0 5 的新标签 不带 v 重新标记该状态 然后执行对 master 进行同样的更改 让
  • 使用 PIP 从 Github 安装 Python 包

    我已经看到文档表明您可以通过以下方式使用 pip 安装托管 Python 包的 Github sudo pip install e git git github com myuser myproject git egg myproject

随机推荐