开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 0

openes/pygitall

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
main
分支 (1)
main
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
main
分支 (1)
main
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
main
分支 (1)
main
pygitall
/
gitall.py
pygitall
/
gitall.py
gitall.py 5.00 KB
一键复制 编辑 原始数据 按行查看 历史
稀风 提交于 2025年07月31日 09:31 +08:00 . update
# 使用说明:
# 使用 SSH 协议前,确保已将 SSH 公钥添加到 Gitee 账户
# ssh 方式: python gitall.py --token YOUR_TOKEN --user YOUR_USER_NAME
# https 方式: python gitall.py --token YOUR_TOKEN --user YOUR_USER_NAME --protocol https
import os
import json
import requests
import subprocess
import argparse
from urllib.parse import urlparse
def main():
# 参数解析
parser = argparse.ArgumentParser(description='批量下载 Gitee 所有仓库')
parser.add_argument('--token', required=True, help='Gitee 访问令牌')
parser.add_argument('--user', required=True, help='Gitee 用户名')
parser.add_argument('--output', default='./', help='保存目录(默认为当前目录)')
parser.add_argument('--protocol', choices=['ssh', 'https'], default='ssh', help='克隆协议(默认ssh)')
parser.add_argument('--depth', type=int, default=0, help='克隆深度(0表示完整克隆)')
args = parser.parse_args()
# 创建保存目录
save_dir = os.path.abspath(args.output)
os.makedirs(save_dir, exist_ok=True)
print(f"仓库将保存到: {save_dir}")
# API 配置
base_url = "https://gitee.com/api/v5"
headers = {"Authorization": f"token {args.token}"}
page = 1
per_page = 100 # 每页最大100条
total_repos = 0
cloned_count = 0
skipped_count = 0
failed_repos = []
print(f"\n开始获取 {args.user} 的仓库列表...")
try:
while True:
# 获取仓库数据
url = f"{base_url}/users/{args.user}/repos?page={page}&per_page={per_page}"
response = requests.get(url, headers=headers)
# 检查响应状态
if response.status_code != 200:
print(f"错误: API 请求失败 (状态码 {response.status_code})")
print(f"响应内容: {response.text[:200]}...")
break
repos = response.json()
# 检查是否为空响应
if not repos:
print("\n已获取所有仓库列表")
break
total_repos += len(repos)
print(f"第 {page} 页: 获取到 {len(repos)} 个仓库")
# 处理每个仓库
for repo in repos:
repo_name = repo['name']
owner_name = repo['owner']['login']
repo_path = os.path.join(save_dir, owner_name, repo_name)
# 选择克隆URL
if args.protocol == 'https':
clone_url = repo['clone_url']
# 在HTTPS URL中嵌入token用于认证
parsed = urlparse(clone_url)
clone_url = f"{parsed.scheme}://{args.user}:{args.token}@{parsed.netloc}{parsed.path}"
else:
clone_url = repo['ssh_url']
# 检查仓库是否存在
if os.path.exists(os.path.join(repo_path, '.git')):
print(f"✓ {repo_name} 已存在,跳过")
skipped_count += 1
continue
# 创建目录
os.makedirs(os.path.dirname(repo_path), exist_ok=True)
# 构建克隆命令
cmd = ['git', 'clone']
if args.depth > 0:
cmd.extend(['--depth', str(args.depth)])
cmd.extend([clone_url, repo_path])
print(f"\n▶ 正在克隆: {repo_name} ({clone_url})")
# 执行克隆
try:
result = subprocess.run(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True,
check=True
)
print(result.stdout)
cloned_count += 1
except subprocess.CalledProcessError as e:
print(f"克隆失败: {e.output}")
failed_repos.append({
'name': repo_name,
'url': clone_url,
'error': e.output.strip()[:100]
})
page += 1
# 输出总结
print("\n" + "="*50)
print(f"操作完成! 共处理 {total_repos} 个仓库")
print(f"✓ 成功克隆: {cloned_count}")
print(f"↻ 跳过已存在: {skipped_count}")
print(f"✗ 失败: {len(failed_repos)}")
if failed_repos:
print("\n失败的仓库:")
for repo in failed_repos:
print(f" - {repo['name']}: {repo['error']}")
print(f"\n所有仓库已保存到: {save_dir}")
except KeyboardInterrupt:
print("\n操作已取消")
except Exception as e:
print(f"\n发生未预期错误: {str(e)}")
if __name__ == "__main__":
main()
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

一次性克隆个人所有开源仓库
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/openes/pygitall.git
git@gitee.com:openes/pygitall.git
openes
pygitall
pygitall
main
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /