在多个远程Git站点托管Github pages博客

我的博客方案

我试过很多博客网站,体验太差。现在我是这样写博客的:

  1. 使用emacs 的org模式进行编辑。几乎所有文本工作甚至日程表都可以用org。不过这不是本次的故事。如果你 不用emacs(作为一个编辑器而言,确实有陡峭的学习曲线),你也可以用任何markdown编辑器;
  2. 使用Jekyll作为引擎,它可以把你用emacs编辑好的md文件(我通过emacs的org输出功能把org文件输出成了 markdown格式)自动转成静态html页面。Github支持Jekyll;
  3. 通过github的pages服务托管这些静态页面(其实是托管markdown和你的Jekyll配置)。这样你之前写好的 markdown就可以通过例如 drowzju.github.io这样的地址访问了,而且看到的是html文件。如果不喜欢 github.io,你也可以换成自己购买的其他域名。

简单说,就是编辑好markdown文件然后git push,你的博客就歘(CHUA!)地更新了。用喜欢的编辑器自由编辑,不必受限于各个别扭的博客网站,真是太畅快了。

如果你也想搭建一个这样的博客系,google 下“github pages“和”jekyll“,有大量的教程。Jekyll之外, Hexo是另外一种方案,据说比Jekyll更容易,你也可以尝试一下。

同时使用Github和其他Git站点托管博客

但是github有一个问题,就是它作为一个国外网站,始终在GFW的伟岸阴影之下,不能保证正常访问。即便能够访问,访问速度也确实慢。所以我考虑采用国内的git站点作为镜像。

本文要说明的问题,就是怎样用一个本地工作目录同时向两个远端的git站点(github和某国内站点)发布内容。

使用ssh免用户名登录

我们当然不想每次提交博客都还得输入github用户名密码。所以你要保证使用ssh方式访问,而且是免密码方式。请看教程,关于github如何免密码ssh登录:

https://help.github.com/articles/generating-ssh-keys/

其实就是生成ssh key并在git网站保存公钥。国内git网站也有相应功能,原理一样,不再赘述。

本地建立git工作目录并添加远端git 库

我在本地建立文件夹myblog,然后:

初始化

$ git init

添加github远程仓库。注意ssh方式访问必须是git@git… 这种写法,如果是https方式访问还是会需要输入用户名密码

$ git remote add github git@github.com:drowzju/drowzju.github.io.git

添加一个国内git远程仓库。我的国内托管站点是gitcafe。

$ git remote add gitcafe 'git@gitcafe.com:drowzju/drowzju.git'

更新本地目录内容

本地建立一个local分支并切换到local分支。

$ git checkout -b local

本地拉取最新内容。这里因为我的博客本质上是两个镜像站,内容都一样,所以任选一个就好。

特别说一下gitcafe 的pages服务有点别扭,一定是要从master fork一个gitcafe-pages 分支才行,所以这里是从之前定义的名gitcafe 的远程仓库拉取gitcafe-pages分支。

$ git pull gitcafe gitcafe-pages

或者

$ git pull github master

这样一来工作目录的内容就是最新的了。

本地写作markdown,并一次性发布到两个远程仓库

我是通过一个脚本full-commit.bat完成的。

     
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_github_rsa
ssh-add ~/.ssh/id_rsa
git add --all
git commit -m "Daily"
git push github local:master
git push gitcafe local:gitcafe-pages

解释一下。保证本次操作ssh访问的key(免用户名密码输入)。我两个git站点用了两个key(不是必需….):

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_github_rsa
ssh-add ~/.ssh/id_rsa

因为只是简单的博客发布,不是代码库要求那么高,所以这里我很粗暴地add –all并且很无聊地固定commit:

git add --all
git commit -m "Daily"

提交到两个远程库。

git push github local:master
git push gitcafe local:gitcafe-pages

本文所讲就是这样了。我的需求很简单,如果你有别的需要,也可以编写别的脚本。欢迎交流。



最后更新: 2015-05-08 13:43