用 GitHub issue 寫博客很好,但我要放棄了

news/2025/12/7 12:45:24/文章来源:https://www.cnblogs.com/bgzo/p/19317949

這曾經是一個比火熱的寫作方式,至少在 2020 年是如此,我也是聽、看 laike9m 和 yihong618 的項目慢慢摸索的,它有很多優點,比如至少解決了如下的問題:

  1. 文章託管:所有文件放在 GitHub,他的穩定性至少要比你電腦的壽命要長;
  2. 圖片引用:所有本地寫過博客的人一定頭疼過如何上傳圖片,這方面不贅述了;
  3. SEO 索引:GitHub issue 自帶 SEO 索引,會被瀏覽器抓取;
  4. 評論功能:你不需要折騰、嵌入評論插件,完全可以用 GitHub 自帶的那一套;

好處應該還有很多,比如全文搜索和標籤管理,這裏就不贅述了,讓我講講爲什麼我要放棄它吧。

「寫作不流暢」

如果你要寫一篇文章,你的第一步應該是什麼?是不是像我一樣打開 Obsidian、Logseq、或者蘋果備忘錄?甚至打開一個記事本就直接開始寫了?

寫到這裏,答案應該明瞭了,總之,不可能是打開 GitHub,然後點擊 Issue,再點擊 Create,然後再寫,真要結合國內的網絡情況,想寫的東西早就忘記了。所以過去的幾年裏,我都是本地寫好了,然後檢查一遍,最後上傳到 GitHub Issue 裏面。

這當然是一個不錯的主意,但仍然有問題:如果有一天你發現文章有些地方寫的有紕漏,然後直接在 issue 裏面改了,然後就發佈了,那你本地的文章怎麼辦?是不是還得改一遍?文章的一致性非常難保證。

反覆的編輯和校對會把所有表達的慾望耗盡,最後什麼也寫不出來。

「污染 GitHub 工作流」

首先,issue 的誕生就不是用來寫博客的,寫博客只是 issue 的一種用法,用於追蹤定位問題,換種嚴肅的說法就是,這本來就是一種邪修的路子,早晚會出問題。

比如我想看自己創建過的 issue,我們可以去 https://github.com/issues/created, 但因爲你拿 issue 做博客了,所以這裏默認全都是你還處於打開狀態的博客,你當然可以通過 -repo:xxx/blog 這個搜索參數來過濾你的統計結果,但這總不如默認提供來的直觀、方便。

然後,還會有更多不可預料的副作用,比如官方有一個跨項目的 issue 聯動功能,就是如果你在項目 A 的 issue 裏面引用了項目 B 的 issue,雙方的 issue 時間線裏面就會出現一個雙向鏈接 [1],這對解決過定位共性問題有幫助,但如果不是爲了解決問題,這個功能就有點「濫用」的味道。

試想,如果我把一個熱門的項目全都重定向到我的博客,我當然可以獲得海量的流量,但我離封號也不遠了 😊 如果裁決人是你,「要不要封」這件事情一定也很明瞭。

總之,你沒有選擇,只要 GitHub 做更多相關的集成操作,那麼對你來說就是更多的負擔。

還有更好的方式嗎?

想說的話說完了,這就是我的博客 https://blog.bgzo.cc 停更快一年的主要原因。至於未來在哪,很難說,因爲 GitHub 已經實現了近乎博客需要的所有功能了,如果要放棄它,你不得不重新實現一遍我在開頭說的那些功能。

Sounds hard really.

別忘了我們的初衷,只是想寫點能被保管時間久點的東西,或是愉悅自己,或是愉悅他人,而不是克隆一個成熟的科技輪子。

後話:談談項目的實現細節和我博客的後路

閒話終於寫完了,可以寫點代碼相關的東西了🥰

首先我想說實現整個項目很蠻有趣的,我在 GitHub issue 上寫博客,然後通過每日的 CI 定時的拉取數據到倉庫博客目錄,然後自動關聯來源 issue,這樣甚至可以無縫接入 https://utteranc.es/, 完美地把自己的 issue 內容和評論,用 Github Pages 展現出來。

這對 4 年前,或者 5 年前的自己來說還挺酷的,那個時候還沒有 AI ,因此完全是看着別人的項目代碼,然後摸石頭過河。

20220104 第一版發佈

https://github.com/bGZo/blog/commit/428035c7167ce2899e4db9fb5d1d006d60829cc3

當然剩下的博客框架久隨便選了,但是我已經用過了 hugo、hexo 和非常多在線工具,對 GitHub 自帶的 jekyll 還不熟悉,所以自從看了這位老哥的博客,我就動手開始模仿了起來:

via: https://dzhavat.github.io

這是我模仿的結果:

內容獲取

設計有幾點約定:

  1. 用標籤來進行 issue 分類,比如我的 postthreadsthoughtsletters 等等,沒有分類的標籤不會出現在博客裏面;
  2. 自定義標題需要寫在文內,常規的路由名字會用 issue 標題加中線符號進行組合;

剩下的就是用 PyGithub 獲取 issue 列表和內容,拼湊出 jekyll 需要的格式了,核心代碼有:

