場景

現如今有點規模的公司都使用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來提升下!

開發中

程式碼目錄結構

> tree
├── README.MD
├── __init__.py
├── cmdDict.py
├── command
│   ├── __init__.py
│   ├── commandStrategy.py
│   ├── createTaskStrategy.py
│   ├── gitCmdStrategy.py
│   ├── gtaskHelp.py
│   ├── printCurrentBrStrategy.py
│   └── switchBranch.py
├── gtaskContext.py
├── main.py
└── support
├── __init__.py
├── breancEntity.py
├── clientCommand.py
└── parseError.py
  • main.py為入口函式
  • cmdDict.py檔案為配置檔案
  • command目錄就存入具體的命令實現
  • support目錄為一些支援的類

cmdDict.py檔案

from command import printCurrentBrStrategy,gtaskHelp,createTaskStrategy,switchBranch,gitCmdStrategy

"""
這裡配置下指令對應的命令直譯器
"""
cmd = {
"-b": printCurrentBrStrategy.PrintBr(),
"--help": gtaskHelp.GtaskHelper(),
"-c":createTaskStrategy.CreateTask(),
"--co":switchBranch.SwitchBranch()
} """
特殊的配置,解析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

第天爭取走一小步

程式碼在GitHub