一、研究背景
最近需要查看之前写的代码,需要从远程仓库拉取项目,但仓库项目太大直接克隆的话,下载时间比较慢,因此研究如何使用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-如何在一个大型项目中只克隆一个目录】文章来源:https://www.toymoban.com/news/detail-845812.html
Git - git-sparse-checkout Documentation (git-scm.com)文章来源地址https://www.toymoban.com/news/detail-845812.html
到了这里,关于Git只克隆远程仓库的某一个目录或文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!