Skip to content

core.hooksPath 是共用 checkout 的絕對路徑:從 worktree 推送時 pre-push 跑的是舊版 run-guards.sh #697

Description

@kiki830621

Problem

core.hooksPath 設成共用 checkout 的 .githooks 絕對路徑。從另一個 git worktree 推送時,git 在 worktree 的根目錄執行 hook,但 hook 檔本身取自共用 checkout——而共用 checkout 的 main 可以落後被推送的程式碼很多個 commit。

結果:pre-push 用舊版的 run-guards.sh 檢查新版的程式碼。

觸發過的實例(2026-09-29,#664 推送)

Impact

兩個方向都會發生,第二個比較糟:

  1. 假失敗(這次):舊 hook 呼叫已被刪除或改名的東西,推送被擋,花一輪全套測試(約 12 分鐘)才看到
  2. 假通過:被推送的程式碼新增了守衛(例如 Semantic Scholar API:Akashic 共用的金鑰與存取方式(往回、往前、相似作品、作者著作、書目查詢) #664 的 network-confinement),舊 hook 不知道它存在,就不會跑——gate 看起來綠,其實沒檢查新規則

Expected

pre-push 檢查的是被推送的那份程式碼自己的 hook 與守衛。

可能的方向(未決,僅供 diagnose 參考)

  • core.hooksPath 改為相對路徑 .githooks(git 以各 worktree 的根目錄解析),或
  • hook 內以 git rev-parse --show-toplevel 定位 run-guards.sh,而不是 $(dirname "$0")

另:#693 第 3 點處理的是同一個絕對路徑出現在公開文件裡的隱私面;本 issue 是它的功能面,兩者可以一起改,但判準不同。

Refs #664


Current Status

Phase: verified(R2:HIGH 0、MEDIUM 0;兩則 LOW 是 CLAUDE.md 的措辭,在 #703 的修正輪一起改)
Last updated: 2026-09-30 by idd-update

Blocking

  • (無)待使用者 /idd-close

Commits

  • f7cf1677(實作)
  • 354e2a2e(R1 修正);tag idd-697-verified

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions