在日常開發中,我們經常需要頻繁地向 Git 倉庫提交代碼。雖然 git add
、git commit
、git push
這幾個命令并不復雜,但重復操作容易出錯,也浪費時間。本文將介紹如何使用 Python 腳本自動化完成 Git 提交流程,讓開發更高效!
實現思路
我們將使用 Python 的 subprocess
模塊來調用系統中的 Git 命令。腳本會依次執行以下操作:
- 檢查工作目錄狀態
- 添加所有變更文件到暫存區
- 提交變更(帶提交信息)
- 推送到遠程倉庫
完整代碼
import subprocess
import sys
from datetime import datetimedef run_command(command):"""執行系統命令并返回結果:param command: 命令字符串或列表:return: (成功標志, 輸出信息)"""try:# 如果傳入字符串,則分割成列表if isinstance(command, str):command = command.split()# 執行命令result = subprocess.run(command, capture_output=True, text=True, check=True)return True, result.stdout.strip()except subprocess.CalledProcessError as e:return False, f"命令執行失敗: {e.stderr.strip()}"except Exception as e:return False, f"未知錯誤: {str(e)}"def git_auto_commit(commit_message=None):"""自動化Git提交:param commit_message: 提交信息,若為空則使用默認信息"""print("🚀 開始自動化Git提交流程...\n")# 1. 檢查是否在Git倉庫中success, output = run_command("git status")if not success:print("? 錯誤: 當前目錄不是Git倉庫或Git未安裝。")print(output)returnprint("? 檢測到Git倉庫,狀態檢查通過。")# 2. 獲取當前分支信息success, branch = run_command("git branch --show-current")if success:print(f"📌 當前分支: {branch}")else:print("?? 無法獲取分支信息。")# 3. 添加所有變更文件print("\n📂 正在添加所有變更文件到暫存區...")success, output = run_command("git add .")if not success:print(f"? 文件添加失敗: {output}")returnprint("? 所有文件已添加。")# 4. 構造提交信息if not commit_message:commit_message = f"Auto-commit from Python script on {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"# 5. 執行提交print(f"\n📝 正在提交變更: {commit_message}")success, output = run_command(["git", "commit", "-m", commit_message])if not success:# 如果沒有變更需要提交,git commit 會失敗,但這是正常情況if "nothing to commit" in output:print("? 倉庫已是最新,無需提交。")# 仍然繼續推送,以防有新的標簽或其他更新else:print(f"? 提交失敗: {output}")returnelse:print("? 提交成功!")# 6. 推送到遠程倉庫print("\n📤 正在推送到遠程倉庫...")success, output = run_command("git push")if not success:print(f"? 推送失敗: {output}")print("💡 請檢查網絡連接、遠程倉庫地址和認證信息(如SSH密鑰或Token)。")returnprint("? 推送成功!")print(f"\n🎉 自動化提交流程已完成!")# 7. 顯示最終狀態print("\n🔍 最終倉庫狀態:")success, status = run_command("git status --short")if success:if status:print("?? 以下文件未跟蹤或有未提交的更改:")print(status)else:print("? 倉庫狀態干凈,所有更改已提交并推送。")else:print("無法獲取最終狀態。")if __name__ == "__main__":# 可以從命令行參數獲取提交信息message = Noneif len(sys.argv) > 1:message = " ".join(sys.argv[1:])git_auto_commit(message)
使用方法
- 保存代碼:將上述代碼保存為?
auto_git.py
。 - 確保環境:
- 系統已安裝 Git,并配置好 SSH 密鑰或憑據管理器(推薦使用 SSH 或 Personal Access Token)。
- Python 環境正常(腳本兼容 Python 3.6+)。
- 運行腳本:
- 使用默認提交信息:
python auto_git.py
- 指定自定義提交信息:
python auto_git.py "修復了登錄頁面的樣式問題"
- 使用默認提交信息:
輸出示例
🚀 開始自動化Git提交流程...? 檢測到Git倉庫,狀態檢查通過。
📌 當前分支: main
📂 正在添加所有變更文件到暫存區...
? 所有文件已添加。📝 正在提交變更: Auto-commit from Python script on 2025-07-29 16:45:30
? 提交成功!📤 正在推送到遠程倉庫...
? 推送成功!🎉 自動化提交流程已完成!🔍 最終倉庫狀態:
? 倉庫狀態干凈,所有更改已提交并推送。
注意事項
- 安全性:此腳本直接執行系統命令,請確保在可信環境中運行。
- 錯誤處理:腳本包含了基本的錯誤處理,但復雜情況(如合并沖突)仍需手動干預。
- 憑證:首次推送或憑證過期時,Git 可能會提示輸入用戶名/密碼或使用 SSH 密鑰。建議配置 SSH 免密或使用 Personal Access Token。
- 靈活性:你可以根據需要修改?
git add .
?為更精確的路徑,或者添加?git pull
?在推送前先拉取更新。
結語
這個簡單的 Python 腳本可以大大簡化你的 Git 提交流程,特別適合于需要頻繁提交小改動的場景(如筆記、文檔更新)。你可以將其集成到 IDE、編輯器或作為定時任務運行,進一步提升開發效率!