gpt4 book ai didi

git - 始终保持 git 镜像同步

转载 作者:太空狗 更新时间:2023-10-29 13:02:30 30 4
gpt4 key购买 nike

我有几个使用 Drupal 的站点,我有几个服务器,live,dev1,dev2...

Drupal 的代码库存储库很大 (112Mb),所以我很想充分利用 git 的硬链接(hard link)功能,这样每次我添加一个站点时都不会复制它。

等等,比方说,我有一个裸主存储库的实时服务器,我所有的站点都是它的克隆,每个站点都使用不同的分支。这在一台服务器上很棒,使用了硬链接(hard link),速度快,效率高。

但在我的开发服务器上,它们通常都是从裸主存储库克隆的,这意味着同一台机器上的两个站点不能使用硬链接(hard link)来节省空间。

我想做的是在我的每台开发服务器上设置裸存储库的镜像,然后从中克隆。

dev1$ git clone --mirror live:master-bare-repo  dev1-mirror-repo
dev1$ git clone -b site1 dev1-mirror-repo site1
dev1$ git clone -b site2 dev1-mirror-repo site2

到目前为止一切都很好。但我希望镜子始终保持同步。所以我用了 post-receive hook在 dev1 的镜像上执行 git push --mirror origin。现在,如果 dev1 上的 site1 推送提交,它们会神奇地推送到 master-bare-repo。

但是如果我在实时服务器上进行更改并推送它会怎么样?我无法设置一个 post-receive Hook 来推送给其他人,因为这可能会触发 他们的 post-receive Hook 哪个会以递归结束?

有什么聪明的方法可以解决这个问题吗?

最佳答案

首先,您不会以递归结束,因为当“一切都是最新的”时不会执行接收后 Hook (如 this other question 中所述) ,这将是从镜像到实时服务器的推送的结果。

另一方面,这并不是可扩展设计的全部(每次添加新镜像时,您都需要更改实时服务器的 Hook 以添加要推送的站点)。您可能会发现在您的镜像中使用“惰性”同步策略更优雅:当他们收到推送时,他们不只是推送到主服务器,而是在此之前从主服务器获取/pull 。这样你就不需要在主服务器上设置 Hook ,同步策略将完全由镜像管理。这种策略的不利之处在于,您可能最终希望在需要推送任何更改之前对要传播到镜像的实时服务器进行更改。因此,您必须考虑对 master 进行更改对于补偿可扩展性的权衡是否如此重要。当然,使这种“可扩展”设计也“可同步”的补丁是使用外部 cron 作业定期检查 master 中的更改,如评论中所建议的那样。

关于git - 始终保持 git 镜像同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10851181/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com