Community寫作與編輯github.com

LaughingisLaughing/git-repo-doctor

唯讀診斷並提供安全、可回滾的 Git 倉庫清理方案。零依賴 Python;以 Claude Code 技能的形式提供。

git-repo-doctor 是什麼?

此技能專門處理臃腫或損毀的 Git 倉庫,提供唯讀診斷與安全的清理建議。當 .git 目錄佔用大量空間,或是 `git gc`、`repack`、`fetch` 因中斷導致暫存檔案堆積時,此工具能識別問題並輸出具備回滾點的安全清理計劃。支援 Claude Code、Cursor 等代理平台,並提供標準輸出與 JSON 機器可讀格式。其核心安全合約是嚴格唯讀,僅執行 Git 查詢與檔案統計,所有破壞性操作僅以文字形式呈現在計劃中,需由使用者手動確認執行。

相容平台✓Claude Code✓Codex CLI✓Cursor
npx skills add LaughingisLaughing/git-repo-doctor

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

git-repo-doctor 是做什麼的?

唯讀診斷與安全清理顧問,專為臃腫的 Git 倉庫設計。

何時使用此技能

  • .git 目錄膨脹至數 GB。
  • objects/pack/tmp_pack_* 或 objects/??/tmp_obj_* 檔案持續增加。
  • git count-objects -v 顯示大量的 garbage 計數或數十萬個鬆散物件。
  • gc.auto=0,或 gc / repack / fetch 不斷被中斷。
  • 編輯器或編碼代理(Codex、Claude Code、Cursor、IDE 索引器)在掃描倉庫時崩潰或 OOM。
  • 使用者詢問如何安全地收縮、清理、修剪、垃圾回收或回收倉庫的磁碟空間。

如何執行

單一零依賴的 Python 3 腳本,嚴格唯讀。

# 診斷包含當前目錄的倉庫:
python3 scripts/git_repo_doctor.py

# 指向特定的 git 目錄,包括已重新命名或停用的:
python3 scripts/git_repo_doctor.py --git-dir /path/to/.git.disabled-xyz

# 機器可讀輸出(作為代理時可解析此格式):
python3 scripts/git_repo_doctor.py --json

# 跳過遠端可達性探測(離線或網路緩慢時):
python3 scripts/git_repo_doctor.py --no-remote

回傳內容

  1. 大小明細 – 明確垃圾 / 鬆散物件 / pack 檔案 / 可達歷史 / 不可達預估 / 磁碟空間裕量。
  2. 健康問題 – gc.auto=0、過期的 gc.log、工作目錄等於 $HOME、Syncthing 同步 .git、鬆散物件氾濫、殘留暫存檔案。
  3. 建議方案,為以下之一:
    • 路徑 A(可達歷史極小):製作安全性網包,證明其可還原,然後分層延遲刪除。
    • 路徑 B(歷史龐大):原地執行 git maintenance + gc/repack;若磁碟空間不足,先刪除垃圾再 repack。
    • filter-repo / BFG 提示:當可達歷史中有巨大 blob 時。
  4. 可供貼上、具回滾意識的清理計劃,附帶明確的回滾點。腳本會輸出指令但不會執行任何指令。

代理應如何使用輸出

  • 執行腳本,然後向使用者摘要說明大小明細、健康問題以及建議的路徑。
  • 呈現輸出的計劃,但不要自動執行其中的任何指令。清理是不可逆的;使用者必須確認每個破壞性步驟。
  • 始終確認 $GITDIR 的值,確保已建立並驗證安全性網包,並在使用者確定之前保留該網包。

安全合約

此工具絕對不會執行 gc、prune、repack、rm、reflog expire 或任何變更指令。它唯一執行的是唯讀的 git 查詢和檔案系統統計,且全部設有超時保護。每個破壞性動作僅以文字形式存在於輸出的計劃中,供人類審閱和執行。

決策邏輯(摘要)

條件建議
可達歷史 < 1 GiB 且小於總量的 10%路徑 A:製作網包 + 分層刪除 / 重建
可達歷史龐大且剩餘空間充足路徑 B:原地執行 git maintenance + gc/repack
可達歷史龐大但磁碟空間緊缺先刪除垃圾,再 repack
pack 物件少但 pack 檔案極大巨大 blob 提示(執行 git-sizer,考慮 git-filter-repo)

完整文件與範例報告請參閱 README.md。

相關技能