如何从 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,稀疏检出限制工作区路径;实际节省取决于服务端支持和后续操作。
方法二:直接下整个 ZIP
仓库首页 → Code → Download ZIP,解压后取你要的目录。简单粗暴,适合仓库不大、只要代码不要历史的场景。
方法三:下载完整归档后仅解压所需目录
# 仍然下载完整归档;下列 --wildcards 参数为 GNU tar 写法
curl -L https://api.github.com/repos/org/repo/tarball/main | tar xz --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:私有仓库可以吗?
都可以,前提是本地有访问凭据(SSH key 或 PAT)。degit 对私有仓库需要配置 token。