github存储库的本地缓存?

ljw*_*ker 13 git proxy caching github

我们使用github来管理我们的大量软件环境,并且我会像许多其他组织一样下注,来自该回购的绝大多数流量来自我们的办公室.考虑到这一点,有没有办法构建给定github存储库的本地缓存,但仍然保护云版本?我在缓存代理服务器的模型中考虑到这一点,本地服务器(可能在我们的建筑物中,在我们的本地网络上)将处理绝大多数克隆/拉取操作.

这似乎应该是可行的,但是搜索这一点非常困难,我认为在很大程度上因为"本地"和"缓存"这些词语的含义过多,特别是对于git(hub)问题.

lar*_*sks 7

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

您可以按照这些说明创建github存储库的本地镜像.您可以定期更新它,或安排从github 接收Web挂钩以"按需"更新本地镜像.为此,您需要设置一个小型Web服务,以响应来自github的挂钩.您可以通过访问https://github.com/someuser/someproject/settings/hooks/new来添加Web挂钩.您可能想要选择"让我选择单个事件"单选按钮,然后选择:

  • 删除
  • 创建

这将使您的缓存与可用标记和分支的更改保持同步.

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

然后你会设置你的本地工作副本,如下所示:

$ git clone http://localrepository/someproject.git
$ cd someproject
$ git remote set-url --push http://github.com/someuser/someproject.git
Run Code Online (Sandbox Code Playgroud)

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


Ton*_*nin 7

你应该看看git-cache-http-server项目.我认为它部分实现了你需要的东西(和@larsks帖子中的想法类似).

它是一个NodeJS软件,运行HTTP服务器,为您提供对本地缓存的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://
Run Code Online (Sandbox Code Playgroud)

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