Git只克隆远程仓库的某一个目录或文件

本文介绍了如何在Git中使用稀疏克隆和sparse-checkout功能,以减少大型项目克隆时的时间和存储消耗。通过过滤blob文件、指定克隆目录和使用sparse-checkout,可以精确地拉取所需文件,从而提高效率并节省空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、研究背景

最近需要查看之前写的代码,需要从远程仓库拉取项目,但仓库项目太大直接克隆的话,下载时间比较慢,因此研究如何使用git只克隆需要的目录文件。下面是查看目录文件大小的命令:

# 查看.git文件的大小
du -sh .git
# 查看当前项目目录的大小
du -sh .
# 列出当前目录所有文件及大小
du .

下图是一个仓库的直接git克隆测试,发现项目.git文件大小为4.2M,整个项目目录大小为9.9M。

但是我们并不要远程仓库项目的所有文件,那应该怎么实现只克隆某一个目录或文件呢?

二、实践步骤

要实现只克隆某一个目录或文件,可以使用Git提供的方法,包括稀疏克隆和sparse-checkout操作。

2.1、稀疏克隆

过滤掉Blob文件,可以减少git克隆时的下载量。

# 过滤掉blob文件
git clone --filter=blob:none --sparse <your-git-url>
  • --filter=blob:none:指定克隆过程中不包含任何 blob 对象(文件内容),只克隆 commit 对象、tree 对象、tag对象。这可以大大减少克隆操作所需要的时间和存储空间,特别适用于大型仓库,减少不必要的数据传输和占用空间。

  • --sparse:该参数告诉 Git 使用稀疏(sparse)克隆的方式来克隆仓库。稀疏克隆是一种仅克隆部分文件和目录的方式,而不是将整个仓库都完整地克隆下来,有助于减少克隆所需的时间和空间。

该命令的含义是开启git稀疏克隆,并下载除了具体的文件内容Blob对象之外的其他对象文件,包括tree对象、commit对象、tag对象,以保证git历史记录和项目目录结构的完整性。这样可以实现快速、高效地克隆大型仓库,并节省存储空间。在过滤掉Blob文件后,只包含了一小部分文件,整个克隆下载的来的项目大小只有428k。但是并没有包含我们需要的目录或文件。

2.2、指定拉取(sparse-checkout)

使用git sparse-checkout命令来指定从git远程仓库拉取我们所需要的目录或文件到工作目录中,执行以下命令:

# 指定git拉取的目录文件
git sparse-checkout add <your-folder>
# 或者
git sparse-checkout set <your-folder>

添加front-end/seven-house-manage/src/views/dashboard之后,本地项目目录就会出现front-end/*相关文件,项目目录大小为576k,如下图所示。到这里基本就实现了git只拉取某一个目录或文件。

设置关注的目录,之前下载关注的front-end/seven-house-manage/src/views/dashboard就会被删掉,转到src目录下我们可以执行git相关操作并不会受到影响,包括打标签、新建分支、提交代码等。

# 设置关注的目录
git sparse-checkout set <your-folder>

2.3、文件对象

如果你想要查看文件对象类型或其他信息,可以使用以下命令:

# 查看特定文件的对象类型和哈希值
git cat-file -p HEAD:<file_path>

<file_path> 替换为你要查看的文件的路径。

# 查看特定文件所在目录的内容
git ls-tree HEAD <directory_path>

<directory_path> 替换为你要查看的目录的路径。

三、参考文献

【GitFAQ-如何在一个大型项目中只克隆一个目录】

Git - git-sparse-checkout Documentation (git-scm.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值