def output_label_articles(_repo, _name, _label):issues = _repo.get_issues(labels=[_repo.get_label( _label )],creator=_name,state='open')

自動化 CI 更新倉庫

上面我們把腳本確定好,然後在 .github 內部創建好 yaml 文件,主要是制定運行日期,比如東八區 0 點,就是對應的 UTC+0 的 16 點, 核心代碼有:

on:workflow_dispatch:push:branches: [ main ]schedule:- cron:  '0 16 * * *'

CI 的思路也簡單粗暴:先刪掉當前的緩存文章,再執行一遍腳本即可,如:

- name: Delete All Old Postrun: |rm -rf _posts/
- name: Sync issue to repositoryrun: |python3 utils/sync.py -t ${{ secrets.G_T }} -p bGZo/blog posts thoughts letters
- name: Proof articlerun: |python3 utils/proof.py
- name: Convert Text to Traditional Chineserun: |python3 utils/stconverter.py _posts -t

除了 CI,還能通過 GitHub 自己提供的 ISSUE_TEMPLATE 來簡化 issue 的創建過程;

博客評論:giscus

因爲 https://utteranc.es/ 天然就是用 issue 來做評論存儲的,所以我們只需要在腳本構建中,加入博文和 issue 的綁定關係,並且嵌入如下代碼,即可生效:

<script src="https://utteranc.es/client.js"repo="bgzo/blog"theme="preferred-color-scheme"issue-number="{{ page.number }}"crossorigin="anonymous"async>
</script>

當然還有幾種選擇,如:

  • utterances
  • gitalk: not support name matching;
    • https://github.com/gitalk/gitalk.github.io/blob/master/index.html
    • https://github.com/gitalk/gitalk/issues/1

20230304

博客美化

沒啥用,但是確實自認爲美化了好幾版,就當看個樂呵吧。

20230128 字體換了好幾波

最開始喜歡用微軟雅黑,但是雅黑不是襯線字體,後面就換成了 lxgw-wenkai-webfont,但楷體不符合中國人的閱讀習慣,最終還是換回了宋體(Noto Serif Simplified Chinese - Google Fonts)。

20230131 自動替換半角符號

因爲之前敲代碼的關係,標點符號全部設置的是半角,這讓中文排版最終糊成一坨,所以最好在發佈的時候替換爲全角符號。

20230228 增加黑暗模式

抽空修整並優化了下博客的兩個小功能(夜間模式和評論功能),夜間模式着重優化下圖片遮罩,防止圖片在夜晚環境過亮(Brightness of img is too dazzling in dark mode),當然一開始沒想到加這些功能只需要幾行代碼😂,我果然還是很厲害的👍(欠下的技術債 -1);

via:

  • Dark Mode: Reduce image brightness & contrast · Issue #618 · WordPress/twentytwentyone · GitHub
  • https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme

還可以優化的點:

    • 最好支持鍵盤快捷鍵的支持,比如:
      • https://player.fm with ?
      • https://github.com with ?

未來

