gitlab批量删除分支
一、概述
gitlab的java项目,运行几十年了,分支特别多。开发人员一般不会主动删除分支,长期下来,分支就特别多。
按照开发流程上来说,有新需求和bug,会开一个分支出来。等功能测试完成上线后,就会合并到master分支。
那么这些多余的分支就是没用的,需要删除。
二、批量删除分支
分支有几千个,通过gitlab页面,一个个手动删除,太耗费时间了,可以通过调用api接口来实现。
使用python代码来调用
这里会保留master分支,其他分支会被删除。如果需要保留指定分支,增加branch_list.remove('分支名')
# 注意,每次只能删除20个分支 import requests from requests.auth import HTTPBasicAuth # GitLab 实例 URL gitlab_url = 'https://gitlab.qq.com' # GitLab 用户名和密码 username = 'xiao' password = 'abcd@1234' # GitLab 项目 ID project_id = '1969' # 登录获取访问令牌 login_url = f'{gitlab_url}/oauth/token' login_data = { 'grant_type': 'password', 'username': username, 'password': password } response = requests.post(login_url, data=login_data) if response.status_code == 200: access_token = response.json()['access_token'] print("Successfully logged in and obtained access token.") else: print(f"Failed to log in: {response.status_code}") print(response.json()) exit() # 获取项目的分支列表 branches_url = f'{gitlab_url}/api/v4/projects/{project_id}/repository/branches' headers = { 'Authorization': f'Bearer {access_token}' } response = requests.get(branches_url, headers=headers) branch_list=[] if response.status_code == 200: branches = response.json() # print("Remote branches:") for branch in branches: # print(branch['name']) branch_list.append(branch['name']) else: print(f"Failed to retrieve branches: {response.status_code}") print(response.json()) try:
# 移除master分支,不做删除 branch_list.remove('master') except Exception as e: print(e) print("branch_list",branch_list) for branch_name in branch_list: # 删除指定分支 delete_branch_url = f'{gitlab_url}/api/v4/projects/{project_id}/repository/branches/{branch_name}' headers = { 'Authorization': f'Bearer {access_token}' } response = requests.delete(delete_branch_url, headers=headers) if response.status_code == 204: print(f"Branch '{branch_name}' deleted successfully.") elif response.status_code == 404: print(f"Branch '{branch_name}' not found.") else: print(f"Failed to delete branch '{branch_name}': {response.status_code}") print(response.json())
注意事项:
修改变量gitlab_url ,username,password,改为实际的值。
project_id,这个是项目id,在gitlab上打开某个项目,就可以看到Project ID
每次执行,只能删除20个分支,因为api接口,一次只能返回20个。
二、批量删除tag
tag有几千个,通过gitlab页面,一个个手动删除,太耗费时间了,可以通过调用api接口来实现。
使用python代码来调用
这里会删除所有tag
''' python 使用用户名和密码登录gitlab,删除git项目所有tag ''' import requests # GitLab 实例 URL gitlab_url = 'https://gitlab.qq.com' # GitLab 用户名和密码 username = 'xiao' password = 'abcd@1234' # GitLab 项目 ID project_id = '1969' # 登录获取访问令牌 login_url = f'{gitlab_url}/oauth/token' login_data = { 'grant_type': 'password', 'username': username, 'password': password } response = requests.post(login_url, data=login_data) if response.status_code == 200: access_token = response.json()['access_token'] print("Successfully logged in and obtained access token.") else: print(f"Failed to log in: {response.status_code}") print(response.json()) exit() # 获取项目的所有标签 tags_url = f'{gitlab_url}/api/v4/projects/{project_id}/repository/tags' headers = { 'Authorization': f'Bearer {access_token}' } response = requests.get(tags_url, headers=headers) if response.status_code == 200: tags = response.json() print("Remote tags:") for tag in tags: print(tag['name']) else: print(f"Failed to retrieve tags: {response.status_code}") print(response.json()) exit() # 删除项目的所有标签 for tag in tags: tag_name = tag['name'] delete_tag_url = f'{gitlab_url}/api/v4/projects/{project_id}/repository/tags/{tag_name}' response = requests.delete(delete_tag_url, headers=headers) if response.status_code == 204: print(f"Tag '{tag_name}' deleted successfully.") elif response.status_code == 404: print(f"Tag '{tag_name}' not found.") else: print(f"Failed to delete tag '{tag_name}': {response.status_code}") print(response.json())
注意事项:
修改变量gitlab_url ,username,password,改为实际的值。
project_id,这个是项目id,在gitlab上打开某个项目,就可以看到Project ID
每次执行,只能删除20个tag,因为api接口,一次只能返回20个。