赞
踩
最近需要查看之前写的代码,需要从远程仓库拉取项目,但仓库项目太大直接克隆的话,下载时间比较慢,因此研究如何使用git只克隆需要的目录文件。下面是查看目录文件大小的命令:
- # 查看.git文件的大小
- du -sh .git
- # 查看当前项目目录的大小
- du -sh .
- # 列出当前目录所有文件及大小
- du .
下图是一个仓库的直接git克隆测试,发现项目.git文件大小为4.2M,整个项目目录大小为9.9M。
但是我们并不要远程仓库项目的所有文件,那应该怎么实现只克隆某一个目录或文件呢?
要实现只克隆某一个目录或文件,可以使用Git提供的方法,包括稀疏克隆和sparse-checkout操作。
过滤掉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。但是并没有包含我们需要的目录或文件。
使用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>
如果你想要查看文件对象类型或其他信息,可以使用以下命令:
- # 查看特定文件的对象类型和哈希值
- git cat-file -p HEAD:<file_path>
将 <file_path>
替换为你要查看的文件的路径。
- # 查看特定文件所在目录的内容
- git ls-tree HEAD <directory_path>
将 <directory_path>
替换为你要查看的目录的路径。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。