python操作git推送自己分支并合并主分支(持续优化该工具)

前言:

我们做开发的应该保持“惰性思维”,能用代码解决,绝不人工。一是费时间,二是可能出错

背景:

开发人员在团队开发的时候,一般都会使用git,每个人都有自己的分支,开发完之后,所有人都得先合并到dev测试环境,再到pre预发布环境,最后才是master线上环境。
所以我们要不断的
  • 提交自己分支
  • 推送自己分支
  • 切换主分支
  • merge自己分支
  • 推送主分支
  • 然后再切换到自己的分支

痛点:

  • 需要频繁的写Git命令
  • 着急的时候,可能会推送错分支,或者merge错分支。
  • 推送主分支后,忘记切换到自己的分支了,等等不方便的地方

现成工具:

链接:https://pan.baidu.com/s/1wkOiaeIxwL28VyQFLbQYgg
提取码:8arx

截图

在这里插入图片描述

源码:

import sys

import git

from tkinter import *
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import subprocess

def formAoublt():
    def gitAbouth():

        repo = git.Git(folder_entry.get())

        # 分支名
        branchName = branchNameEntry.get().strip()
        # 需要合并的分支名
        targetBranchName = targetBranchNameEntry.get().strip()
        # 提交描述
        commitDescription = "-m " + mergeMessageEntry.get()

        # 判断分支名是否没有需要推送的代码
        isNoHaveCommit = "nothing to commit" in repo.status()
        if (isNoHaveCommit == True):
            return messagebox.showinfo("合并提示", branchName + " 已经是最新的代码了")

        # 获取所有分支
        branch = repo.branch()

        # 分支名不得为dev pre master
        if (branchName == "dev" or branchName == "pre" or branchName == "master"):
            return messagebox.showinfo("合并提示", "提交分支名不得为dev pre master")

        # 目标分支不得为pre master
        if (targetBranchName == "pre" or targetBranchName == "master"):
            return messagebox.showinfo("合并提示", "目标支名不得为pre master")

        # 判断该分支名是否存在分支数组中
        isHaveBranch = branchName in branch
        if (isHaveBranch == False):
            return messagebox.showinfo("合并提示", "分支名不存在")
            print("分支名不存在")

        # 判断需要合并的分支名是否存在分支数组中
        isHaveTargetBranch = targetBranchName in branch
        if (isHaveTargetBranch == False):
            return messagebox.showinfo("合并提示", "需要合并的分支名不存在")

        try:
            # 切换分支名
            repo.checkout(branchName)
        except:
            return messagebox.showinfo("合并提示", "提交失败,可能原因上一次冲突造成,请手动提交" + targetBranchName + "分支,并切换到" + branchName + "分支")

        # add文件
        repo.add(".")

        # commit文件
        repo.commit(commitDescription)

        # push文件
        repo.execute("git push origin " + branchName)

        # 切换到目标分支
        repo.checkout(targetBranchName)

        # 拉取目标分支代码,防止冲突
        repo.execute("git pull origin " + targetBranchName)

        # 判断是否有冲突 如果有提示用户手动解决冲突
        try:
            # 合并分支
            repo.execute("git merge -m '合并分支' origin " + branchName)
        except:
            return messagebox.showinfo("合并提示", "合并有冲突,请先手动修改冲突文件")


        # 推送目标分支
        repo.execute("git push origin " + targetBranchName)

        pushResult = subprocess.run(["git", "push", targetBranchName], capture_output=True, text=True)
        # 检查合并是否成功,并给出相应提示
        print(pushResult)
        if pushResult.returncode == 0 or pushResult.returncode == 128:
            messagebox.showinfo("合并提示", "合并成功")
        else:
            messagebox.showinfo("合并提示", pushResult.stderr)

        # 合并成功后切换到自己的分支
        repo.checkout(branchName)

    def select_folder():
        folder_path = filedialog.askdirectory()  # 选择文件夹
        folder_entry.delete(0, tk.END)  # 清空输入框
        folder_entry.insert(0, folder_path)  # 将文件夹路径填充到输入框中

    root1 = Tk()
    root1.title('登录窗口')
    root1.geometry('500x300+600+200')

    # 创建一个标签并设置文本和颜色
    label = Label(root1, text="注:该工具只能合并到dev, 合并到pre master请手动合并,第一次使用后请检查一下", fg="red")
    label.pack(padx=10)

    label = tk.Label(root1, text="目标文件夹:")
    label.pack(padx=5)

    folder_entry = tk.Entry(root1)
    folder_entry.pack(padx=5)

    button = tk.Button(root1, text="选择文件夹", command=select_folder)
    button.pack(padx=5)

    branchNameLabel = tk.Label(root1, text="分支名:")
    branchNameLabel.pack(padx=5)

    branchNameEntry = tk.Entry(root1)
    branchNameEntry.pack(padx=5)

    targetBranchNameLabel = tk.Label(root1, text="需要合并到:")
    targetBranchNameLabel.pack(padx=5)

    targetBranchNameEntry = tk.Entry(root1)
    targetBranchNameEntry.pack(padx=5)

    mergeMessage = tk.Label(root1, text="合并描述:")
    mergeMessage.pack(padx=5)

    mergeMessageEntry = tk.Entry(root1)
    mergeMessageEntry.pack(padx=5)

    branchButton = tk.Button(root1, text="确定提交并合并", command=gitAbouth)
    branchButton.pack(padx=5, pady=20)

    root1.mainloop()


formAoublt()

结言:

工具将会持续更新,有给你们带来帮助的,麻烦点个小心心~
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值