.. _git_clone_subdirectory: ========================== git clone仓库指定子目录 ========================== 有时候,我们仅仅需要git代码仓库的一部分,例如一个子目录的数据。 我在 :ref:`deploy_deepseek-r1_locally_cpu_arch` 遇到这个问题,我只需要 ``unsloth/DeepSeek-R1-GGUF`` 仓库中的一个子目录 ``DeepSeek-R1-Q8_0`` 数据来部署满血版(8位量化)DeepSeek 该如何避免clone整个巨大的git仓库呢? 主要有3种方法: - 使用 sparse checkout ,这是最常用的方法 - 使用 git 归档 - 使用 partial clone (需要Git 2.19+) .. note:: 我最终因为下载文件量不多,并且我需要通过阿里云服务器中转,所以还是直接采用 :ref:`wget` 完成,本文作为后续参考 Sparse Checkout ================= 使用稀疏检出(sparse checkout)可以只check out某个部分工作目录,例如对于大型仓库,可能只需要部分子目录: 以下举例 https://huggingface.co/unsloth/DeepSeek-R1-GGUF 仓库下的子目录 ``DeepSeek-R1-Q8_0`` : .. literalinclude:: git_clone_subdirectory/git_sparse_checkout :caption: 使用git的 ``sparse checkout`` clone出部分目录 使用git archive ================ 使用 ``git archive`` 命令可以对某个子目录进行归档( ``tar`` 格式),所以通过管道 ``|`` 加上 ``tar`` 命令解包就可以完整clone出一个子目录: .. literalinclude:: git_clone_subdirectory/git_archive :caption: 通过 ``git archive`` 来获得子目录 部分clone(需要Git 2.19+) ========================== 部分clone功能可以只fetch需要的对象,虽然这个方法不如 sparse checkout 精确,但是减少了传输的数据量 .. literalinclude:: git_clone_subdirectory/git_partial_clone :caption: 部分clone 参考 ======== - `How to Clone Only a Subdirectory of a Git Repository? `_ - `How do I clone a subdirectory only of a Git repository? `_ - `Clone Only a Subdirectory of a Git Repository `_