Python提取GitLab分支authored_date判定并清理超7天待删分支
解决方案
以下是修改后可直接使用的完整代码,核心逻辑包含authored_date提取、时间差计算、过期分支判断三部分:
import gitlab import os from datetime import datetime, timedelta, timezone # 身份认证 TOKEN = "MYTOKEN" GITLAB_HOST = 'MYINSTANCE' # 替换为你的GitLab实例地址 gl = gitlab.Gitlab(GITLAB_HOST, private_token=TOKEN) # 配置目标组ID group_id = 6 group = gl.groups.get(group_id, lazy=True) # 获取组内所有项目(包含子组) projects = group.projects.list(include_subgroups=True, all=True) project_ids = [project.id for project in projects] print("待扫描项目ID列表:", project_ids) for pid in project_ids: project = gl.projects.get(pid) branches = project.branches.list() for branch in branches: branch_name = branch.attributes['name'] # 匹配名称带tobedeleted的分支 if "tobedeleted" not in branch_name: continue print(f"\n匹配到待检查分支:{branch_name}") # 提取authored_date字段 commit_info = branch.attributes['commit'] authored_date_str = commit_info['authored_date'] # 转换为带时区的datetime对象用于计算 authored_date = datetime.fromisoformat(authored_date_str) # 获取当前UTC时间,和GitLab返回的时间时区保持一致避免误差 now_utc = datetime.now(timezone.utc) # 计算时间差 date_diff = now_utc - authored_date print(f"分支最后提交日期:{authored_date.date()},距今已{date_diff.days}天") # 判断是否超过7天 if date_diff > timedelta(days=7): print(f"满足删除条件,正在删除分支:{branch_name}") # 测试阶段可先注释下面这行,确认待删除列表无误后再取消注释 branch.delete() print("删除成功")
核心逻辑说明
branch.attributes['commit']本身就是字典结构,直接通过键authored_date就能取出对应的时间字符串,该字符串为ISO 8601标准格式,可直接用datetime.fromisoformat转换为可计算的时间对象- 由于GitLab返回的时间为UTC时区,所以当前时间也需要使用带UTC时区的对象进行计算,避免时区不匹配导致的判断误差
- 两个datetime对象相减得到
timedelta类型的差值,直接和timedelta(days=7)对比即可判断是否满足删除条件
注意事项
- 首次运行建议先注释
branch.delete()行,仅打印待删除的分支列表,确认逻辑无误后再开启删除操作,避免误删正常分支 - 所用的GitLab Token需要拥有对应项目的维护者及以上权限,否则无法执行分支删除操作
内容的提问来源于stack exchange,提问作者Sameer Atharkar
相关产品推荐
相关产品推荐

