如何从 GitHub 只下载单个文件夹
GitHub 不直接支持下载单个文件夹。方案:sparse checkout(git clone --filter=blob:none --sparse 后 git sparse-checkout set <目录>)、GitHub API+下载、网页插件,或直接 Download ZIP 后解压取所需目录。
GitHub 网页没有"下载单个文件夹"的按钮,但有几条实用路径,最推荐 sparse checkout(稀疏检出):按需检出所需目录,并配合部分克隆减少文件内容传输;提交历史并不等同于浅克隆。
方法一:sparse checkout(推荐)
git clone --filter=blob:none --no-checkout https://github.com/org/repo.git
cd repo
git sparse-checkout init --cone
git sparse-checkout set path/to/folder
git checkout main
部分克隆推迟获取文件 blob,稀疏检出限制工作区路径;cone 模式还会保留根目录及所选路径祖先目录中的文件,不保证只有目标目录;实际节省取决于服务端支持和后续操作。
方法二:直接下整个 ZIP
仓库首页 → Code → Download ZIP,解压后取你要的目录。简单粗暴,适合仓库不大、只要代码不要历史的场景。
方法三:下载完整归档后仅解压所需目录
# 仍然下载完整归档;下列 --wildcards 参数为 GNU tar 写法
curl -fL -o repo.tar.gz https://api.github.com/repos/org/repo/tarball/main
tar tzf repo.tar.gz # 先确认归档路径与内容
# 确认后在独立目录中解压,以下为 GNU tar 参数
tar xzf repo.tar.gz --wildcards '*/path/to/folder/*'
方法四:第三方工具/插件
- 浏览器插件(如 GItZip)在网页上勾选文件夹下载;
- 命令行工具
degit:npx degit org/repo/path/to/folder(只拿该目录,不带 git 历史)。
常见问题(FAQ)
Q:单个文件呢?
文件简单:打开文件页点 Raw,或 curl -O https://raw.githubusercontent.com/org/repo/main/路径。大文件走 LFS 的要用 LFS 链接。
Q:sparse checkout 之后想加目录?
git sparse-checkout add another/folder,增量补充不用重新克隆。
Q:私有仓库可以吗?
取决于工具支持的认证方式:Git 的 SSH 凭据不等于 HTTP API 的访问令牌,degit/插件还需核对具体版本与私有仓库支持;不要把令牌交给未验证的第三方下载服务。