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 vianpm 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本地缓存方案-- 存储对象和设置过期时间