一个 GitHub 仓库的本地缓存?

20
我们使用 GitHub 管理大量的软件环境,我敢打赌和许多其他组织一样,对该存储库的大多数流量来自我们的办公室。考虑到这一点,是否有一种方法可以构建给定 GitHub 存储库的本地缓存,但仍具备云版本的保护?我考虑这是一个缓存代理服务器的模型,其中本地服务器(可能位于我们的建筑物中,在我们的本地网络上)将处理大部分克隆/拉取操作。
这似乎是可行的,但在搜索时非常困难,我想其中一部分原因是“本地”和“缓存”这两个词在 Git(hub) 问题中都有过载的含义。

2
每个代码库都是一个“本地缓存”。 - user2864740
你不能只是备份本地的.git仓库文件吗? - Tim Biegeleisen
2
这是一种性能优化,而不是备份。我希望普通用户可以执行“git pull”或“git clone”等操作,而不是将请求发送到github.com,而是将其发送到某个具有缓存副本的本地服务器...从而使该过程更快。我们每天在自动化测试中进行多次完整克隆,拥有一个与用户地理位置接近的磁盘上的仓库副本会使事情变得更快。 - ljwobker
3个回答

14

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

这是一个NodeJS软件,运行一个HTTP服务器,为您提供访问本地缓存的git存储库。服务器在必要时自动获取上游更改。如果您使用这些本地git仓库而不是远程仓库,则您的git客户端将服务于本地缓存内容。

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

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

目前,此软件仅提供一个缓存来克隆和更新存储库,没有提供将更改推回的功能。对于某些用例,考虑到需要拉取多个存储库的内容,即使只有单个存储库发生了更改或自动化测试,这可能会很有用。


我很喜欢它。当我使用Docker构建时,它可以节省很多时间。请安装主分支版本,因为它支持通过npm install -g git+https://git@github.com/jonasmalacofilho/git-cache-http-server.git设置http_proxy。 - Tom Shen
https://randyfay.com/content/reference-cache-repositories-speed-clones-git-clone-reference 或者使用内置的。^ 这个答案通常是一个粗略的解决方案。 - Richard Tyler Miles
Git参考文档 - Richard Tyler Miles

10

你最近的评论表明你正在寻找性能优化,这很有帮助。

你可以按照这些说明创建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

这将使每个代码库从您的本地缓存中拉取,但将更改上传到GitHub。


4

可以使用git clone --reference-if-able从另一个(在您的情况下为本地)仓库获取对象。


我将这个转化为了一个脚本:https://unix.stackexchange.com/questions/650912/is-it-possible-to-parse-a-commands-arguments-automatically/650927#650927 - Nishant
https://git-scm.com/docs/git-clone#git-clone---reference-if-ableltrepositorygt - Richard Tyler Miles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接