# Git 与 HTTP 范式

`huggingface_hub` 库是一个用于与 Hugging Face Hub 交互的库，Hub 是一组基于 git 的仓库（模型、数据集或 Spaces）。使用 `huggingface_hub` 访问 Hub 主要有两种方式。

第一种方法，即所谓的“基于 git”的方法，依赖于直接在终端中使用标准的 `git` 命令。该方法允许你克隆仓库、创建提交并手动推送更改。第二种选项称为“基于 HTTP”的方法，涉及使用 [HfApi](/docs/huggingface_hub/v2.4.0/zh/package_reference/hf_api#huggingface_hub.HfApi) 客户端发起 HTTP 请求。让我们来看看每种方法的优缺点。

## Git：基于历史 CLI 的方法

最初，大多数用户使用普通的 `git` 命令与 Hugging Face Hub 进行交互，例如 `git clone`、`git add`、`git commit`、`git push`、`git tag` 或 `git checkout`。

这种方法允许您在本地机器上操作仓库的完整本地副本，与传统软件开发中的做法相同。当您需要进行离线访问或希望处理仓库的完整历史记录时，这可能是一个优势。然而，它也存在一些缺点：您需要负责在本地保持仓库的最新状态、处理身份验证凭据以及管理大文件（通过 `git-lfs`），在处理大型机器学习模型或数据集时，这些操作可能会变得繁琐。

在许多机器学习工作流中，您可能只需要下载少量文件用于推理，或者在不克隆整个仓库的情况下转换权重。在这种情况下，使用 `git` 可能过于繁琐，并会引入不必要的复杂性。

## HfApi：一个灵活且便捷的 HTTP 客户端

[HfApi](/docs/huggingface_hub/v2.4.0/zh/package_reference/hf_api#huggingface_hub.HfApi) 类的开发旨在提供一种替代方案，以取代使用本地 git 仓库。维护本地 git 仓库往往较为繁琐，尤其是在处理大型模型或数据集时。[HfApi](/docs/huggingface_hub/v2.4.0/zh/package_reference/hf_api#huggingface_hub.HfApi) 类提供了与基于 git 的工作流相同的功能——例如下载和推送文件、创建分支和标签——但无需维护一个需要保持同步的本地文件夹。

除了 `git` 已提供的功能外，[HfApi](/docs/huggingface_hub/v2.4.0/zh/package_reference/hf_api#huggingface_hub.HfApi) 类还提供了更多功能，例如管理仓库、使用缓存下载文件以实现高效复用、在 Hub 中搜索仓库和元数据、访问社区功能（如讨论、PR 和评论），以及配置 Spaces 的硬件和密钥。

## 我该使用什么？何时使用？

总体而言，**基于 HTTP 的方式是推荐在所有情况下使用** `huggingface_hub` 的方法。[HfApi](/docs/huggingface_hub/v2.4.0/zh/package_reference/hf_api#huggingface_hub.HfApi) 允许你拉取和推送更改、处理 PR、标签和分支、与讨论进行交互等等。

然而，并非所有 git 命令都可以通过 [HfApi](/docs/huggingface_hub/v2.4.0/zh/package_reference/hf_api#huggingface_hub.HfApi) 使用。有些命令可能永远不会被实现，但我们一直在努力改进并缩小差距。如果您发现自己的使用场景未被覆盖，请在 [GitHub 上提交 issue](https://github.com/huggingface/huggingface_hub)！我们欢迎反馈，以帮助我们与用户一起构建 HF 生态系统。

相较于直接使用 `git` 命令，更倾向于使用基于 HTTP 的 [HfApi](/docs/huggingface_hub/v2.4.0/zh/package_reference/hf_api#huggingface_hub.HfApi)，并不意味着 git 版本控制功能会很快从 Hugging Face Hub 中消失。在适用场景中，始终可以在本地使用 `git`。

