Git Sparse Checkout 拉取远程指定文件或目录
大家都知道拉取远程仓库代码通过 Git 指令git clone来拉取,然而在实际业务需求中有时候不需要将整个仓库进行克隆,我只需要能够拉取到指定的文件到本地即可。
通过研究发现可以使用 Git 的 Sparse Checkout 功能来实现。
什么是 Sparse Checkout?
Sparse Checkout 是 Git 提供的一种功能,它允许我们在拉取远程仓库时只拉取部分文件,而不是整个仓库。这样可以节省时间和磁盘空间。
为了解决 Git 拉取大型仓库时过多冗余信息的问题而引入的功能。Git 拉取仓库时,如果不进行限制,会拉取整个仓库的所有文件和历史记录,这会占用大量的存储空间和网络带宽,而且会导致拉取时间过长。这对于一些大型仓库,如 Linux 内核源码仓库,是非常不友好的。
Sparse Checkout 可以让用户只拉取部分仓库内容,而不是全部拉取,从而减少存储空间、网络带宽和拉取时间。这个功能的实现是通过在仓库中添加 .git/info/sparse-checkout 文件,并在其中列出需要拉取的文件和目录路径。
需要注意的是,Sparse Checkout功能需要Git版本在1.7.0及以上,而且只能用于 Git 仓库的 clone 和 pull 操作。
Sparse Checkout 使用步骤
- 创建本地仓库:使用
Git init命令初始化本地仓库。 - 设置与远程仓库的连接:使用
git remote add origin repoUrl命令将本地仓库和远程地址进行关联,repoUrl为远程仓库地址。 - 启用 sparse-checkout 功能:
git config core.sparsecheckout true - 将要拉取的文件路径写入
sparse-checkout文件,位于.git/info/sparse-checkout。 (注意写入的文件名称不要有特殊字符会导致拉取失败的。)echo "path/to/directory/" >> .git/info/sparse-checkout echo "path/to/file" >> .git/info/sparse-checkout
- 更新仓库,只拉取指定文件:
git pull origin master
代码案例
新建 sparse-checkout.js 文件并写入以下代码:
/**
* 基于 sparse checkout 实现远程仓库指定文件拉取
*/
const { execSync } = require('child_process');
const { join } = require('path');
const repoUrl = 'https://github.com/xxx/xxx.git'; // 远程仓库地址
const filePath = 'test/*'; // 要拉取的文件路径
// 创建临时目录用于克隆仓库
const tempDir = join(__dirname, 'temp');
execSync(`mkdir -p ${tempDir}`);
// 进入临时目录
process.chdir(tempDir);
execSync(`git init`);
// 设置远程仓库地址到本地
execSync(`git remote add origin ${repoUrl}`);
// 进入仓库目录
process.chdir(join(tempDir));
// 开启 Sparse Checkout
execSync(`git config core.sparsecheckout true`);
// 将要拉取的文件路径写入 Sparse Checkout 文件
execSync(`echo ${filePath} >> .git/info/sparse-checkout`);
// 更新仓库,只拉取指定文件
execSync(`git pull origin master`);
在命令行通过 node 运行文件:
node .\sparse-checkout.js
控制台输出:
![]()
检查目录,发现生成了指定目录temp,并且里面包含指定拉取的 test 文件信息,并没有把整个仓库给拉取下来:

我们打开 .git/info/sparse-checkout 文件看一下,正是我们写入的指定文件,当我们开启了 Sparse Checkout git 在拉取的时候会根据 sparse-checkout 文件内容进行过滤拉取指定的文件信息。

设置多个文件路径
如果要设置多个文件路径,在.git/info/sparse-checkout 中每一行都是一个需要拉取的文件或目录的相对路。
我们可以将多个文件路径拼接成一个字符串,然后使用重定向符号 >> 将字符串写入到 .git/info/sparse-checkout 文件中,例如:
const filePaths = ['file1.txt', 'file2.txt', 'file3.txt'];
const filePathsString = filePaths.join('\n');
execSync(`echo "${filePathsString}" >> .git/info/sparse-checkout`);
使用 Sparse Checkout 可以方便地拉取远程仓库的指定文件或目录到本地,这对于开发和维护项目来说都是非常有用的。
以上关于Git Sparse Checkout 拉取远程指定文件或目录的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » Git Sparse Checkout 拉取远程指定文件或目录
微信
支付宝