Git - 哑HTTP协议



Git 哑HTTP 协议也称为 旧版HTTP协议。它是通过HTTP提供Git仓库的较旧且更简单的方法。

Git被视为文件的集合,这些文件以静态方式提供。

主要特性

1. 基于文件系统 - 在哑HTTP中,文件以静态方式提供。提交、blob、树等对象是通过一个接一个地从服务器下载来检索的。

2. 缺少Git特定逻辑 - 服务器上不需要任何Git特定服务或命令。任何可用的Web服务器,例如Apache,都可以将git目录作为一组文件提供。

3. 效率低下 - 由于服务器不需要任何Git特定命令,用户必须一次一个地执行克隆、拉取、获取等操作。这使得整个过程相当缓慢。

4. 缺少智能协商 - 会发生冗余和不必要的对象下载,因为哑HTTP不会与客户端协商。

5. 只读 - 哑HTTP是只读的。它允许你克隆、拉取和获取仓库,但你不能向服务器推送任何内容。

  • 在哑HTTP中,Web服务器直接将原始Git仓库作为文件提供。

  • 为了设置哑HTTP,必须在HTTP文档根目录下安装一个裸Git仓库,并且必须设置一个post-update钩子来处理仓库更新。

  • 启用后,任何有权访问托管它的Web服务器的用户都可以使用哑HTTP克隆仓库。

  • 虽然它缺乏智能HTTP的复杂功能,但哑HTTP使通过HTTP进行的Git操作更简单、更易于访问。

工作原理?

克隆或获取仓库时,会发出一系列HTTP请求。

  • 来自.git/objects/目录的单个对象。

  • 来自.git/refs的引用信息。

  • 来自.git/objects/pack的Pack文件。

由于哑HTTP中的每个对象都被视为并下载为单独的HTTP请求,因此整体性能较慢。

要通过HTTP启用对我们的Git仓库的读取访问,请按照以下步骤操作

cd /var/www/htdocs/
git clone --bare /path/to/git_project gitproject.git
cd gitproject.git
mv hooks/post-update.sample hooks/post-update
chmod a+x hooks/post-update

Git的默认post-update钩子运行git update-server-info以保持HTTP获取和克隆正常工作。

  • 当更改被推送到仓库时,包括通过SSH,此钩子会自动触发。

  • 推送仓库后,其他用户可以通过运行类似git clone http://example.com/path/to/repo.git的命令来克隆它。

  • 通过检索仓库的完整副本,此命令确保所有相关元数据都是最新的,并且可以通过HTTP访问。

广告