每開發一個新功能,每每都會新建一個功能分支。python
長此以往,項目的本地代碼倉庫上,就會累積較多的過期分支。git
若要逐一手動清理這些過期分支,想一想都以爲累。爲了更高效的摸魚,寫了一個python
腳本,用於批量清理過期分支。app
假設D:\rui\work\
路徑下,存在repo-a
這一本地代碼倉庫。在repo-a
上,存在着master
、feature-a
、feature-b
等三個分支。如今,想要移除feature-b
,可執行以下代碼。ui
值得一提的是,若feature-b
存在未push
到遠端倉庫的commit
,則feature-b
不會被移除。若需強制移除,能夠單獨執行命令git branch -D feature-b
。code
# 引入第三方庫 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()