前言:
我们做开发的应该保持“惰性思维”,能用代码解决,绝不人工。一是费时间,二是可能出错
背景:
开发人员在团队开发的时候,一般都会使用git,每个人都有自己的分支,开发完之后,所有人都得先合并到dev测试环境,再到pre预发布环境,最后才是master线上环境。
所以我们要不断的
痛点:
现成工具:
链接: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()