介绍
现下大概每一个搞技术的人都会有一个技术博客,而GitHub又是广大搞程序的人都知道的一个著名代码托管网站,它的优点众多,其中之一就是GitHub Pages,他是用来给当前的project作介绍说明之用的,鉴于此我们可以将自己blog放置上去,代码交由GitHub托管,每次我们只需要发博文上去就好,对我们来说这是一件多么爽快人心的事啊。Octopress就是这样一款framework,它能部署在Github上,而且很方便使用,当把它配置好之后,几条命令就可以将博文发布上去,正如官网介绍的一样A blogging framework for hackers.
,像骇客一样的写博客,这很不错我很喜欢,具体的介绍可以去官网看。
这两者一结合就有了我现在的这个blog了,用它来记录和分享我的学习之路上点点滴滴。网络上有很多介绍安装与配置方法的文章,官网的Documentation写的也很好,推荐E文好的直接去官网。我在安装与配置中也遇到了各种问题,不过在Google的帮助下都一一解决了,你需要懂一些ruby(jekyll)
,并且会使用git
命令,还要使用markdown
来书写博文,这会让你觉得是在写代码而不是在写博文。不多说了现在记录下我自己安装与配置过程,供新手与日后自己需要时参考。
我主要参考的文章:
http://ishalou.com/blog/2012/10/15/how-to-use-octopress/
http://mrzhang.me/blog/blog-equals-github-plus-octopress.html
安装前准备工作
- 你需要一个GitHub的账号,注册不说了,已有的跳过。
- 你需要在你的机器上安装并配置
git
,官方文档说的很清楚,这要用到terminal
,也就是命令行,懒的人可以安装可视化工具GitHub,我建议还是使用命令行,以为之后众多操作都是必须使用命令行来完成的,而且这对于hacker们来说也不是什么难事。 - 为GitHub创建
SSH
Keys,官方文档,这一步很重要,不然之后使用rake deploy
命令时会出现如下错误:
1 2 |
|
由于我使用GitHub比较早,这个SSH
Key早就生成添加到了GitHub上,但是没有使用默认的名字,始终都是Permission denied。直到在GitHub上的文档中爬了很久才找到解决办法,o(╯□╰)o原来是生成的publickey没有添加到SSH
中。
4. 你的机器要有ruby环境,Octopress
要求的是ruby-1.9.2,现在ruby
最新的版本是ruby-1.9.3。可以使用ruby --version
命令来查看。如果没有该命令或者是版本低于1.9.2的话,那么就需要安装与升级ruby
。可以使用两种方法rbenv和RVM。具体使用方法请自行查看之,我是用的RVM
,在安装中遇到的问题就是我是用的是MAC OX MountainLion(10.8.2)系统,xcode的版本是4.6,没有gcc
编译器,用得是LLVM
,而ruby-1.9.3-p385在LLVM
下编译不通过。最终在Google和stackoverflow帮助下解决之。
安装Octopress
在terminal
下进入Octopress所要安装目录的上一级目录,敲入以下命令:
1 2 3 4 5 |
|
到此Octopress在本地已经安装完毕,但是还都是默认配置,而且没有发表博文。但是你可以通过一下命令来生成并预览一下原始的界面:
1 2 |
|
接下来打开浏览器访问http://127.0.0.1:4000就可以看到页面啦! 退出预览当然是Ctrl+C了。
Octopress简单配置
此时在terminal
下使用‘ls’命令查看目录结构为:
1 2 3 4 |
|
\_config.yml
、Rakefile
、config.ru
和config.rb
就是四个配置文件了,我们修改配置主要是在\_config.yml
上进行的,其他的三个一般不需要我们去直接管理。\_config.yml
的配置分为三个部分:
- Main Configs,配置一些博客的基本信息,标题URL什么的;
- Jekyll & Plugins,这里是jekyll和一些官方插件的配置;
- 3rd Party Settings,这里是第三方插件配置,我们之后自己添加的插件配置信息建议都放在这个部分中。
具体说明请看官方Document。
注意:每次做完配置文件的修改之后都要使用
rake generate
来重新生成html来使配置生效,而简单修改页面html则不需要重新生成,在预览状态下直接刷新页面就可以了。
发布博文
博文有两种一种是post一种是page,具体有什么区别请google之。 发送博文只需要在当前目录下:
1 2 |
|
使用喜欢的编辑器打开source/_post/yyyy-mm-dd-my-first-blog.markdown进行编辑,书写博文。
1 2 3 4 5 6 7 8 9 |
|
开头两个下划线之间的部分是yaml
头,用来告诉Jekyll怎么处理你的posts或者是pages,在这里你可以对你的post或者page做一些设置,比如添加作者,category,是否允许评论等。
在后面就是你自己要写的东西啦,当然是使用markdown
来写了,当然它也支持HTML
。markdown
很简单,还不会的看这里,语法说明。
写完保存generate preview就可以了。
部署到GitHub
现在到了最关键的时候了,就是将Octopress部署到GitHub上去。从官方文档了解到,部署到GitHub上有两种一种是使用GitHub Pages
,这种在访问时使用的url为http://username.github.com
,username为注册的GitHub用户名,你需要在GitHub上建立名字为username.github.com
的repository
。第二种是使用GitHub Project pages (gh-pages)
,这种在访问时使用的url为http://username.github.com/reponame
,reponame为你在GitHub上建立的repository
的名字,这个名字可以随便写,将来生成的静态html会被push到该repo下的gh-pages
分支中。
我个人的理解是GitHub建立了这两种方式,第一种是用来介绍你这个GitHub的,所以每个账号只能有一个,而第二个是用来介绍你的project
的,而你可以建立多个repo,所以也就可以有多个blog了,虽然url有点复杂,不过Octopress也提供了绑定自己域名的方法,自己目前还没有域名所以使用的是默认的,这一部分自己没有试验过所以就不贴上来了,具体的查看官方文档。鉴于此我使用了第二种方式来将blog部署到GitHub上。
步骤:
- 先到GitHub上创建名为
geekerprobe
的repo。 - 因为使用第二种方法我们要将blog放在
username.github.com
的子集目录所以我们要在本地将目录也设置为子集目录,不然会出现“Sorry!I can not find /”的错误,如果使用第一种方法则跳过此步骤,因为默认就是没有子集目录的。
1 2 |
|
这条命令会修改\_config.yml
、Rakefile
和config.rb
中的有关路径部分的设置,并将实际文件进行剪切移动操作,以适应路径的改变。而且在本地预览时也要使用子集目录来访问预览http://127.0.0.1:4000/geekerprobe。
- 接下来就是将blog部署上去了
1
|
|
会提示你输入一个形如[email protected]:username/geekerprobe.git
的地址,那么就按照这种形式输入你自己的repo的地址,这个地址可以在GitHub上你的repo的SSH文本框中得到,粘贴过来就好。
回车确定,等待片刻提示成功就可以了。
这时查看目录会发现多了一个_deploy的文件夹,这个文件夹是一个git库,指向了GitHub上你的repo的gh-pages
分支。同时你的repo的gh-pages
分支在GitHub上也已被创建了。
- 接下来生成并push博文到GitHub上
1 2 |
|
如果你的GitHub的SSH Key
没有设置或者设置错误的话,此时会出现权限不允许的错误。看到成功时就说名部署工作已经完成了,恭喜你赶紧到浏览器访问一下你的url试试看吧。
到此基本的工作已经做完了,你的blog已经成功部署到GitHub上了并且可以正常使用了。
使用发布博文
1 2 3 4 |
|
到此,你可以离开此页了,如果还要看其他设置的话,请看下去,我觉得这还是挺有用的,他将你的posts也同样备份到GitHub上,下次在你换了一个环境或者电脑后,就可以直接clone
下来或者pull
合并,免去博文与各种配置丢失。
备份Octopress到GitHub
此处使用的都是git
命令,对git
命令不熟悉的请看这。
首先/geekerprobe这个目录我们是从Octopress的GitHub上clone
下来的,所以他本是就是一个git
库,可以通过cat .gitignore
查看该目录下被排除在git
库外的文件以及目录。
这些我们在clone
之前就已经由作者做好了。我们需要做的是:
1 2 3 |
|
这样你去你的GitHub上就可以看到你的repo又多了一个site分支,并且有了文件也有版本记录。
这里说一下我理解到的git
的简单原理,我也是刚刚接触到git
之前都是使用subvision
的,通过配置这个blog有了一点体会,但是比较浅显,有不对之处欢迎指出。
在一个git
库中会有文件记录你所有对库(working dir)中文件的增删改,类似于svn
,可以使用
1
|
|
来查看当前的所有文件改动。
之后将显示出来的有改动的文件add
到缓冲区(index),通常我都是
1
|
|
将所有改动都add
到缓冲区,但这只是临时的并没有提交到remote端,也没有被提交到上次提交后的状态下。
然后就是将缓冲区的内容提交到上次提交的状态(HEAD)下
1
|
|
这些引号中的文字就是类似于svn
中的版本改动说明了,现在对文件的改动依然没有提交到remote端。接下来
1
|
|
到此本地的版本已经提交到GitHub。
Octopress拓展增强
要想使Octopress拥有更强大的拓展请参考一下文章: