如何透過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平台理論上應該也可以將整個網站編譯出來並預覽,但從沒試過。