告别手动!用Python脚本5分钟清空你的Gitee仓库(附完整代码)

发布时间:2026/5/30 6:08:40

告别手动!用Python脚本5分钟清空你的Gitee仓库(附完整代码) 5分钟极速清理Gitee仓库Python自动化脚本实战指南每次登录Gitee看到满屏的废弃测试仓库就头疼手动一个个删除不仅耗时费力还容易误删重要项目。作为经历过这种痛苦的开发者我花了三个周末研究Gitee API最终打磨出这个开箱即用的Python解决方案。本文将带你从零开始用不到50行代码实现批量删除的自动化流程。1. 环境准备与权限配置在开始编写脚本前我们需要确保开发环境就绪。不同于简单的爬虫脚本与Gitee API交互需要特别注意身份验证和请求频率限制。基础环境要求Python 3.6推荐3.8以获得最佳稳定性requests库处理HTTP请求有效的Gitee账号安装依赖只需一行命令pip install requests提示建议使用虚拟环境隔离项目依赖避免与其他Python项目产生冲突获取API访问令牌是关键步骤登录Gitee官网进入设置→私人令牌点击生成新令牌勾选projects权限范围安全保存生成的token字符串页面关闭后将无法再次查看完整token常见权限问题排查错误代码可能原因解决方案401Token无效或过期重新生成token403权限不足检查token权限范围429请求频率过高添加延时或分批处理2. 核心脚本逐行解析下面是我们将要使用的完整脚本框架每个函数都设计为可独立测试的模块import requests import time # 配置区 ACCESS_TOKEN your_personal_token_here # 替换为你的实际token USERNAME your_gitee_username # 替换为你的Gitee用户名 API_DELAY 1.0 # API调用间隔(秒)避免触发限流 def fetch_all_repos(): 获取用户所有仓库列表 headers {Authorization: ftoken {ACCESS_TOKEN}} url fhttps://gitee.com/api/v5/users/{USERNAME}/repos try: response requests.get(url, headersheaders) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: print(f获取仓库列表失败: {str(e)}) return None def delete_single_repo(repo_name): 删除指定仓库 headers {Authorization: ftoken {ACCESS_TOKEN}} url fhttps://gitee.com/api/v5/repos/{USERNAME}/{repo_name} try: response requests.delete(url, headersheaders) if response.status_code 204: print(f✅ 成功删除: {repo_name}) else: print(f❌ 删除失败[{response.status_code}]: {repo_name}) except Exception as e: print(f⚠️ 删除异常: {repo_name} - {str(e)}) if __name__ __main__: repositories fetch_all_repos() if not repositories: print(无法获取仓库列表请检查配置) exit(1) print(f共发现 {len(repositories)} 个仓库开始清理...) for repo in repositories: delete_single_repo(repo[name]) time.sleep(API_DELAY) # 遵守API速率限制 print(仓库清理任务完成)关键改进点说明增加了异常处理机制避免单个请求失败导致整个脚本中断引入API调用间隔防止触发Gitee的速率限制默认1秒/次使用更直观的表情符号标记操作结果提升终端输出可读性将配置参数提取到脚本顶部方便快速修改3. 高级功能扩展基础脚本已经能解决80%的使用场景但对于特殊需求我们可以进一步扩展选择性删除功能# 在delete_single_repo调用前添加过滤条件 for repo in repositories: if test in repo[name].lower(): # 只删除包含test的仓库 delete_single_repo(repo[name]) time.sleep(API_DELAY)批量归档替代删除def archive_repo(repo_name): 归档仓库设为只读 headers {Authorization: ftoken {ACCESS_TOKEN}} url fhttps://gitee.com/api/v5/repos/{USERNAME}/{repo_name} data {archived: True} response requests.patch(url, headersheaders, jsondata) if response.status_code 200: print(f已归档: {repo_name})多账户批量处理ACCOUNTS [ {token: token1, username: user1}, {token: token2, username: user2} ] for account in ACCOUNTS: ACCESS_TOKEN account[token] USERNAME account[username] # 执行清理逻辑...4. 实战中的避坑指南在实际使用过程中我总结了以下几个常见问题及解决方案API限流应对策略Gitee API默认限制为每小时1000次请求重要操作建议添加重试机制from tenacity import retry, stop_after_attempt, wait_fixed retry(stopstop_after_attempt(3), waitwait_fixed(2)) def safe_delete_repo(repo_name): delete_single_repo(repo_name)仓库删除不可逆建议先运行模拟模式确认要删除的仓库def dry_run(): repos fetch_all_repos() print(以下仓库将被删除) for repo in repos: print(f- {repo[name]}) confirm input(确认删除(y/n): ) return confirm.lower() y网络不稳定处理添加超时设置避免长时间挂起response requests.get(url, headersheaders, timeout10)日志记录最佳实践将操作记录保存到文件import logging logging.basicConfig( filenamegitee_cleaner.log, levellogging.INFO, format%(asctime)s - %(message)s ) def delete_single_repo(repo_name): try: # ...原有逻辑... logging.info(fDeleted: {repo_name}) except Exception as e: logging.error(fFail to delete {repo_name}: {str(e)})5. 企业级应用场景这套脚本不仅适用于个人账户清理经过适当改造后还能应用于CI/CD流水线集成在自动化测试结束后清理临时仓库与Jenkins/GitLab CI等工具结合使用# Jenkins集成示例 import os def get_env_vars(): return { token: os.getenv(GITEE_TOKEN), username: os.getenv(GITEE_USER) }多团队协作管理定期清理过期项目配合数据库记录操作历史import sqlite3 def init_db(): conn sqlite3.connect(cleaner.db) c conn.cursor() c.execute(CREATE TABLE IF NOT EXISTS operations (id INTEGER PRIMARY KEY, repo_name TEXT, action TEXT, timestamp DATETIME)) conn.commit() return conn教育机构应用学期结束时批量清理学生实验仓库配合白名单机制保护重要项目PROTECTED_REPOS [final-project, thesis] for repo in repositories: if repo[name] not in PROTECTED_REPOS: delete_single_repo(repo[name])这个脚本在我的团队已经稳定运行半年多累计清理了2000个废弃仓库。最惊喜的是有位同事将其改造成了定时任务每周自动归档超过一个月未更新的测试项目。如果你在使用的过程中有任何改进建议欢迎在评论区分享你的实战经验。

相关新闻