我正在尝试创建一个脚本,其中列出了在过去6个月内没有任何更新的合并的远程release
分支,然后将其删除。
到目前为止,我一直在尝试用以下脚本来完成列表分支部分:
import subprocess
import subprocess
import sys
import git
from git import Repo, repo
from git import Git
def get_merged_release_branches():
result_release = subprocess.getoutput("git branch -r --merged | grep release | sed 's#origin/##'")
return (result_release)
command = 'git log -1 --pretty=format:"%Cgreen%as" --before \'6 month ago'
for branch in get_merged_release_branches():
output = subprocess.Popen(command, universal_newlines=True, shell=True,stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
print(output)
但这似乎并不奏效。黑屏就像是在迭代。也不确定使用subprocess.popen
是否是最佳选择。如果不是这样,最好的建议是什么?
也尝试过:
output = subprocess.call(["git","log -1","--pretty=format:\"%Cgreen%as\ --before \'6 month ago'"])
但也没用。
我也知道你在这里有git for python,但不知道实现它的最佳方法。
对于这样一个简单的工作流,只需几个subprocess
调用就可以实现这一点。
import subprocess
def get_merged_release_branches():
result_release = subprocess.getoutput("git branch -r --merged")
if "release" in result_release:
yield result_release
def is_release_branch_stale(branch_name):
commits_since_sixmonths = subprocess.getoutput(f"git log -1 {branch_name} --after '6 month ago'")
if commits_since_sixmonths is not None:
return True
return False
for branch in get_merged_release_branches():
if is_release_branch_stale(branch):
print(f"Branch {branch} is stale and can be deleted!")
这将打印所有过时的合并远程分支(对您来说,这意味着自六个月前以来没有提交(。
您现在可以轻松地添加另一种方法来从远程删除分支:
def delete_stale_remote_branch(branch_name):
delete_status = subprocess.getoutput(f"git branch -d {branch_name}")
print(delete_status)