Skip to content

可以直接写成一个 skill

使用 git sparse-checkout 下载 GitHub 仓库中的指定文件夹(详细教程)

本教程只使用 Git 现代 sparse-checkout 方法,这是最推荐的方式,因为它保留了完整的版本控制信息,允许你后续方便地同步更新。

准备工作

  • 确保你的 Git 版本 ≥ 2.25(运行 git --version 查看)。
  • 终端或 Git Bash。

步骤 1:初始化稀疏克隆(不检出文件)

打开终端,进入你希望存放项目的父目录,然后执行:

bash
git clone --filter=blob:none --no-checkout --sparse https://github.com/用户名/仓库名.git
cd 仓库名

参数解释:

  • --filter=blob:none:只下载必要的 Git 对象(不下载文件的实际内容,加速克隆)。
  • --no-checkout:克隆后不自动检出工作区文件。
  • --sparse:启用稀疏检出模式。
  • 仓库URL:示例 https://github.com/octocat/Hello-World.git

执行后,你会得到一个 .git 文件夹(完整的仓库历史),但工作区是空的。


步骤 2:指定需要下载的文件夹

使用 sparse-checkout set 命令告诉 Git 你只需要哪些路径:

bash
git sparse-checkout set "目标文件夹路径"
  • 路径写法:相对于仓库根目录的路径,例如 src/componentsdocs/api
  • 多个文件夹:可以一次设置多个,用空格分隔:git sparse-checkout set folder1 folder2 folder3
  • 路径中的空格:用引号包裹,例如 "My Folder"
  • 顶层的单个文件:也能指定文件路径,比如 README.md

步骤 3:检出文件到工作区

运行 checkout 命令,Git 就会根据你设置的稀疏规则,只下载并检出指定文件夹的内容:

bash
git checkout

稍等片刻,目标文件夹就会出现在当前目录中,里面就是你要的文件。


后续常用操作

操作命令
再添加一个文件夹git sparse-checkout add "另一文件夹"
查看当前稀疏模式git sparse-checkout list
取消稀疏检出(恢复完整仓库)git sparse-checkout disable
更新已下载的文件夹(拉取远程最新内容)git pull

完整示例

假设你想从 https://github.com/facebook/react 仓库中只下载 packages/react 文件夹:

bash
git clone --filter=blob:none --no-checkout --sparse https://github.com/facebook/react.git
cd react
git sparse-checkout set packages/react
git checkout

完成后,当前目录下就会出现 packages/react 文件夹及其所有内容,其余文件不会被下载。


常见问题

Q:为什么工作区还有 .gitignoreLICENSE 等顶层文件?
A:现代稀疏检出(默认 --cone 模式)会自动包含根目录下的文件,以确保项目能正常构建(例如 .gitignoreREADME.md)。如果你只想看到指定的文件夹,可以在 set 命令后加上 --no-cone
git sparse-checkout set --no-cone "目标文件夹/"
但这样需要手动排除根文件,一般不建议。

Q:如何切换分支?
A:直接 git checkout 其他分支名 即可。如果切换后缺失某些文件,重新运行 git sparse-checkout set 确保规则生效。

Q:Windows 下路径怎么写?
A:始终使用正斜杠 /,例如 src/components,不要用反斜杠 \

Q:克隆时网络中断怎么办?
A:进入 仓库名 目录,直接再次运行 git checkout 即可断点续传。


现在你已经可以使用 git sparse-checkout 精确下载 GitHub 仓库中的任意文件夹了。

记录学习,分享技术