如何透過GitHub在本站寫文章


背景

先看Git背景: Git 10 周年访谈:Linus 讲述背后故事

後來 GitHub 推出 GitHub Pages ,結合近年興起的 static site generator , 讓懂技術的部落客有非常powerful的工具來撰寫以前很難做到的部落格功能。

本站利用 Pelican 來製作部落格,有以下的優點:

  • 可用 reStructuredText, Markdown, 或 AsciiDoc 等等 簡易標記語言 撰寫
  • 因為用標記語言寫,可以自由搬移內容到各處/各服務。
  • 因為用標記語言寫,容易轉成其他格式,比方說HTML, PDF, 或是電子書等等。 (可利用 Pandoc 之類的程式進行格式互轉)
  • 支援用LaTeX打數學式
  • 支援插入片斷的程式碼(包含程式碼上色)
  • 支援插入整個檔案的程式碼(包含程式碼上色)
  • 很容易就可以 HTML/JavaScript/CSS 程式demo
  • 容易在網頁嵌入影片以及聲音檔
  • 減少JavaScript,增進瀏覽網頁的速度
  • 可自由控制廣告位置,以及如何呈現,或是不放廣告
  • 可自由插入網頁評論系統: Google+ comments, Facebook comments, Disqus, ...
  • 網站會根據螢幕大小做不同呈現(responsive web design)
  • 容易做SEO,以及可以指定Facebook分享時顯示的圖片及參數。
  • 支援多語系,同篇文章不同語言版本互相連結。
  • 幾乎可以這樣說:只有想不到,沒有做不到。

本網頁主要的repo是 userpages, 含網站template以及網站內容都在此。然後透過 Travis CI 自動編譯並上傳到 siongui.github.io

撰寫流程

有兩種方式,一種是pull request方式,一種是collaborator方式。

(1) pull request方式

  1. 首先註冊 GitHub 帳號
  2. fork 本站 repo, 利用 rst 格式寫文章,然後 pull request 提交。

(2) collaborator方式

  1. 首先註冊 GitHub 帳號
  2. 聯絡站主,站主將該帳號加為 userpages 的 collaborator,直接clone該repo, 直接對 userpages 新增/修改/commit/push。
  3. 此方式在commit前最好先git pull更新一下本機端clone的repo,若沒更新, 若有兩人以上同時修改並push,則需要做一個merge的動作。

如何寫文章

透過範例學習最快,本站每篇文章都有一個 在GitHub上編輯 的連結, 可連回到原始檔案,然後在點選 raw 看原始 rst 格式。

文章的放置位置以及語言

舉例來說,2015年4月21日的文章,就在 content/articles/2015/04/21/ 目錄(若該目錄不存在則自己創建)下新增一個該文章的檔案,檔名取為

SLUG%LANG.rst ,其中 SLUG 是網址上的顯示名稱, LANG 是語言

舉例來說,若新增一個檔案名為 content/articles/2015/04/21/post-on-this-site%zh.rst 則該文章的網址是 /zh/2015/04/21/post-on-this-site/ ,該文章的語言是傳統中文

若新增一個檔案名為 content/articles/2015/04/21/post-on-this-site%en.rst 則該文章的網址是 /2015/04/21/post-on-this-site/ ,該文章的語言是英文

文章內容大致格式

如何透過GitHub在本站寫文章
##########################

:date: 2015-04-21T03:53+08:00
:modified: 2016-01-05T04:06+08:00
:author: 某某某
:tags: Web開發, CSS, HTML
:category: Web開發
:summary: 透過GitHub平台協同撰寫網站
:og_image: http://....
:license: CC|MIT|BSD|Apache2.0 ...

(your main content here)
  • date :文章創建日期,可加可不加,不加的話則是用目錄裡的日期當成此文章日期
  • modified :文章修改日期
  • author :作者名
  • tags :可以有好幾個。
  • category :只可以有一個。
  • summary :文章摘要,此摘要即為 HTML meta description 以及 og:description
  • og_image :是此文被分享或貼到Facebook或Google+之類的社交網站上時,顯示的圖片網址。 (參考 [7])
  • license :此文章 and/or 程式碼的授權,可以是 CC, MIT, BSD, Apache 2.0, ...

tags, category, author, summary 為建議必填,其他欄位可視情形填或不填。

rst 格式怎樣寫可參考 [1] ,至於用LaTeX寫數學,可看 [2]

如何撰寫文章的更多細節,請閱讀 Pelican官方文件

注意事項

  • 每行建議不超過80個字母,一個中文算兩個字母。(非硬性規定)

  • 若不確定LaTex顯示出來如何,可先在 [3] 輸入看結果。 (參考 [4] 輸入數學符號)

  • 可參考 [5] 來寫 rst

  • 可利用 線上reStructuredText編輯器 (可線上預覽,但因為CSS不同,預覽與實際網站呈現會有些差異)

  • 亦可利用 Sublime Text + OmniMarkupPreviewer plugin 來撰寫文章並預覽,但同樣因為CSS不同的關係,預覽與實際網站呈現會有些差異

  • 標題下的 # 長度至少要跟標題長度一樣長,或更長,例如以下是錯誤寫法:

    [Math] The infamous Grasshopper problem
    ################################
    

    正確寫法是:

    [Math] The infamous Grasshopper problem
    #######################################
    
  • userpages 更改(commit並push到GitHub上)後, Travis CI 會自動編譯 並更新 siongui.github.io 內容。

SEO以及Facebook分享

網站SEO(意指容易在搜尋引擎被找到)有三個重點:

  • HTML title: 該網頁的title,必須配合搜尋關鍵字
  • URL:舉例來說,若網頁是談有關random number的文章,網址裡最好是: /2015/04/21/random-number/ ,將random number這兩個關鍵字包含在網址裡。 若是用 /2015/04/21/blog-post_21.html 之類的網址,將不利於SEO。
  • 日期:文章日期越新越好。

文章被分享或貼到Facebook或Google+之類的社交網站上時, 文章的顯示圖片網址是metadata裡的 og_image, 文章描述則是 summary 裡填寫的描述。 Facebook分享之詳情請參考 [7] 或是 Facebook官方指南

網站SEO更多詳情請看 [9], [10], [11]

預覽整個網站

本站目前只能在 Ubuntu Linux 上將整個網站編譯出來並預覽,詳情請看: README 。 Windows平台理論上應該也可以將整個網站編譯出來並預覽,但從沒試過。