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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM