如何透明地缓存 git clone?

如何透明地缓存 git clone?

我想提供持续集成服务(我计划使用hudson,但该解决方案也适用于其他人),该服务带有 Web 界面,用户将在其中定义 SCM URL(例如 URL git),并且用于构建的工作区/源根应在构建之前清理(至少可选)。这需要大量重复的签出,我想缓存这些签出(即让它们从本地存储中读取,而不是从远程资源中获取)。

不同的 SCM(gitsvnmercurial/ hg)使用不同的协议(HTTP、HTTPSgit等),其中一些可以被缓存(HTTP),其他通常不能(HTTPS 不使用中间人,这对于我想提供的可信服务来说是不可接受的)或特别不能(我没有找到任何git协议缓存服务器)。

缓存 HTTP 不是问题,但很少git有托管商支持它或重定向到 HTTPS。我想支持一种可靠地缓存结帐的协议并建议用户使用它。

HTTP 和协议可以通过 SOCKS 代理进行重定向git,但这样无法缓存。IGD 等其他协议也无法用于缓存。

答案1

您提到的问题确实存在,并且会引发很多问题,例如“我应该将答案缓存多长时间?如果我有两个项目的提交率差别很大怎么办?”。有一些专有解决方案可以满足您的要求,例如,如果您使用 Atlassian Stash,它有一个内置插件,可以管理签出答案缓存,以降低服务器负载。

无论如何,最好的解决方案与您想要做的事情不同。最好的和推荐的解决方案是使用提交后钩子,它们存在于 git、svn 中,我认为也存在于其他 vcs 中。只需让您的存储库触发 CI 系统上的构建,而不是 CI 作业持续轮询。正如您提到的 Jenkins (Hudson),例如 Git 插件已经提供了执行此类活动的 URL。

相关内容