前言最近因为某些原因有个Github账号被封了导致里面积累的Star仓库需要手动迁移耗时费力且易遗漏所以借助GitHub API和一段Python代码即可完成全部收藏仓库的迁移代码importrequestsimporttime# 你的新 GitHub 用户名NEW_USERNAME***# 新账号的 GitHub Token必须有 public_repo 权限GITHUB_TOKENghp_****# 被封禁的用户名BANNED_USERNAME***# API 地址STARRED_APIfhttps://api.github.com/users/{BANNED_USERNAME}/starredHEADERS{Authorization:ftoken{GITHUB_TOKEN},Accept:application/vnd.github.v3json}defget_all_starred_repos():获取被封禁账号的所有 Star 仓库列表repos[]page1print(f正在获取 {BANNED_USERNAME}的所有 Star 仓库...)whileTrue:urlf{STARRED_API}?page{page}per_page100resprequests.get(url)ifresp.status_code!200:print(f获取失败状态码:{resp.status_code})breakdataresp.json()ifnotdata:breakforrepoindata:repos.append({full_name:repo[full_name],url:repo[html_url]})print(f已获取第{page}页累计{len(repos)}个)page1time.sleep(1)# 防限流print(f\n总共获取到{len(repos)}个 Star 仓库)returnreposdefstar_repos(repos):批量给新账号 Star 仓库success0failed[]totallen(repos)print(f\n开始批量 Star 到 {NEW_USERNAME}...)fori,repoinenumerate(repos,1):full_namerepo[full_name]urlfhttps://api.github.com/user/starred/{full_name}try:resprequests.put(url,headersHEADERS)ifresp.status_codein(204,404):# 204 Star 成功# 404 仓库不存在/已删除跳过success1print(f[{i}/{total}]{full_name})else:failed.append(full_name)print(f[{i}/{total}] 失败{full_name}| 状态码:{resp.status_code})time.sleep(2)# 防 GitHub API 限流exceptExceptionase:failed.append(full_name)print(f[{i}/{total}] 异常{full_name}|{str(e)})# 最终统计print(\n*50)print(f迁移完成)print(f成功 Star{success}个)print(f失败/不存在{len(failed)}个)iffailed:print(\n失败列表可手动检查)forfinfailed:print(f -{f})if__name____main__:starred_reposget_all_starred_repos()star_repos(starred_repos)使用方法首先获取新账号的 GitHub Token打开 GitHub → 右上角头像 → Settings左侧最底下 → Developer settings → Personal access tokens → Tokens (classic)点击 Generate new token (classic)勾选权限public_repo生成后复制 token然后补充脚本中NEW_USERNAME你的新GitHub用户名GITHUB_TOKEN你刚复制的tokenBANNED_USERNAME你的旧Github用户名