Files
gitea/references/wiki-links.md
T
jiantw83 c40b561589 feat(wiki): 目錄頁專用存取庫、HASH 去除截短與 H 前綴
What:CONTENTS 成為第 15 種頁面類型,解析鏈為 JSC_WIKI_REPO_CONTENTS 到
JSC_WIKI_REPO,刻意不退回型別變數。hash-id 拿掉 8 碼截短與 H 前綴改寫,只留大寫
轉換,輸出完整 40 碼;空輸入改成用法錯誤。新增 page-name.sh、wiki-contents.sh、
migrate-wiki.sh 與 wiki-delete 子命令。

Why:H 前綴會命中 16 個首碼裡的 13 個,還丟掉第 8 碼,把有效熵壓到 28 位元,而且
全庫查不到任何理由紀錄。目錄頁的整列 upsert 原本 14 處只有一處寫成程式,同一段判斷
做 14 次,錯一次就少一筆紀錄。

How:頁名樣式仍收 H 加 7 碼的舊頁,遷移期間讀得到舊頁。wiki-contents.sh 建新頁時
剝掉範本的示範列,否則每個目錄頁第一次建立都會留一列佔位死連結。migrate-wiki.sh
預設只印對照表,--apply 先寫新頁、確認寫成、才刪舊頁;孤兒頁只列不猜,因為 SHA-1
不可逆,新頁名只能靠候選鍵正推。

Who:jsc-gitea
2026-09-02 11:02:07 +08:00

2.2 KiB
Raw Blame History

Wiki 頁之間的連結

寫 wiki 頁才需要這份規則。兩條規則任一條寫錯,連結會指向一個不存在的頁,畫面上看不出異常。

方向:顯示文字在左,頁名在右

Gitea 採 GitHub/Gollum 慣例:[[顯示文字|頁名]]。方向與 MediaWiki 相反。Gitea 原始碼(modules/markup/html_link.go)寫得很清楚:

MediaWiki uses link, while GitHub uses text … we prefer GitHub syntax

所以 [[PLAN_CONTENTS|我的計畫]] 會顯示成文字 PLAN_CONTENTS,連到一個叫「我的計畫」的頁——這是壞連結。要寫 [[我的計畫|PLAN_CONTENTS]]。

顯示文字與頁名相同時,用不帶豎線的 [[PLAN_CONTENTS]],這種寫法不會寫錯。

範圍:[[...]] 只在同一個 wiki 內解析

[[...]] 與 markdown 相對連結都只在目前這個 wiki 內解析。跨存取庫沒有 wiki 連結語法。

目錄頁全部住在 CONTENTS 專用存取庫,內容頁住在自己型別的存取庫。所以「同型別」不再等於「同存取庫」,判斷要看兩端各自解析到哪一個存取庫。

連結 同一個 wiki? 寫法
目錄頁之間(例:PLAN_CONTENTS → LOG_CONTENTS) 一定同一個:目錄頁都在 CONTENTS 存取庫 [[顯示文字|頁名]] 或 [[頁名]]
同型別的內容頁之間(例:PLAN_{HASH} → 另一頁 PLAN_{HASH}) 一定同一個:一個型別一個存取庫 [[顯示文字|頁名]] 或 [[頁名]]
目錄頁與內容頁之間,以及跨型別(例:PLAN_CONTENTS → PLAN_{HASH}、LOG_{HASH} → PLAN_{HASH}) 不保證:兩端各自解析,可能不同 wiki-url 給的絕對網址:[顯示文字](https://…/wiki/PLAN_…)

目錄頁解 JSC_WIKI_REPO_CONTENTS,內容頁解自己的 JSC_WIKI_REPO_{TYPE},兩端各解各的。只設 JSC_WIKI_REPO 時兩端會落在同一個存取庫,多設一個型別變數就分開了。所以這兩種連結一律用絕對網址:兩邊剛好同存取庫也照樣正確,不必分兩種寫法,也不必跟著環境變數改寫法。網址一律取自 tools/gitea.sh wiki-url,不要自己組路徑。