場景
現如今有點規模的公司都使用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