寫作到自動發表,用 GitHub 減少了四個步驟

8 February 2024

為了平衡寫作與發表,系統化寫作與發表的一體,是我想到的解決方案。這也是最後我選擇 Blot 的一個關鍵。

透過幾個優點,使用 GitHub 為橋樑,目前我在 HackMD 寫完文章,推送到 Github 之後, Blot 就會相對應的更新了。

在 HackMD 中自動整合 GitHub 實現版本同步在 HackMD 中自動整合 GitHub 實現版本同步

HackMD 可以直接將文件修改紀錄推送至 Github 之中,反過來要從 GitHub 拉文章近來也是可以,這種雙向的整合,在管理文件上非常方便。

同時 Blot 的 Git 庫存取,也可以跟 GitHub 同步,官方說明文件是透過輸入 Git 的指令實現。

採用 GitHub 當作 Git 庫,就是為了不要在終端-本地主機-存放太多資料,同時我也不喜歡輸入一堆指令(command)。因此,我的目標是當推送變更到 GitHub 後,GitHub 能自動更新 Blot 使用的 Git 庫,連帶更新網站

查了一些網路文章,自己嘗試了一下,如這篇文章一開始說的,現在這個目標已經實現,詳細的流程如下:

  1. 寫作:HackMD,Markdown 為編輯的主體,同步可以存擋文件。
  2. 文章存擋:GitHub,透過 HackMD 與 GitHub 的整合,直接推送至 Blot 在 GitHub 中的 repository。
  3. Blot 同步:GitHub Action 會直接把每次推送(commit)的更新,直接同步推送(push)到 Blot 的 Git 之中。
  4. 網站更新:Blot 收到 Git 的更新之後,直接更新網站。

雖然流程上有 4 個步驟,但對我來說是只有「寫作」-「推送」,而且在一個介面 HackMD 即可以完成。

Blot-GitHub 的整合架構

如果已經對 Git 很熟悉,其實透過指令跟本地資料夾管理,更新 Blot 所屬的 Git 是最簡單的,但我不喜歡這樣做。

我很容易忘記自己電腦到底裝了什麼,所以,基本上能發生在雲端的事情,我盡量都不在本地發生。

於是 GitHub 成為了我很重要的一個中介。

佛心的 GitHub 提供幾近無限制的免費服務,捨去使用本地資料夾的操作,可以把文件就存在 GitHub 之上。

根據 Blot 說明文件,在 Git 對於多點同步的支持下,使用者可以同步更新 Blot 與 GitHub 庫(repository)。

Git supports multiple remote URLs. This means you can use the same repository on Blot and GitHub.

由此可知,Blot 不是直接讀取 GitHub 上的文件,而是做同步更新的架構 Blot Git ⇌ GitHub。當一個發生改變,另外一個同時作動。

HackMD-GitHub-Blot 的架構

如果按照 Blot 原始設計,每次我們更新文件的時候,會是同步推送到上述的兩處(Blot Git 跟 GitHub),使用指令 git push --force 完成。

這跟我真實的流程有一點差異,因為我的文件管理核心在 HackMD,推送會直接更新在 GitHub,並沒有辦法同時推送到 Blot Git。

而由於上面說的 Blot-GitHub 架構,是同時有兩個 Git 庫,當我只更新在 GitHub 的時候,Blot Git 並不會自動更新,當然也不會作動到 Blot 架設的網站。

我實際上的運作模式,當加入了 HackMD 之後,變成了 HackMD ⇌ GitHub → Blot Git,HackMD 主動提供 GitHub 整合服務,我可以同步文件,但最多就是同步回 GitHub,並沒有辦法完成後段的 Blot Git 更新。

為了讓寫作跟發表一體,我選擇維持 HackMD 寫作跟同步 GitHub。

要完成的自動化目標在:當 GitHub 有更新的時候,自動同步推送至 Blot Git。

使用 GitHub 腳本自動更新 Blot Git

這裡就花了一點時間,因為我對 GitHub 熟悉度還不夠,但是一直有聽到 GitHub Action 可以幫助自動化。

在網路上做了點功課,輸入關鍵字 automation commit push changes 搜尋,1找到了一些文章,234了解到應該是使用 Workflow 去設定。需要創建 workflows 資料夾與檔案如下。

檔案名稱:<your-workflow-name>.yml

放置在:./.github/workflows/

然後根據官方文件,把 .yml 檔案的內容更新如下。

name: Push when commit

on:
  push:
    branches: [ master ]  # Replace ... with the branches you want to trigger upon.

jobs:
  job-name: # set your job name to something nice.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0  # all branches and tags
      - name: Set git identity
        run: |
          git config user.name 'github-actions[bot]'
          git config user.email 'github-actions[bot]@users.noreply.github.com'
      # ...
      # ADD YOUR GIT OPERATION STEPS HERE
      # ...
      - name: Push
        run: |
          git remote set-url origin https://Blot 登入帳號:Blot Git Key@blot.im/clients/git/end/Blot Git 名稱.git
          git push --force

幾個我自己修改的地方在 uses: actions/checkout@v4 看到一些文件都是用 checkout@v2 但我總是不成功,最後改成現在的版本,就能夠順利操作了。

另外就是特別提醒,因為 Blot 登入帳號使用 Email,其中 @ 的符號在 git 指令中,是需要轉換成 Unicode,所以請記得變成 xxx%40gmail.com 的形式,其中 %40 就來代表 @ 的。

修改過上述的兩個地方後,本來無法成功的自動推送到 Blot Git,就能夠順利運作了。

GitHub 免費版本夠 Action 用嗎?

先說結論,用到現在答案是「非常夠用」。

GitHub 真的是一個佛心的服務,只要是公開的 Repo 都沒有限制數量,而針對 Actions 有提供每月 2,000 分鐘使用額度。

上面 git 只有兩行操作指令,使用得量真的是非常的少,現在用差不多快要一個月,平均一天會更新 1-2 次,用量還不到 100 分鐘。

近一個月的 GitHub Actions 使用分鐘數近一個月的 GitHub Actions 使用分鐘數

看來純文字的概念建構,流量真的是非常精省。

小結:少了理由,專注思考是否寫作

暢銷書原子習慣不斷提醒,減少跟習慣間的阻力,可以增加養成習慣的成功率。我本來不以為意,但是實驗之後,現在認為的確頗有道理。

減少了三個步驟,寫作跟發表現在基本上就是在同一個平台—HackMD—完成,至少找到藉口的機會變少了,不能在用「麻煩」當作不寫作的理由,更有機會重新檢視:自己到底是不是真的想寫。

這是我想要很久的一種寫作環境,目前非常滿意,分享給你。

期許每個人都過上想要的生活。


  1. 好像以後可以使用 ChatGPT 或 Gemini 來幫忙。↩︎

  2. https://link.medium.com/NkA6C8kr0Gb↩︎

  3. https://www.reddit.com/r/github/comments/nzmikl/anyone_know_a_way_to_auto_commit_and_push_changes/↩︎

  4. https://openedx.atlassian.net/wiki/spaces/AC/pages/3378348233/Writing+a+GitHub+Action+that+pushes+commits↩︎

Latest Updated on 8 February 2024


相關文章
技術規格


2006 - © Eyewithouts, made with ♡ by Blot.im