前面兩節已經寫清楚了,未來不會再在 issue 裏面寫博客了,但這裏應該也不會閒着,我會從上游 (https://github.com/bGZo/vault) 把我一些折騰的文章拉取過來。然後再在這裏進行展示。

當然,這個分支我會保留,感興趣的人可以來這個分支抄抄作業:

而且如果你不在意我開頭說的兩個我認爲缺點的話,GitHub issue 寫博客還是最好使的,不僅僅是背靠巨硬,你懂的。

Source via: https://note.bgzo.cc/labs/1269-archive-blog-written-by-github-issue


  1. https://docs.github.com/en/issues/tracking-your-work-with-issues/learning-about-issues/about-issues#about-integration-with-github ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/991391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P11580 [CCC2020] Escape Room

洛谷 发现直接从起点开始不好处理,可以考虑从终点倒过来处理。 假设目前在位置 \((x,y)\) 那么下一次一定是选择值为 \(x\times y\) 的区域。 那么我们开按照当前区域的值存下这个区域的位置,使用广搜处理,记录每一…

用 Astro 重做網站這件事

Astro 是什麼 核心思想是羣島架構,不同與傳統 VUE 的單頁應用,而是對於不用頁面按需加載,在網頁加載速度和架構兼容性上來說是一流。 模板的注入類似 Jekyll,但是比前者更加靈活。 Bun 是什麼 是用 Zig 語言實現的…

周边的车间厂房工厂通风降温工业冷风机源头厂家,有热源的车间通风降温/铁皮厂房车间降温/铁皮房车间厂房降温工业冷风机供应商有哪些

【苏州讯】随着全球制造业对生产环境与能耗成本的日益关注,工业厂房的通风降温问题已成为影响生产效率与企业可持续发展的关键因素。近日,记者走访了位于苏州的工业通风降温设备制造商——苏州蓝美达机电有限公司,深…

P6875 [COCI2013-2014#6] KRUŽNICE

洛谷 由样例可以知道,一个圆只贡献一个区域,而一个圆在中间被几个圆完全连接时会被分成两个部分,计算两个贡献。 那么我们很容易想到先按照左端点排序,在左端点相同时,比较半径大小。 然后从后向前连接,如果前面…

美化 BroadcastChannel

原項目設計很新穎,用 Cloudflare / Netlify / Vercel 等平臺天然支持 SSR 特性,完成了原網頁 https://t.me/s/ 的代理工作。最重要的是,這些平臺作爲中間轉發(代理),可以直接讓國內訪問到這部分內容(受衆 ++)。…

克服EMD端点效应的齿轮箱故障特征识别方法

一、EMD端点效应问题解析 1. 端点效应成因 经验模态分解(EMD)在处理非平稳信号时,通过迭代筛选极值点生成本征模态函数(IMF)。但在信号两端,由于无法确定极值点的发展趋势,导致:端点处极值点缺失,筛选过程产生虚假…

2025最新绿色低碳工厂建设五大服务商/厂家推荐!工业智能化升级权威指南,助力企业实现双碳目标与高效生产

引言 随着全球工业4.0进程加速与“双碳”战略深入推进,绿色低碳工厂建设已成为制造业转型升级的核心议题。据中国信通院《中国数字经济发展白皮书》显示,2024年我国智能制造渗透率达48.2%,但工业能耗强度仍高于发达…

北京上门回收名家字画 专访北京丰宝斋负责人徐亚南

初冬的丰宝斋,晨光透过老字号的雕花木窗,洒在一幅刚展开的清代山水卷轴上。北京丰宝斋负责人徐亚南正戴着棉纱手套,用放大镜细细审视画角的题款。“这些老物件带着几代人的温度,上门回收不仅是做交易,更是接下一份…

P6000 [CEOI2016] match

洛谷 对于暴力写法,我们很容易想到一个 \(O(n^2)\) 的暴力。 我们可以先从左到右枚举需要配对的字符,然后从后往前去找到一个合法且相同的字符配对。 对于怎样才算合法,我们通过此部分内部是否合法,以及前面是否有…

MultiButton移植记录

使用记录 使用PA0引脚,电路图如下,使用GPIO内部下拉。实际测试,很稳定,没有误触发,单击、双击、长按很稳定。移植记录复制multi_button.c和multi_button.h到工程中,实现GPIO的初始化、读取。void key_init(void)…

Hugging Face 论文页面功能指南

在飞速变化的研究世界中,紧跟最新进展至关重要。为帮助开发者与研究人员把握 人工智能 前沿动态,我们推出了 Daily Papers 页面。自上线以来,Daily Papers 已收录超过 1 万 篇由 AK 与社区研究者精选的高质量论文。…

北京上门回收老酒名酒茅台五粮液

您家里是否存放着一些陈年佳酿,或是亲友相赠却不知价值的名酒?它们或许静置于橱柜一角,或收藏于箱底,随着岁月流逝,其价值可能已悄然攀升。京城亚南酒业,立足北京多年,专注于老酒、名酒的专业上门回收服务,为您…

P5202 [USACO19JAN] Redistricting P

洛谷 首先我们设更赛牛为加一,荷斯坦牛为负一。 这样通过前缀和就可以得到这一组是否需要增加一。 设 \(dp_i\) 表示以 \(i\) 为末尾,最少的分区。 那么方程式就为: \[$ dp_i=dp_j+(pre_i-pre_j\le 0) $\]然而表达式…

详细介绍:数据结构5:二叉树

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Excel 公式

Excel 公式 Excel 要将 A1 和 B1 的数据拼接成 (A1,B1), 格式,公式如下: ="("&A1&","&B1&")," 公式拆解说明公式片段 作用说明"(" 固定开头文本,生成左半…

P10602 [CEOI 2009] Harbingers

洛谷 我们可以考虑使用动态规划来解决。 在线性情况下,我们可以直接将状态设为 \(dp_i\) 表示走到 \(i\) 号点的时候的最小路程。 可以得到状态转移方程: \[$ dp_i=\min(dp_j+(l_i-l_j)\times v_i+s_i) $\]其中 \(l_…

2025 Newest Autel BMW G-Chassis IMMO Add Key (1-Year License) for IM508/IM608/IM1/IM2

Solving BMW IMMO Programming Headaches: The 2025 Autel Solution for G-Chassis Vehicles For European and American BMW owners and mechanics, the challenge of adding keys or programming IMMO systems can f…

Go 1.25 发布:性能、器具与生态的全面进化

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

P6173 [USACO16FEB] Circular Barn P

洛谷 由于环非常难处理,但是这个数据范围又很小,所以很容易想到枚举一个谷仓的位置,然后以这个地点为起始点使用动态规划。 为了使转移方便,我这里选择了逆时针处理这样计算这一段奶牛的路程。 我们定义 \(dp_{i,j…

为数字文明奠基:论通译院-价值星图-叙事舞台架构作为价值实践的元操作系统

论文标题:为数字文明奠基:论通译院-价值星图-叙事舞台架构作为价值实践的元操作系统 摘要: 在价值多元且快速流变的数字时代,传统旨在寻求或定义一套普适、永恒价值规则的AI伦理与治理范式面临根本性困境。本文提出…