Python增强下git那长长的指令
场景
现如今有点规模的公司都使用GitFlow模式进行分支管理、虽然插件给我们带来了非常大的方便,但切换分支、找分支、起分支还是那么的麻烦
需求
在社会主次国家,每个生活在底层的劳动人民,他们默默的工作着,各种996、多线程的工作着
beta
dev
develop
effectiveJava
feature/20210712-reviewOpenApi
feature/20210727-tapd-1003358
feature/20210824-tapd-1004652
feature/20210909-tapd-1005586
feature/20210913-tapd-1005758
hotfix/20210915-fix-gainPointForGiftCard
master
* test
每个码农都同事进行着非常多的需求,为了使我们的工作更加的有效率!我们也给自己提几个需求!
- 快速的建立
hotfix/feature
分支 - 在繁多的本地分支中快速的切换到指定工作分支
- 清楚的描述出每个分支对应的任务描述
.......
为此 给原生的git 增强的想法早就出现了,只是一只没去写~,今个儿就用Python来提升下!
无规则迭代记录🤪
代码目录结构
Savey:bin:% tree gitHelper
gitHelper
├── README.MD
├── __init__.py
├── command
│ ├── __init__.py
│ ├── commandStrategy.py
│ ├── createTaskStrategy.py
│ ├── delBr.py
│ ├── editBrDesc.py
│ ├── gitCmdStrategy.py
│ ├── gtaskHelp.py
│ ├── merge.py
│ ├── printCurrentBrStrategy.py
│ ├── status.py
│ └── switchBranch.py
├── gtaskContext.py
├── main.py
├── plusConfig.py
├── support
│ ├── __init__.py
│ ├── breancEntity.py
│ ├── clientCommand.py
│ └── parseError.py
main.py
为入口函数plusConfig.py
文件为配置文件command
目录就存入具体的命令实现support
目录为一些支持的类
plusConfig.py
文件
from command import printCurrentBrStrategy,gtaskHelp,createTaskStrategy,switchBranch,gitCmdStrategy,editBrDesc, \
merge, status, delBr
""" 定义整个plusGit支持的长短选项、 ==STRT=="""
shortOpts="bcmsd"
longOpts=["help","co","desc="]
""" ===============================END==== """
"""
这里配置下指令对应的命令解释器
"""
def keyCommand():
yield printCurrentBrStrategy.PrintBr()
yield gtaskHelp.GtaskHelper()
yield createTaskStrategy.CreateTask()
yield switchBranch.SwitchBranch()
yield editBrDesc.EditBrDesc()
yield merge.Merge()
yield status.Status()
yield delBr.Del()
"""
特殊的配置,解析git的命令
"""
git = {
"git": gitCmdStrategy.GitCmd()
}
主要是配置命令以及对应的解释脚本文件
9月14号
- 建立仓库
- 实现 查看 所有分支
- 创建分支、
- 快速切换分支
- help信息
创建分支的时候提示输入任务名、描述等。查看所有分支的时候给分支都打上对应的索引号、通过切换指定的索引号来切换分支,同事显示的时候也把分支描述显示出来
Savey:baking-apiserver:% g -b <test>
[001] - beta ##beta分支
[002] - dev
[003] - develop
[004] - effectiveJava
[005] - feature/20210712-reviewOpenApi
[006] - feature/20210727-tapd-1003358 ##电子发票
[007] - feature/20210824-tapd-1004652 ##预售
[008] - feature/20210909-tapd-1005586 ##取消配送
[009] - feature/20210913-tapd-1005758 ##美团外卖订单优惠明细打印
[010] - hotfix/20210915-fix-gainPointForGiftCard
[011] - master ##yes
[012] - test ##test
9月15号
- 兼容原生的
git
使用
Savey:baking-apiserver:% g version
git version 2.24.3 (Apple Git-128)
- 为当前的分支添加描述
是这样的、当初建立分支的时间忘记写上描述了,那么就再次快速的给分支打上描述吧、不用输入git config branch.<branchName>.description
了
现在只要这样
Savey:baking-apiserver:% g --desc test分支
✅Success!!
9月16号
由于咋们的指令会越来越多,之前在cmdDict.py
直接配置指定的命令不合适了,今天改了换成以下写法。使用生成器的特性来提升下小小的性能,因这之前我的老本家php
也支持yield
。那么今天就索引来修改下吧!顺便把cmdDIct.py
改了名字Config.py
是不是更好一些。
把之前的指令拿到具体的类里去实现。
def keyCommand():
yield printCurrentBrStrategy.PrintBr()
yield gtaskHelp.GtaskHelper()
yield createTaskStrategy.CreateTask()
yield switchBranch.SwitchBranch()
yield editBrDesc.EditBrDesc()
在抽象类AbstractCommandStrategy.py
添加方法
"""
存入指令的实现方法
"""
@abstractmethod
def command(self):
pass
由具体的子类去配置对应的command
命令。比如
from . import commandStrategy
class PrintBr(commandStrategy.AbstractCommandStrategy):
"""
这里配置 指定的指令
"""
def command(self):
return "-b"
def cmd(self, args):
super().printAllBr(args)
def useage(self):
print(self.command() + "\t打印出当前所有分支,列表出索引号和描述")
pass
9月17号
今天呢 ,让我们的Python-git支持下Merge的功能吧!
- 首先添加一个解释器
from . import commandStrategy
import os
class Merge(commandStrategy.AbstractCommandStrategy):
def command(self):
return "-m";
"""
"""
def cmd(self, args):
var1 = super().getAllbrs(args)
for br in var1:
print(br.toString())
a = int(input("\033[31mPlease select You Branch Index:\033[0m"))
l = len(var1)
if a > l or a < 1:
self.cmd(args)
else:
b = a - 1
br = var1[b]
CMD = "git merge %s" % br.branchName
os.system(CMD)
def useage(self):
print(self.command() + "\t把某个分支 merge到当前分支!")
pass
- 添加getOpt支持参数
opts, args = getopt.getopt(args, "bcm", ["help","co","desc="]);
好了、让我们试下新加入的功能吧!!
(venv) Savey:gitHelper:% g -m <master>
[001] - develop
[002] - hotfix/20210917-addFile ##Addfile
[003] - master
Please select You Branch Index:2
Already up to date.
(venv) Savey:gitHelper:%
第天争取走一小步
9月21号
这两天过节,回了次老家,老家在那个山里,那里没网、没4G。只有孤寡老人、和破旧的广播。宝宝回来又发烧,今晚更新了下gitplus
- 支持删除
- 支持简化
git status
由于之前很多共用的代码都写过了,所以没有什么新的代码量,都是重复的套用、这里就多说了,直接发代码吧。
from . import commandStrategy
import os
"""
删除指定的分支,
"""
class Del(commandStrategy.AbstractCommandStrategy):
def command(self):
return "-d";
"""
"""
def cmd(self, args):
var1 = super().getAllbrs(args)
for br in var1:
print(br.toString())
a = int(input("\033[31mPlease select You Branch Index:\033[0m"))
l = len(var1)
if a > l or a < 1:
self.cmd(args)
else:
b = a - 1
br = var1[b]
CMD = "git checkout master; git br -D %s" % br.branchName
os.system(CMD)
def useage(self):
print(self.command() + "\t删除某个分支、不可用于删除Master分支,若删除Master分支,请用原生的命令!")
pass
from . import commandStrategy, gitCmdStrategy
class Status(commandStrategy.AbstractCommandStrategy):
def command(self):
return "-s";
"""
"""
def cmd(self, args):
git=gitCmdStrategy.GitCmd()
git.cmd("status -s")
def useage(self):
print(self.command() + "\t查看当前分支状态 M(modified)、A(added)、 D(deleted)")
pass
9月22号
今天无战事、只修复了若干Bug。优化了部分代码,创建分支的时候,支持输入"n"来创建一个普通分支。今天有点儿累。
代码在GitHub
本文来自博客园,作者:乌托拉赛文,转载请注明原文链接:https://www.cnblogs.com/m78-seven/p/15302698.html