当前位置: 首页 > news >正文

告别手动!用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访问令牌是关键步骤:

  1. 登录Gitee官网,进入"设置"→"私人令牌"
  2. 点击"生成新令牌",勾选projects权限范围
  3. 安全保存生成的token字符串(页面关闭后将无法再次查看完整token)

常见权限问题排查:

错误代码可能原因解决方案
401Token无效或过期重新生成token
403权限不足检查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": f"token {ACCESS_TOKEN}"} url = f"https://gitee.com/api/v5/users/{USERNAME}/repos" try: response = requests.get(url, headers=headers) 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": f"token {ACCESS_TOKEN}"} url = f"https://gitee.com/api/v5/repos/{USERNAME}/{repo_name}" try: response = requests.delete(url, headers=headers) 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("仓库清理任务完成!")

关键改进点说明:

  1. 增加了异常处理机制,避免单个请求失败导致整个脚本中断
  2. 引入API调用间隔,防止触发Gitee的速率限制(默认1秒/次)
  3. 使用更直观的表情符号标记操作结果,提升终端输出可读性
  4. 将配置参数提取到脚本顶部,方便快速修改

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": f"token {ACCESS_TOKEN}"} url = f"https://gitee.com/api/v5/repos/{USERNAME}/{repo_name}" data = {"archived": True} response = requests.patch(url, headers=headers, json=data) 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(stop=stop_after_attempt(3), wait=wait_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, headers=headers, timeout=10)

日志记录最佳实践

  • 将操作记录保存到文件:
import logging logging.basicConfig( filename='gitee_cleaner.log', level=logging.INFO, format='%(asctime)s - %(message)s' ) def delete_single_repo(repo_name): try: # ...原有逻辑... logging.info(f"Deleted: {repo_name}") except Exception as e: logging.error(f"Fail 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+个废弃仓库。最惊喜的是有位同事将其改造成了定时任务,每周自动归档超过一个月未更新的测试项目。如果你在使用的过程中有任何改进建议,欢迎在评论区分享你的实战经验。

http://www.zskr.cn/news/1425848.html

相关文章:

  • 江阴市黄金回收白银回收门店推荐 2026年最新黄金回收门店口碑排行榜+联系方式 - 盛世金银回收
  • 2025-2026年北京老房改造装修公司推荐:口碑好的服务提供老房隔音差影响睡眠质量解决方案 - 品牌推荐
  • CLM区域模拟避坑指南:自定义CMFD大气强迫时,你的domain文件真的配好了吗?
  • 2026年龙岩市最新黄金回收靠谱门店口碑榜 黄金+K金+白银+铂金回收门店TOP5排行榜+联系方式 - 大熊猫898989
  • 江油市黄金回收白银回收门店推荐 2026年最新黄金回收门店口碑排行榜+联系方式 - 盛世金银回收
  • 人形机器人行业技术岗系统架构师晋升CTO都要经历什么职位?时间?薪资?
  • 服务网格Istio在AI微服务架构中的核心价值与实战部署
  • 根河市黄金回收白银回收门店推荐 2026年最新黄金回收门店口碑排行榜+联系方式 - 盛世金银回收
  • 胶州市黄金回收白银回收门店推荐 2026年最新黄金回收门店口碑排行榜+联系方式 - 盛世金银回收
  • 2026年莱西市最新黄金回收靠谱门店口碑榜 黄金+K金+白银+铂金回收门店TOP5排行榜+联系方式 - 大熊猫898989
  • 多层级苹果预冷过程模拟及预冷控制决策优化方案【附代码】
  • 上位机知识篇---SDK
  • 伺服控制入门 第二章——伺服控制的通信协议基础(二)
  • 焦作市黄金回收白银回收门店推荐 2026年最新黄金回收门店口碑排行榜+联系方式 - 盛世金银回收
  • 虚假信息全链条解析:从AI生成到区块链溯源的对抗策略
  • 揭阳市黄金回收白银回收门店推荐 2026年最新黄金回收门店口碑排行榜+联系方式 - 盛世金银回收
  • 171、运动控制中的标定:摩擦力与死区补偿标定
  • 告别编译噩梦:用CP2K Toolchain脚本在Ubuntu上一键搞定GCC、GFortran和MKL依赖
  • AI Agent:macOS Sequoia 部署 OpenClaw 完整教程
  • 大语言模型代码切换推理行为:分类、评估与优化实践
  • Windows Server 2008 R2上MySQL 8.0保姆级安装教程(含VCRUNTIME140.dll报错解决方案)
  • 别再Switch硬凑了!手把手教你用Simulink三维查表搞定动态Z轴数据(附完整模型)
  • 科技巨头降本增效实战:云成本优化与新兴技术战略解析
  • 接口设计说明
  • 别再只会systemctl restart了!深入Linux服务管理:以lightdm启动失败为例讲透systemd日志分析
  • 告别密密麻麻!ECharts legend数量太多?用scroll分页和vertical布局轻松搞定
  • 别再手动调优了!Spark动态资源分配实战:从YARN到K8s的完整配置与避坑指南
  • 虚拟观众框架:从单向输出到双向模拟的内容创作效能提升指南
  • 2026年最新口碑手机阅读器排行榜,你的选择指南
  • 如何通过编译规则强制AI服从:实现结构化与确定性输出的工程实践