当前位置: 首页 > 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.jsqmd.com/news/914536/

相关文章:

  • 卖铝箔怎么找客户?下游工厂在哪里
  • 2025-2026年上海靠谱搬家公司推荐:口碑好的服务解决跨城搬家物品多且易损注意事项 - 品牌推荐
  • 垄断场景加智能算法,揭秘高铁流量背后的营销爆破术
  • 2026年龙泉市最新黄金回收靠谱门店口碑榜 黄金+K金+白银+铂金回收门店TOP5排行榜+联系方式 - 大熊猫898989
  • QEMU 立场松动:拟允许非关键领域接受 AI/LLM 贡献
  • 企业AI落地实战:从认知升级到五步实施路径
  • 江阴市黄金回收白银回收门店推荐 2026年最新黄金回收门店口碑排行榜+联系方式 - 盛世金银回收
  • 2026年昆山市最新黄金回收靠谱门店口碑榜 黄金+K金+白银+铂金回收门店TOP5排行榜+联系方式 - 大熊猫898989
  • 震惊!原来毕业论文可以这样写?2026降AI率工具推荐合集
  • 2025-2026年北京老房改造装修公司推荐:口碑好的服务提供老房隔音差影响睡眠质量解决方案 - 品牌推荐
  • STM32F103C8T6最小系统板驱动SYN6288语音播报模块,5分钟实现智能语音播报(附完整代码)
  • CLM区域模拟避坑指南:自定义CMFD大气强迫时,你的domain文件真的配好了吗?
  • 2026年龙岩市最新黄金回收靠谱门店口碑榜 黄金+K金+白银+铂金回收门店TOP5排行榜+联系方式 - 大熊猫898989
  • 卖激光切割机怎么找客户?下游工厂在哪里
  • 江油市黄金回收白银回收门店推荐 2026年最新黄金回收门店口碑排行榜+联系方式 - 盛世金银回收
  • 2026年来宾市最新黄金回收靠谱门店口碑榜 黄金+K金+白银+铂金回收门店TOP5排行榜+联系方式 - 大熊猫898989
  • 人形机器人行业技术岗系统架构师晋升CTO都要经历什么职位?时间?薪资?
  • AI驱动基因编辑与反灭绝工程:从基因组学到生态修复的技术革命
  • Unity AI坦克实战:从NavMesh寻路到触发器攻击,手把手教你打造会追人会开火的智能敌人
  • 2026年隆昌市最新黄金回收靠谱门店口碑榜 黄金+K金+白银+铂金回收门店TOP5排行榜+联系方式 - 大熊猫898989
  • 服务网格Istio在AI微服务架构中的核心价值与实战部署
  • 根河市黄金回收白银回收门店推荐 2026年最新黄金回收门店口碑排行榜+联系方式 - 盛世金银回收
  • 从零构建AI智能体:基于LangChain与GPT的联网搜索助手实战
  • 2026远程控制软件选购指南:按人群场景预算一站式锁定,ToDesk覆盖90%用户需求
  • 胶州市黄金回收白银回收门店推荐 2026年最新黄金回收门店口碑排行榜+联系方式 - 盛世金银回收
  • 2026年莱西市最新黄金回收靠谱门店口碑榜 黄金+K金+白银+铂金回收门店TOP5排行榜+联系方式 - 大熊猫898989
  • 多层级苹果预冷过程模拟及预冷控制决策优化方案【附代码】
  • 伺服控制入门 第二章——伺服控制的通信协议基础(二)
  • UE4材质Usage详解:为什么你的Skeletal Mesh打包后‘丢了衣服’?
  • 上位机知识篇---SDK