Python實(shí)現(xiàn)自動(dòng)化GIT提交的示例代碼
在日常開發(fā)中,我們經(jīng)常需要頻繁地向 Git 倉(cāng)庫(kù)提交代碼。雖然 git add、git commit、git push 這幾個(gè)命令并不復(fù)雜,但重復(fù)操作容易出錯(cuò),也浪費(fèi)時(shí)間。本文將介紹如何使用 Python 腳本自動(dòng)化完成 Git 提交流程,讓開發(fā)更高效!
實(shí)現(xiàn)思路
我們將使用 Python 的 subprocess 模塊來調(diào)用系統(tǒng)中的 Git 命令。腳本會(huì)依次執(zhí)行以下操作:
- 檢查工作目錄狀態(tài)
- 添加所有變更文件到暫存區(qū)
- 提交變更(帶提交信息)
- 推送到遠(yuǎn)程倉(cāng)庫(kù)
完整代碼
import subprocess
import sys
from datetime import datetime
def run_command(command):
"""
執(zhí)行系統(tǒng)命令并返回結(jié)果
:param command: 命令字符串或列表
:return: (成功標(biāo)志, 輸出信息)
"""
try:
# 如果傳入字符串,則分割成列表
if isinstance(command, str):
command = command.split()
# 執(zhí)行命令
result = subprocess.run(command, capture_output=True, text=True, check=True)
return True, result.stdout.strip()
except subprocess.CalledProcessError as e:
return False, f"命令執(zhí)行失敗: {e.stderr.strip()}"
except Exception as e:
return False, f"未知錯(cuò)誤: {str(e)}"
def git_auto_commit(commit_message=None):
"""
自動(dòng)化Git提交
:param commit_message: 提交信息,若為空則使用默認(rèn)信息
"""
print("?? 開始自動(dòng)化Git提交流程...\n")
# 1. 檢查是否在Git倉(cāng)庫(kù)中
success, output = run_command("git status")
if not success:
print("? 錯(cuò)誤: 當(dāng)前目錄不是Git倉(cāng)庫(kù)或Git未安裝。")
print(output)
return
print("? 檢測(cè)到Git倉(cāng)庫(kù),狀態(tài)檢查通過。")
# 2. 獲取當(dāng)前分支信息
success, branch = run_command("git branch --show-current")
if success:
print(f"?? 當(dāng)前分支: {branch}")
else:
print("?? 無法獲取分支信息。")
# 3. 添加所有變更文件
print("\n?? 正在添加所有變更文件到暫存區(qū)...")
success, output = run_command("git add .")
if not success:
print(f"? 文件添加失敗: {output}")
return
print("? 所有文件已添加。")
# 4. 構(gòu)造提交信息
if not commit_message:
commit_message = f"Auto-commit from Python script on {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
# 5. 執(zhí)行提交
print(f"\n?? 正在提交變更: {commit_message}")
success, output = run_command(["git", "commit", "-m", commit_message])
if not success:
# 如果沒有變更需要提交,git commit 會(huì)失敗,但這是正常情況
if "nothing to commit" in output:
print("? 倉(cāng)庫(kù)已是最新,無需提交。")
# 仍然繼續(xù)推送,以防有新的標(biāo)簽或其他更新
else:
print(f"? 提交失敗: {output}")
return
else:
print("? 提交成功!")
# 6. 推送到遠(yuǎn)程倉(cāng)庫(kù)
print("\n?? 正在推送到遠(yuǎn)程倉(cāng)庫(kù)...")
success, output = run_command("git push")
if not success:
print(f"? 推送失敗: {output}")
print("?? 請(qǐng)檢查網(wǎng)絡(luò)連接、遠(yuǎn)程倉(cāng)庫(kù)地址和認(rèn)證信息(如SSH密鑰或Token)。")
return
print("? 推送成功!")
print(f"\n?? 自動(dòng)化提交流程已完成!")
# 7. 顯示最終狀態(tài)
print("\n?? 最終倉(cāng)庫(kù)狀態(tài):")
success, status = run_command("git status --short")
if success:
if status:
print("?? 以下文件未跟蹤或有未提交的更改:")
print(status)
else:
print("? 倉(cāng)庫(kù)狀態(tài)干凈,所有更改已提交并推送。")
else:
print("無法獲取最終狀態(tài)。")
if __name__ == "__main__":
# 可以從命令行參數(shù)獲取提交信息
message = None
if len(sys.argv) > 1:
message = " ".join(sys.argv[1:])
git_auto_commit(message)使用方法
1.保存代碼:將上述代碼保存為 auto_git.py。
2.確保環(huán)境:
- 系統(tǒng)已安裝 Git,并配置好 SSH 密鑰或憑據(jù)管理器(推薦使用 SSH 或 Personal Access Token)。
- Python 環(huán)境正常(腳本兼容 Python 3.6+)。
3.運(yùn)行腳本:
使用默認(rèn)提交信息:
python auto_git.py
指定自定義提交信息:
python auto_git.py "修復(fù)了登錄頁(yè)面的樣式問題"
輸出示例
?? 開始自動(dòng)化Git提交流程...
? 檢測(cè)到Git倉(cāng)庫(kù),狀態(tài)檢查通過。
?? 當(dāng)前分支: main
?? 正在添加所有變更文件到暫存區(qū)...
? 所有文件已添加。
?? 正在提交變更: Auto-commit from Python script on 2025-07-29 16:45:30
? 提交成功!
?? 正在推送到遠(yuǎn)程倉(cāng)庫(kù)...
? 推送成功!
?? 自動(dòng)化提交流程已完成!
?? 最終倉(cāng)庫(kù)狀態(tài):
? 倉(cāng)庫(kù)狀態(tài)干凈,所有更改已提交并推送。
注意事項(xiàng)
安全性:此腳本直接執(zhí)行系統(tǒng)命令,請(qǐng)確保在可信環(huán)境中運(yùn)行。
錯(cuò)誤處理:腳本包含了基本的錯(cuò)誤處理,但復(fù)雜情況(如合并沖突)仍需手動(dòng)干預(yù)。
憑證:首次推送或憑證過期時(shí),Git 可能會(huì)提示輸入用戶名/密碼或使用 SSH 密鑰。建議配置 SSH 免密或使用 Personal Access Token。
靈活性:你可以根據(jù)需要修改 git add . 為更精確的路徑,或者添加 git pull 在推送前先拉取更新。
結(jié)語(yǔ)
這個(gè)簡(jiǎn)單的 Python 腳本可以大大簡(jiǎn)化你的 Git 提交流程,特別適合于需要頻繁提交小改動(dòng)的場(chǎng)景(如筆記、文檔更新)。你可以將其集成到 IDE、編輯器或作為定時(shí)任務(wù)運(yùn)行,進(jìn)一步提升開發(fā)效率!
到此這篇關(guān)于Python實(shí)現(xiàn)自動(dòng)化GIT提交的示例代碼的文章就介紹到這了,更多相關(guān)Python自動(dòng)化GIT提交內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解利用python-highcharts庫(kù)繪制交互式可視化圖表
本文主要和大家分享一個(gè)超強(qiáng)交互式可視化繪制工具-python-highcharts。python-highcharts就是使用Python進(jìn)行Highcharts項(xiàng)目繪制,簡(jiǎn)單的說就是實(shí)現(xiàn)Python和Javascript之間的簡(jiǎn)單轉(zhuǎn)換層,感興趣的可以了解一下2022-03-03
Python實(shí)現(xiàn)OpenCV的安裝與使用示例
這篇文章主要介紹了Python實(shí)現(xiàn)OpenCV的安裝與使用,結(jié)合實(shí)例形式分析了Python中OpenCV的安裝及針對(duì)圖片的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
python shell根據(jù)ip獲取主機(jī)名代碼示例
這篇文章主要介紹了python shell根據(jù)ip獲取主機(jī)名代碼示例,涉及用socket模塊和shell中hostname命令獲取等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
Python實(shí)現(xiàn)合并同一個(gè)文件夾下所有txt文件的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)合并同一個(gè)文件夾下所有txt文件的方法,涉及Python針對(duì)文件的遍歷、讀取、寫入等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
pandas DataFrame 交集并集補(bǔ)集的實(shí)現(xiàn)
這篇文章主要介紹了pandas DataFrame 交集并集補(bǔ)集的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
在?Python?中創(chuàng)建DataFrame的方法
這篇文章主要介紹了教你如何在?Python?中創(chuàng)建DataFrame,我們將學(xué)習(xí)以多種方式創(chuàng)建DataFrame,DataFrame是數(shù)據(jù)的二維集合,是一種數(shù)據(jù)結(jié)構(gòu),其中數(shù)據(jù)以表格形式存儲(chǔ),更多相關(guān)資料需要的小伙伴可以參考一下2022-03-03
eclipse創(chuàng)建python項(xiàng)目步驟詳解
在本篇內(nèi)容里小編給大家分享了關(guān)于eclipse創(chuàng)建python項(xiàng)目的具體步驟和方法,需要的朋友們跟著學(xué)習(xí)下。2019-05-05

