github存储库的本地缓存?

Posted

技术标签:

【中文标题】github存储库的本地缓存?【英文标题】:local cache for a github repository? 【发布时间】:2015-08-25 01:06:45 【问题描述】:

我们使用 github 来管理我们的大量软件环境,我敢打赌,与许多其他组织一样,进出该仓库的绝大多数流量都来自我们的办公室。考虑到这一点,有没有办法为给定的 github 存储库构建本地缓存,但仍然具有云版本的保护?我在缓存代理服务器的模型中考虑这一点,本地服务器(大概在我们的建筑物中,在我们的本地网络上)将处理绝大多数克隆/拉取操作。

这似乎应该是可行的,但是搜索它非常困难,我认为这在很大程度上是因为“本地”和“缓存”这两个词具有超载的含义,尤其是对于 git(hub) 问题。

【问题讨论】:

每个存储库一个“本地缓存”。 你不能只备份你本地的.git repo 文件吗? 这是性能优化,不是备份。我希望普通用户执行“git pull”或“git clone”或其他任何操作,而不是将该请求发送到 github.com,我希望它转到某个具有 repo 缓存副本的本地服务器。 . 使这个过程可能快得多。我们每天都会在自动化测试中进行大量完整克隆,并且拥有一份存储在地理上靠近用户的磁盘上的 repo 副本会使事情变得更快。 【参考方案1】:

您应该查看git-cache-http-server project。我认为它部分实现了您需要的东西(并且类似于 @larsks 帖子中的想法)。

它是一个运行 HTTP 服务器的 NodeJS 软件,可让您访问本地缓存的 git 存储库。服务器会在需要时自动获取上游更改。如果您使用那些本地 git 存储库而不是远程存储库,您的 git 客户端将获得本地缓存的内容。

如果您在单独的主机(例如 VM 或容器)上运行 git-cache-http-server,您可以将本地 git 客户端配置为自动克隆并从缓存中获取,方法是将其配置为将 https://github.com 替换为类似http://gitcache/github.com。这可以通过如下配置来实现:

git config --global url."http://gitcache:1234/".insteadOf https://

目前,该软件仅提供缓存来克隆和更新存储库,没有提供将更改推回的规定。对于某些用例,考虑需要提取多个存储库的内容的 CI 基础架构,即使只有一个存储库发生更改或您提到的自动化测试,这可能很有用。

【讨论】:

我喜欢它。当我使用docker构建时,它可以节省很多时间。请安装 master 分支版本,因为它支持 http_proxy via npm install -g git+https://git@github.com/jonasmalacofilho/git-cache-http-server.git【参考方案2】:

您的最新评论表明您正在寻找性能优化。这有帮助。

您可以首先在these instructions 之后创建 github 存储库的本地镜像。您可以定期更新它,或者安排从 github 接收web hooks 以“按需”更新本地镜像。为此,您需要设置一个小型 Web 服务来响应来自 github 的钩子。您可以通过转到https://github.com/someuser/someproject/settings/hooks/new 添加网络挂钩。您可能需要选择“让我选择单个事件”单选按钮,然后选择:

删除 推 创建

这将使您的缓存在可用标签和分支的更改方面保持最新。

设置一个 git 服务器,使该存储库在本地可用。这可以像运行 git daemon 一样简单,也可以通过 ssh 访问本地帐户,或者功能更全面的东西,具体取决于您的本地要求。

然后你会像这样设置你的本地工作副本:

$ git clone http://localrepository/someproject.git
$ cd someproject
$ git remote set-url --push http://github.com/someuser/someproject.git

这会将每个存储库设置为从本地缓存中,但将更改向上游推送到 github。

【讨论】:

【参考方案3】:

查看git clone --reference-if-able 以从另一个(在您的情况下是现场)存储库中获取对象。

【讨论】:

我把它做成了一个脚本:unix.stackexchange.com/questions/650912/…

以上是关于github存储库的本地缓存?的主要内容,如果未能解决你的问题,请参考以下文章

javascript本地缓存方案-- 存储对象和设置过期时间

避免在 Relay 中缓存

没有本地存储库的 github

使用来自 GitHub 存储库的更改更新本地存储库

前端八股文浏览器系列:浏览器渲染前端路由前端缓存(HTTP缓存)缓存存储(HTTP缓存存储本地存储)

数据本地缓存(不包含图片缓存)