带有Python的Git日志,用于显示旧的合并分支



我正在尝试创建一个脚本,其中列出了在过去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)

最新更新