首页 > 解决方案 > Git 托管服务(如 GitHub 或 GitLab)如何存储和提供所有版本的文件?

问题描述

GitHub 的一个有用功能是它提供单个文件的各种视图。例如,如果我们取一个文件,

  1. 提交中文件的快照:https ://github.com/pandas-dev/pandas/blob/5c8f4817500313a8b942ac9e189248f1077272f8/index.html
  2. 分支中的一个版本:https ://github.com/pandas-dev/pandas/blob/gh-pages/index.html

等等...

基本上 GitHub/GitLab 为每个快照的每个文件都有一个页面。

我想知道这是如何在后端实现的。他们是否单独存储和索引每个快照,以便可以快速提供服务?还是他们实时加载它们?如果他们存储每个文件的每个快照,那么在存储方面感觉有点低效。

将不胜感激任何见解。

标签: gitgithubgitlab

解决方案


GitHub 将 Git 数据存储在普通的 Git 存储库中。当需要 Git 数据来呈现任何类型的页面时,会向文件服务器发出对适当类型数据的 RPC 请求并返回数据,然后突出显示(如果需要)并呈现。GitHub 使用 Git 的许多高级功能来提供对数据的最有效访问。

RPC 调用有多种类型,可以为不同类型的页面和其他需要它们操作的服务(如 GPG 验证服务)提供不同类型的数据。这些 RPC 调用使用 Git 或 libgit2 来获取和处理数据。

文件服务器和 Web 前端存在于具有快速连接的强大服务器上的同一数据中心中,通常这种方式对性能的影响是最小的。


推荐阅读