使用Hugo Import一键迁移Jekyll
国庆长假期间,给Hugo提了几个PR,其中最主要的一个是给Hugo增加了内置的Jekyll迁移工具。这样之前的Jekyll用户可以通过一个简单的命令就可以将网站转化成Hugo站点:
$ hugo import jekyll your-jekyll-dir target-dir
得益于Hugo代码可读性非常好,原来计划需要几天来完成的功能1天左右的时间就完成了。完整的PR过程请见:https://github.com/spf13/hugo/pull/1469
Hugo Import
主要实现了将原来的Jeklly网站一键转换为Hugo网站,具体实现了如下功能:
- 生成新的Hugo站点结构。(hugo new site)
- 读取Jeklly的_config.yml,相应内容转化到Hugo的config.yaml。
- 转换所有MarkDown的文章。(具体转换规则见下文)
- 拷贝Jekyll其他目录及文件到Hugo的static目录。
@bep在他的OS X上做了一些测试:
$ hugo import jekyll qrush.github.com qr2
Importing...
Congratulations! 72 posts imported!
Now, start Hugo by yourself:
$ git clone https://github.com/spf13/herring-cove.git qr2/themes/herring-cove
$ cd qr2
$ hugo server -w --theme=herring-cove
MarkDown文章转换规则
Hugo和Jekyll都是使用MarkDown来写文章的,文章内容基本上是兼容的,除了一些FrontMatter的细节和局部细节。Hugo Import Jekyll主要的转换规则如下:
- 保持原Jekyll文章目录结构及文件名不变,将文章拷贝到了content/post目录下。
- 尽量保持原Jekyll文章链接地址不变,在文章的FrontMatter自动填入url字段。
- date字段转换成Hugo要求的time.RFC3339格式。
- draft字段自动生成。
- 删除layout字段。
- category字段转换成categories字段。
- excerpt_separator智能替换。(比如: <!--more-->)
- 删除
{% raw %}{% endraw %}
标签。 - 替换
{% highlight %}{% endhighlight %}
标签为 {{< highlight >}}{{< / highlight >}}
代码
import.go:
https://github.com/spf13/hugo/blob/master/commands/import.go
import_test.go:
https://github.com/spf13/hugo/blob/master/commands/import_test.go
我fork的Hugo Repo(我的最新改动都在这里):
https://github.com/coderzh/hugo
最后
这个功能将会在下个正式版推出,现在需要使用的同学自行pull最新的Hugo代码编译吧:
$ go get -u -v github.com/spf13/hugo
欢迎试用,并且提出意见或建议!谢谢!