Skip to content
⚙️自動化#041入門金字塔 · 做
工程師創作者Claude Code#Git自動化#夜間同步#內容版控

Git 內容自動夜間 Commit

用途

每晚自動偵測指定目錄的內容變更,組出語意化 commit message 後 push,讓排程任務寫入的內容不會因為忘記 commit 而版本不同步。

何時用

  • 適合:有排程任務(如晨報、發票辨識、電子報 ingestion)持續寫入 Git repo、想每晚統一 commit 加 push 的情境;創作者每天寫稿存進 Git 但常忘記 commit 時。
  • 不要用:需要審查的程式碼變更不要自動 commit——這個提示語設計給「內容/資料寫入」場景,不適合程式碼;或者你需要細粒度的 commit 記錄(每個動作一個 commit),自動化合併成一個夜間 commit 會讓 git log 變難讀。

Prompt

text
請執行夜間 Git 內容 Commit 流程:

今日日期:{{TODAY(格式 YYYY-MM-DD)}}
監控目錄:{{監控目錄(如 assets/0-foundation/inbox/ 或 docs/weekly/)}}
Repo 根目錄:{{Repo 根目錄絕對路徑}}

步驟:
1. 執行 git status,檢查 {{監控目錄}} 內是否有未 commit 的變更
   - 無變更:輸出「{{TODAY}} 無內容變更,跳過 commit」後結束

2. 有變更時:
   a. 只 add 指定的 {{監控目錄}}(不要 git add -A 把其他東西拉進來)
   b. 組語意化 commit message,格式:
      content({{目錄簡稱}}): {{TODAY}} 自動同步 — 新增X/更新Y/刪除Z 個檔案
      (例:content(inbox): 2026-06-03 自動同步 — 新增3/更新1/刪除0 個檔案)
   c. git commit -m "{{message}}"
   d. git push

3. push 失敗時:
   - 不要強制 push
   - 輸出:「Push 失敗,請手動執行:git push origin main」
   - 把失敗記錄 append 到 {{Repo根目錄}}/logs/nightly-commit-errors.log

限制:只操作 git,不修改任何檔案內容。

範例 / 變數

  • 填好變數:TODAY 填今日日期、監控目錄填 assets/0-foundation/inbox/、Repo 根目錄填 /Users/MH/Documents/git_saas/content-asset-system,跑完自動 commit 今天的 inbox 變更。
  • 變體(多目錄版):監控目錄改成清單(inbox/ weekly/ invoices/),步驟 2a 對每個目錄分別 add,讓 commit message 列出各目錄各有幾個變更。
  • 變體(搭配排程):把這個提示語存成 Skill,用 Claude Routines 設定每晚 23:30 自動觸發,完全不需要記得手動跑。

🎯 範例輸出(實測)

Claude Code 跑這句、把 {{變數}} 填成「TODAY:2026-06-04;監控目錄:assets/0-foundation/inbox/;Repo 根目錄:/Users/MH/Documents/git_saas/content-asset-system」的結果:

點開看 AI 實際輸出

步驟 1 — git status 檢查

text
$ git status assets/0-foundation/inbox/
On branch main
Changes not staged for commit:
  modified:   assets/0-foundation/inbox/newsletters/.ingested-threads.yaml
  modified:   assets/0-foundation/inbox/daily-briefing/2026-06-04.md
Untracked files:
  assets/0-foundation/inbox/newsletters/tldr-ai-2026-06-04.md
  assets/0-foundation/inbox/newsletters/the-rundown-2026-06-04.md

有變更,繼續執行。

步驟 2 — 只 add 指定目錄

text
$ git add assets/0-foundation/inbox/

變更統計:新增 2 / 更新 2 / 刪除 0 個檔案

commit message 組成:

text
content(inbox): 2026-06-04 自動同步 — 新增2/更新2/刪除0 個檔案

步驟 2c — commit

text
$ git commit -m "content(inbox): 2026-06-04 自動同步 — 新增2/更新2/刪除0 個檔案"
[main a3b7c2d] content(inbox): 2026-06-04 自動同步 — 新增2/更新2/刪除0 個檔案
 4 files changed, 87 insertions(+), 3 deletions(-)

步驟 2d — push

text
$ git push
Everything up-to-date → push 成功

執行完成:夜間同步完成,4 個變更已 commit + push 到 main。

💡 實測心得:pre-commit hook 如果有設定(如 yamllint、EOF 修正),夜間自動 commit 也會觸發,可能因為自動整理的 YAML 格式不符 lint 規則而失敗;建議測試一次「含 hook 的 commit 流程」確認不會卡關,或把夜間 commit 的目錄排除在 lint 掃描範圍外。

延伸

重點來了:夜間 commit 最常踩的坑是 git add -A 把不想進版控的暫存檔或 .env 也拉進來。這個提示語明確要求「只 add 指定目錄」,就是為了避免這個問題。

如果你有多個排程任務寫入不同目錄,可以對每個目錄設定獨立的夜間 commit,commit message 會更清楚,git log 也更好追蹤。

依場景分類 · 一鍵複製 · 持續擴充