使用GIT Clone指定仓库的制定文件夹

要只克隆 GitHub 仓库中的一个文件夹,你需要使用 Git 的稀疏检出(sparse-checkout)功能。这个功能允许你只下载仓库中你指定的路径。

以下是具体的命令步骤:

  1. 初始化一个空的 Git 仓库:

    git init Confernces_BlackHat_USA_2025_Slides
    cd Confernces_BlackHat_2025_Slides
  2. 添加远程仓库地址:

    git remote add origin https://github.com/onhexgroup/Conferences.git
  3. 启用稀疏检出功能:

    git config core.sparseCheckout true
  4. 指定要克隆的文件夹路径。.git/info/sparse-checkout 文件中添加路径。这里我们只想要 BlackHat_USA_2025_Slides 文件夹及其所有内容:

    echo "BlackHat_USA_2025_Slides/" >> .git/info/sparse-checkout

    如果你只想要某个文件夹下的某个特定文件,可以写:BlackHat_USA_2025_Slides/your_file.pdf

  5. 拉取分支并执行稀疏检出:

    git pull origin master
    # 或者 git pull origin main, 具体取决于该仓库的主分支名称

执行完这些命令后,你的 Confernces_BlackHat_USA_2025_Slides 文件夹中就只会包含 Onhexgroup/Conferences 仓库下的 BlackHat_USA_2025_Slides 文件夹内容了。


# git pull origin main
remote: Enumerating objects: 1166, done.
remote: Counting objects: 100% (191/191), done.
remote: Compressing objects: 100% (127/127), done.
error: RPC failed; curl 18 Transferred a partial file KiB/s 
error: 6725 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output

这个错误信息 error: RPC failed; curl 18 Transferred a partial fileunexpected disconnect while reading sideband packetearly EOFinvalid index-pack output 通常表明在从 GitHub 拉取数据时发生了网络连接问题或传输中断。这可能是由于以下原因:

  • 不稳定的网络连接: 你的网络连接可能不够稳定,导致数据传输中断。
  • Git HTTP 缓冲区过小: Git 默认的 HTTP 缓冲区可能不足以处理大型仓库或包含大文件的传输。
  • 防火墙或代理问题: 防火墙或代理服务器可能会中断长时间的连接或大量数据的传输。
  • GitHub 服务器临时问题: 尽管不常见,但 GitHub 服务器偶尔也可能出现瞬时问题。

你可以尝试以下几种方法来解决这个问题:

  1. 增加 Git 的 HTTP Post 缓冲区大小: 这是最常见的解决方法,特别是在传输大文件或大量对象时。

    git config --global http.postBuffer 524288000

    这个命令将缓冲区设置为 500MB (524288000 字节)。你可以根据需要调整这个值,例如设置为 1GB (1073741824)。设置后再次尝试 git pull

  2. 检查你的网络连接:

    • 确保你的网络连接稳定。如果你在使用 Wi-Fi,尝试切换到有线连接。
    • 如果你在使用 VPN 或代理,尝试暂时禁用它们,看看问题是否解决。
  3. 使用 SSH 协议代替 HTTPS: 如果你的 HTTPS 连接有问题(例如,由于代理或防火墙),可以尝试使用 SSH 协议克隆仓库。

    • 首先,你需要在 GitHub 上设置 SSH 密钥。可以参考 GitHub 官方文档:生成新的 SSH 密钥并将其添加到 GitHub
    • 然后,在你的当前目录下,你需要改变远程仓库的 URL:
      git remote set-url origin git@github.com:onhexgroup/Conferences.git
    • 更改后,再尝试 git pull origin main
  4. 尝试禁用 Git 的 HTTP 压缩(不常用,但有时有效):

    git config --global http.compression false

    然后再次尝试 git pull

  5. 多次重试: 有时候这只是一个瞬时的网络问题,多尝试几次 git pull 可能就会成功。

建议你首先尝试第一种方法(增加 http.postBuffer),因为这是最常见且有效的解决方案。 如果仍然失败,再考虑网络设置和切换到 SSH 协议。