这似乎是可行的,但在搜索时非常困难,我想其中一部分原因是“本地”和“缓存”这两个词在 Git(hub) 问题中都有过载的含义。
你应该查看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://
目前,此软件仅提供一个缓存来克隆和更新存储库,没有提供将更改推回的功能。对于某些用例,考虑到需要拉取多个存储库的内容,即使只有单个存储库发生了更改或自动化测试,这可能会很有用。
npm install -g git+https://git@github.com/jonasmalacofilho/git-cache-http-server.git
设置http_proxy。 - Tom Shen你最近的评论表明你正在寻找性能优化,这很有帮助。
你可以按照这些说明创建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。
可以使用git clone --reference-if-able
从另一个(在您的情况下为本地)仓库获取对象。
.git
仓库文件吗? - Tim Biegeleisen