Git本地镜像

7

我有一个远程的git仓库,它有着庞大的历史记录和缓慢的连接通道。这个仓库有一些本地用户,但是在提交或克隆大量数据后,推送和拉取都变得非常缓慢。因此,我希望创建一个本地的镜像,并在后台同步远程仓库。我知道这是一个需求很高的问题,但我还没有找到任何解决方案(我不是远程仓库的管理员,我只想简化本地的操作)。


这篇之前的帖子将帮助您实现远程仓库的镜像 https://dev59.com/B2865IYBdhLWcg3wKLNP - Ozair Kafray
1
你们慢速远程仓库的提交问题只是本地用户的问题,还是其他地方也有人在工作? - Benjamin Bannier
@honk 是的。本地用户完成99%的工作,远程用户需要只读访问权限(或者非常少的提交)。我认为,远程-本地后台同步的速度将适合远程用户,如果同步尚未结束,他们必须有延迟。 - exbluesbreaker
2个回答

3

由于您在评论中提到导致连接缓慢的人会做大部分工作,因此建议您将缓慢的远程站点设置为本地存储库的镜像,以便对其进行提交。

首先,在本地服务器上创建缓慢远程站点的裸克隆。

$ git clone --bare git://slow/repo.git

你现在只需要把本地克隆版本提交,而不是慢速远程版本。

然后设置cron job或类似的工具,将本地仓库中的更改推送到慢速站点:

$ git push origin --mirror

通过使用--mirror,您告诉git推送所有分支和标签。

谢谢!我已经在我的测试 Github 存储库中测试,它可以正常工作。完整克隆真实远程存储库需要 20 小时或更长时间,而我近期将尝试使用这个解决方案来解决这个问题。 - exbluesbreaker
1
我发现,这个解决方案会删除所有在没有通过本地镜像访问的情况下对远程仓库所做的更改。有没有办法合并更改?向远程仓库提交的提交是罕见的事情,但我不想失去这样的提交。例如,一些本地开发人员可能会错误地直接继续向远程仓库提交。 - exbluesbreaker
@exbluesbreaker:你可以去掉 --mirror,但是这样你就需要指定要推送哪个分支,例如 git push origin master。然后你可能还想在推送时添加 --tags 以便一并推送标签。--mirror 将会自动推送所有本地分支和标签,因此它会自动完成所有这些操作(但会覆盖远程更改)。 - Benjamin Bannier
推送所有内容(所有分支,所有标签等),而不覆盖远程更改的命令是什么? - Thorbjørn Ravn Andersen
1
如果我没记错的话,git push origin "refs/*:refs/*"。请注意,"refs/*:refs/*"将拒绝非快进式更新,而"+refs/*:refs/*"将强制更新(覆盖)。 - Alberto

1

您应该能够使用浅克隆功能

git clone --depth=20 url-to-your-repo some-path

这应该让你不必再关注大部分历史记录。


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