Communityライティング&編集github.com

git-repo-doctor

肥大化したGitリポジトリを読み取り専用で診断し、ロールバック可能な安全なクリーンアップ計画を提供します。依存関係ゼロのPythonスクリプトで、Claude Codeスキルとして提供されます。

git-repo-doctor とは?

git-repo-doctor は、肥大化または破損したGitリポジトリを診断し、安全でロールバック可能なクリーンアップ計画を提供する読み取り専用ツールです。このスキルは、.gitディレクトリが数GBに達している、tmp_pack_*やtmp_obj_*ファイルが蓄積している、git gc/repack/fetchが頻繁に中断される、エディタやコーディングエージェント(Claude Code、Cursor、Codexなど)がリポジトリスキャン中にクラッシュする、あるいはユーザーがリポジトリのディスク容量を安全に削減したいと尋ねた場合に特に有用です。 依存関係ゼロのPython 3スクリプトとして提供され、Gitクエリとファイルシステム統計のみを実行し、gcやpruneなどの破壊的コマンドは決して実行しません。主な出力は、(1) サイズ内訳(明確なガベージ、ルースオブジェクト、パック、到達可能履歴など)、(2) 健康上の問題(gc.auto=0、古いgc.log、Syncthingが.gitを同期しているなど)、(3) リポジトリの状態に応じた推奨パス(PATH A: バンドル+段階的削除、PATH B: インプレースのgit maintenance+gc/repack)、(4) ロールバックポイントを含む実行可能なクリーンアップ計画です。エージェントは出力を要約してユーザーに提示し、致命的なコマンドは人間が確認するまで自動実行してはいけません。

対応✓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に質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

git-repo-doctor は何をしますか?

肥大化したGitリポジトリのための読み取り専用診断+安全クリーンアップアドバイザー。

このスキルを使用するタイミング

  • .git ディレクトリが数ギガバイトにまで肥大化している。
  • 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. サイズ内訳 - 明確なガベージ / ルースオブジェクト / パック / 到達可能履歴 / 到達不可能推定 / ディスク余裕。
  2. 健康上の問題 - gc.auto=0、古い gc.log、$HOME と等しいワークツリー、Syncthingが .git を同期している、ルースオブジェクトの氾濫、残存テンポラリファイル。
  3. 推奨事項(以下のいずれか):
    • PATH A (到達可能履歴が小さい): セーフティネットとしてバンドルを作成し、復元できることを確認してから、段階的かつ遅延削除を実行。
    • PATH B (履歴が豊富): インプレースで git maintenance + gc/repack を実行。ディスクが逼迫している場合は、最初にガベージを削除。
    • filter-repo / BFG ヒント: 巨大なブロブが到達可能履歴に存在する場合。
  4. コピーしてすぐ使える、ロールバック対応のクリーンアップ計画(明示的なロールバックポイント付き)。スクリプトはコマンドを表示するのみで、一切実行しません。

エージェントによる出力の使用方法

  • スクリプトを実行し、サイズ内訳、健康上の問題、推奨されるPATHをユーザーに要約して提示します。
  • 表示された計画を提示しますが、その中のいかなるコマンドも自動実行してはいけません。クリーンアップは不可逆的であり、人間が破壊的な各ステップを確認する必要があります。
  • 常に $GITDIR の値を確認し、バンドルが作成・検証されていることを確認し、ユーザーが確信するまでバンドルを保持してください。

安全性に関する契約

このツールは決して gc、prune、repack、rm、reflog expire、またはその他の変更コマンドを実行しません。実行するのは読み取り専用のGitクエリとファイルシステム統計のみで、すべてタイムアウトで保護されています。破壊的なアクションはすべて、人間が確認して実行するために、印刷された計画の中にテキストとしてのみ存在します。

決定ロジック(概要)

条件推奨事項
到達可能 < 1 GiB かつ 全体の10%未満PATH A: バンドル + 段階的削除 / 再構築
到達可能が大きく、空き容量が十分PATH B: git maintenance + gc/repack をインプレースで実行
到達可能が大きく、ディスクが逼迫最初にガベージを削除し、その後 repack
パックされたオブジェクトが少ないがパックサイズが巨大巨大ブロブヒント(git-sizer を実行、git-filter-repo を検討)

完全なドキュメントとレポートの例については README.md を参照してください。

関連スキル