如何批量下载指定GitHub用户的全部仓库?求普通用户适用方案
如何下载某个GitHub用户的全部仓库(含自动下载方案)
当然有办法!不管是一次性拉取指定GitHub用户的所有公开仓库,还是自动同步更新,都有适合普通用户的简单方案,不用自己复杂开发,下面分Windows工具和PHP简易脚本两种方式给你说明:
一、Windows工具方案(无需写代码)
- 用Git Bash一键克隆所有仓库:
- 先安装Git,安装时记得勾选「Git Bash Here」选项,这样右键就能快速打开终端。
- 找一个空文件夹,右键选择「Git Bash Here」,输入下面的命令(把
username替换成你要下载的GitHub用户名):
这条命令会自动获取该用户的所有公开仓库地址,然后逐个克隆到当前文件夹里。curl -s https://api.github.com/users/username/repos?per_page=100 | grep -o 'git@github.com:[^"]*' | xargs -L1 git clone
- 自动定期同步更新:
如果你想定期自动更新这些仓库,可以写个简单的批处理脚本:
新建一个文本文件,把后缀改成.bat,粘贴下面的内容(替换username为目标用户名,你的仓库存放路径改成你本地要保存仓库的文件夹路径):
然后打开Windows的「任务计划程序」,设置定期运行这个批处理文件,就能自动同步最新的仓库内容了。@echo off cd /d "你的仓库存放路径" curl -s https://api.github.com/users/username/repos?per_page=100 | grep -o 'git@github.com:[^"]*' > repos.txt for /f "tokens=*" %%i in (repos.txt) do ( if not exist "%%~ni" ( git clone %%i ) else ( cd "%%~ni" git pull cd .. ) ) del repos.txt
二、PHP简易脚本(适合有基础的普通用户)
这个脚本不需要额外安装任何API库,只用PHP自带的curl功能就能实现,步骤很简单:
- 新建一个
download_repos.php文件,粘贴下面的代码(把$username换成目标GitHub用户名,$savePath改成你本地要保存仓库的路径):
<?php $username = "目标GitHub用户名"; $savePath = "./github_repos/"; // 本地保存路径,确保这个文件夹有读写权限 // 创建保存目录,如果不存在的话 if (!is_dir($savePath)) { mkdir($savePath, 0777, true); } // 获取用户的所有公开仓库信息 $url = "https://api.github.com/users/{$username}/repos?per_page=100"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0"); // 模拟浏览器请求,避免API被限制 $response = curl_exec($ch); curl_close($ch); $repos = json_decode($response, true); // 遍历处理每个仓库:克隆新的,更新已有的 foreach ($repos as $repo) { $repoUrl = $repo['clone_url']; $repoName = basename($repoUrl, ".git"); $localPath = $savePath . $repoName; echo "正在处理仓库:{$repoName}\n"; if (!is_dir($localPath)) { // 克隆新仓库 exec("git clone {$repoUrl} {$localPath}"); echo "✅ 已完成克隆\n"; } else { // 更新已有仓库 chdir($localPath); exec("git pull"); chdir($savePath); echo "✅ 已完成更新\n"; } } echo "\n所有仓库处理完毕!"; ?>
- 确保你的电脑已经安装了PHP和Git,然后打开命令行,切换到脚本所在的文件夹,运行:
php download_repos.php
脚本就会自动帮你下载或更新该用户的所有公开仓库了。
注意:以上方案仅适用于公开仓库,如果是私有仓库,需要在命令或脚本中添加GitHub的访问令牌(token),不过普通用户处理公开仓库的话,上面的方法完全够用。
内容的提问来源于stack exchange,提问作者T.Todua




