GitHub或GitLab等Git托管服务如何存储和服务所有版本的文件



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为每个快照的每个文件都有一个页面。

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

如有任何见解,不胜感激。

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

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

文件服务器和web前端位于功能强大、连接快速的服务器上的同一个数据中心中,通常这样做对性能的影响很小。

最新更新