想像一下:我正在參加一場技術面試,對自己目前的回答很有信心。然後面試官瀏覽了我的 GitHub 個人資料,問了一個看似無辜的問題:
我注意到您主要在工作時間推送程式碼。能跟我講講您的開發工作流程嗎?
我愣住了。
不是因為我做錯了什麼,而是因為我突然意識到,我們的提交時間戳在多大程度上揭示了我們的工作習慣。那一刻,我明白了,我的 GitHub 貢獻圖不僅僅展示了我的程式設計活動——它還在不經意間向全世界播報了我的工作日程。
這個面試問題讓我開始思考:如果開發人員想要更好地控制提交的時間,該怎麼辦?
身為開發者,我們生活在一個透明的世界。我們的 GitHub 個人資料就是我們的履歷,我們的貢獻圖表就是我們的績效指標,我們的提交歷史也是公開的。但令人不安的事實是:
工作與生活的界線正在模糊:凌晨 2 點的那個綠色方塊?這可能只是因為你終於修復了那個 bug,但它對某些雇主來說意味著「隨時可用」。
時區混亂:在亞洲工作,卻申請歐洲公司?你的提交時間在招聘人員看來可能很奇怪。
隱私問題:並不是每個人都希望自己的日常生活被世人所知。
無意識的偏見:有些人根據提交發生的時間而不是提交的內容來判斷生產力。
那次採訪之後,我決定採取行動。我為我的 AI 驅動的提交訊息產生器GoCommit建立了延遲提交功能。
這個概念很簡單但很強大:在您定義的工作時間內阻止提交並讓您安排它們稍後提交。
它的工作原理如下:
您可以設定「限制時間」(例如,上午 9 點至下午 5 點)
當你嘗試在這些時間內提交時,GoCommit 會攔截它
出現友善的使用者介面,建議其他時間
您選擇一個時間(或輸入自訂時間)
您的提交是使用該時間戳記建立的
無需腳本,無需手動輸入 git 指令,也無需費力調整--date參數。只需流暢、整合的體驗。
建構這個功能的過程非常精彩。具體實現過程如下:
func isTimeInRestrictedRange(currentTime time.Time, config DelayedCommitConfig) (bool, time.Time, error) {
hour := currentTime.Hour()
if hour >= config.RestrictedStartHour && hour < config.RestrictedEndHour {
// Calculate when restrictions end
endTime := time.Date(
currentTime.Year(), currentTime.Month(), currentTime.Day(),
config.RestrictedEndHour, 0, 0, 0, currentTime.Location(),
)
return true, endTime, nil
}
return false, time.Time{}, nil
}
從您的限制結束時起,系統將按照可設定的間隔(預設值:20 分鐘)產生建議的提交時間:
┌──────────────────────────────────────────────────────────┐
│ Commit during work hours (09:00-17:00) detected │
│ Current time: 14:30 │
│ │
│ Select commit time: │
│ → 17:20 (5:20 PM) - Today │
│ • 17:40 (5:40 PM) - Today │
│ • 18:00 (6:00 PM) - Today │
│ • 18:20 (6:20 PM) - Today │
│ • Enter custom time... │
│ │
│ ↑↓: Move Enter: Select Esc: Use current time anyway │
└──────────────────────────────────────────────────────────┘
Git 實際上原生支援自訂時間戳記!訣竅是同時使用--date標誌和GIT_COMMITTER_DATE環境變數:
func executeDelayedCommit(message string, timestamp time.Time) *exec.Cmd {
dateStr := timestamp.Format(time.RFC3339)
cmd := exec.Command("git", "commit", "-m", message, "--date", dateStr)
cmd.Env = append(os.Environ(),
fmt.Sprintf("GIT_COMMITTER_DATE=%s", dateStr))
return cmd
}
這可確保作者日期(編寫程式碼的時間)和提交者日期(記錄提交的時間)與您選擇的時間相符。
自從實現此功能以來,我發現了幾個合法的用例:
想要將個人專案與工作時間分開但又不想在編碼時做出實際改變的開發人員。
遠距工作者希望他們的貢獻出現在雇主時區的「正常」時間內。
不希望客戶追蹤其確切工作時間的自由工作者。
說實話,有些人只是想要一個更美觀的貢獻圖表。這沒關係!
有時你會離線處理程式碼或忘記提交。設定準確的時間戳有助於維護真實的歷史記錄。
現在,我知道你在想什麼: “這不是……不誠實嗎?”
我們來談談。
我的看法是: Git 時間戳一直以來都很靈活。你可以手動設定它們、rebase 更改,或是使用各種工具來修改歷史記錄。這個特性並沒有帶來任何新功能,它只是讓現有功能更容易存取和用戶友好。
真正的問題是:你的程式碼時間表應該是公開資訊嗎?
我認為不應該。身為開發者,你的價值來自於:
程式碼的品質
你的解決問題的能力
您的合作與溝通
你的工作的影響
並不取決於你是在下午 2 點還是凌晨 2 點推播。
這個工具可以幫助你掌控你的敘述,無需說謊。你仍在編寫程式碼,仍在進行提交——你只是在選擇它們何時出現在你的歷史記錄中。
想試試嗎?以下是如何設定 GoCommit 的延遲提交:
# Linux/macOS
curl -sSL https://raw.githubusercontent.com/thanhphuchuynh/gocommit/main/install.sh | bash
# Or download from releases
# https://github.com/thanhphuchuynh/gocommit/releases
GoCommit 使用 AI 產生提交訊息,因此您需要一個 API 金鑰:
gocommit --config
在 Google Gemini 或 OpenRouter 之間進行選擇(可讓您造訪 Claude、GPT-4、Llama 等)。
gocommit --config-delayed
系統將提示您設定:
限制開始時間(例如,9 點表示上午 9 點)
限制結束時間(例如,17 點表示下午 5 點)
建議間隔(例如 20 分鐘)
git add .
gocommit
就是這樣!如果您在限制時間內提交,您將看到時間選擇介面。否則,操作與以前完全相同。
在底層,它只是~/.gocommit.json中的一個簡單的 JSON 配置:
{
"api_key": "your-api-key",
"logging_enabled": true,
"icon_mode": false,
"delayed_commit": {
"enabled": true,
"restricted_start_hour": 9,
"restricted_end_hour": 17,
"suggestion_interval_min": 20
}
}
附註:如果您覺得這篇文章有用,請在 GitHub 上給GoCommit點個星星!這有助於更多開發者發現這個工具。此外,GoCommit 使用人工智慧產生提交訊息,因此您只需一個工具即可獲得更清晰的提交資訊和進度控制。
GoCommit是一個由人工智慧驅動的提交訊息產生器,它:
自動分析您的階段性變化
產生有意義的、常規的提交訊息
支援多個 AI 提供者(Gemini、Claude、GPT-4、Llama 等)
包括內建日誌記錄,以便及時改進
現在具有延遲提交以進行進度控制的功能
它是免費的開源工具,旨在讓你的 Git 工作流程更加順暢。快來試試吧!