如何从 GitHub 只下载单个文件夹

GitHub 不直接支持下载单个文件夹。方案:sparse checkout(git clone --filter=blob:none --sparse 后 git sparse-checkout set <目录>)、GitHub API+下载、网页插件,或直接 Download ZIP 后解压取所需目录。

最佳实践
Git 分支协作与合并示意

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/插件还需核对具体版本与私有仓库支持;不要把令牌交给未验证的第三方下载服务。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台