【Python】自动化GIT提交

在日常开发中,我们经常需要频繁地向 Git 仓库提交代码。虽然 git addgit commitgit push 这几个命令并不复杂,但重复操作容易出错,也浪费时间。本文将介绍如何使用 Python 脚本自动化完成 Git 提交流程,让开发更高效!

实现思路

我们将使用 Python 的 subprocess 模块来调用系统中的 Git 命令。脚本会依次执行以下操作:

  1. 检查工作目录状态
  2. 添加所有变更文件到暂存区
  3. 提交变更(带提交信息)
  4. 推送到远程仓库

完整代码

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)

使用方法

  1. 保存代码:将上述代码保存为 auto_git.py
  2. 确保环境
    • 系统已安装 Git,并配置好 SSH 密钥或凭据管理器(推荐使用 SSH 或 Personal Access Token)。
    • Python 环境正常(脚本兼容 Python 3.6+)。
  3. 运行脚本
    • 使用默认提交信息
      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、编辑器或作为定时任务运行,进一步提升开发效率!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/2677.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 85. 最大矩形

预备知识 84.柱状图中最大的矩形:题目链接 思路:在求柱状图最大面积时,我们可以枚举每一根柱子,并且假设这根柱子就是最大面积中最低的那一根柱子。由于最大面积的选中的柱子中,矩形的高取决于最低的柱子&#xff0c…

Java Collections工具类

Collections 类:Java 中提供的一组静态方法&#xff0c;用于操作集合。常用方法: 1. 排序 Collections.sort(List<T> list) 对指定列表进行升序排序。 Arrays.asList 将一个数组转化为一个List集合 List<Integer> numbers Arrays.asList(5, 2, 8, 1); Collections…

MCU+RTOS调试

1. 引言在做项目时&#xff0c;百分之三十的时间写代码&#xff0c;还有百分之70的时间用于调试。本期将以Keil为例进行调试章节的讲解&#xff0c;目的在于做出一个标准化的调试步骤&#xff0c;方便大家学习如何调试代码。内容分为基础调试、中级调试及进阶调试三部分&#x…

基于STM32F103的FM1702驱动程序

基于STM32F103微控制器与复旦微电子FM1702SL射频读卡芯片的驱动开发方案&#xff0c;整合了硬件配置、寄存器操作和通信协议实现&#xff1a;一、硬件连接设计 1. 管脚映射表FM1702SL引脚STM32F103引脚功能说明VDD3.3V电源输入GNDGND地线SCKPA5(SPI1_SCK)SPI时钟MISOPA6(SPI1_M…

Zabbix 6.0 监控AWS全栈实战|EC2至Lambda的无缝监控

一、云监控架构挑战与突破传统云监控痛点&#xff1a; ❌ 多区域/多账户资源分散难统一 ❌ 无服务器环境监控盲区&#xff08;Lambda/API Gateway&#xff09; ❌ 云账单爆炸式增长Zabbix-AWS解决方案&#xff1a;三层监控体系&#xff1a;基础设施层&#xff1a;EC2/EBS/VPC&a…

深入Go并发编程:Channel、Goroutine与Select的协同艺术

在现代软件开发中&#xff0c;并发编程已成为提升程序性能和响应能力的关键。Go语言作为一门为并发而生的现代编程语言&#xff0c;其简洁而强大的并发模型&#xff0c;特别是goroutine和channel&#xff0c;为开发者提供了优雅的并发解决方案。本文将深入探讨Go并发编程的核心…

nvim编辑器

安装lazy.nvim -- 在 ~/.config/nvim/init.lua 中添加以下代码 -- 设置 leader 键&#xff08;推荐空格&#xff09; vim.g.mapleader " "-- 加载 lazy.nvim local lazypath vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not vim.loop.fs_…

Android启动时间优化大全

1 修改Android mksh默认的列长度 不修改这个参数&#xff0c;adb shell后&#xff0c;输入超过80个字符&#xff0c;就不能看到完整的命令行。external/mksh/src/sh.h EXTERN mksh_ari_t x_cols E_INIT(80); EXTERN mksh_ari_t x_lins E_INIT(24);2 Kernel优化 2.1 内核驱动模块…

JavaScript核心概念全解析

目录 1. 作用域 (1) 局部作用域 (2) 全局作用域 2. 垃圾回收 (1) 引用计数法 (2) 标记清除法 3. 闭包 (1) 作用 (2) 风险 4. 变量提升 (1) var (2) let 和 const (3) const 5. 函数提升 (1) 函数声明 (2) 函数表达式 6. 函数参数 (1) 动态参数 (2) 剩余参数…

Red靶机攻略

一.环境准备 1.1Red靶机环境准备 1.1.1首先将我们解压好的的jangow-01-1.0.1.ova放入虚拟机里&#xff0c;并配置环境。安装好靶机后打开进行配置&#xff0c;按住shift&#xff0c;在界面按e进去得到图二。 1.1.2按住ctrlx&#xff0c;ip a查看网卡信息,修改网络配置文件 /e…

Linux之shell脚本篇(三)

一、 for循环使用基础语法for var in 数据域&#xff08;表达式&#xff09; do 语句1 done 代码案例1.循环3次hello world &#xff0c;打印循环池内容#!/bin/bash for i in www.jd.com www.qq.com www.4399.com do echo $i hello world.done 2.ping 网段范围内地址(1)打印网段…

9-大语言模型—Transformer 核心:多头注意力的 10 步拆解与可视化理解

目录 1、Transformer编码器堆叠的每层结构 2、输入嵌入 3、位置编码 4、多头注意力层 4.1、步骤1&#xff1a;表示输入 4.1.1、输入 4.1.2、示意图 ​编辑 4.2、步骤2&#xff1a;初始化权重矩阵 4.2.1、初始化Query权重矩阵&#xff1a; 4.2.2、初始化Key权重矩阵…