一個批量清除Git分支的腳本

每開發一個新功能,每每都會新建一個功能分支。python

長此以往,項目的本地代碼倉庫上,就會累積較多的過期分支。git

若要逐一手動清理這些過期分支,想一想都以爲累。爲了更高效的摸魚,寫了一個python腳本,用於批量清理過期分支。app

假設D:\rui\work\路徑下,存在repo-a這一本地代碼倉庫。在repo-a上,存在着masterfeature-afeature-b等三個分支。如今,想要移除feature-b,可執行以下代碼。ui

值得一提的是,若feature-b存在未push到遠端倉庫的commit,則feature-b不會被移除。若需強制移除,能夠單獨執行命令git branch -D feature-bcode

# 引入第三方庫 GitPython
from git import Repo, GitCommandError

# 倉庫名稱
REPO_NAME = 'repo-a'

# 須要保留的分支,默認保留mater分支
# 注意:沒有push新commit到遠端倉庫的分支,即便不在該集合裏,也不會被刪除
REMAIN_BRANCH_TUPLE = [
    'feature-a'
]

# 工做路徑
WORK_PATH = r'D:\rui\work\\'


def main():
    print('開始啦 0v0\n')

    # 建立版本庫對象
    repo_path = WORK_PATH + REPO_NAME
    repo = Repo(repo_path)

    # 若當前分支存在未提交的修改,則停止操做
    if repo.is_dirty():
        print('請先提交當前分支的修改!!!')
        exit()

    # 切換到 master
    repo.heads.master.checkout()

    not_push_branch_list = []
    for head in repo.heads:
        # 分支名不在保留集合中,則刪除
        head_name = head.name
        if head_name == 'master' or head_name in REMAIN_BRANCH_TUPLE:
            continue

        try:
            # 移除分支
            # 本質上是執行命令 git branch -d feature-name
            repo.delete_head(head_name)
        except GitCommandError:
            # 未push新commit的分支,執行刪除操做,將會拋出GitCommandError異常
            # 固然,若是出現其餘錯誤,也可能會拋出GitCommandError異常。此處,只是簡單處理
            not_push_branch_list.append(head_name)

    if not_push_branch_list:
        not_push_branch_str = ', '.join(not_push_branch_list)
        print('沒有push新commit的分支: {0}\n'.format(not_push_branch_str))

    print('結束啦 ^0^')


if __name__ == '__main__':
    main()
相關文章
相關標籤/搜索