6

我有兴趣将本地 git 存储库设置为远程存储库的镜像。我已经阅读了一些可能相关的帖子,但主要区别在于我需要对两个存储库进行读写访问。

大多数时候,用户会针对 Repo A 工作,但是有时他们会针对 Repo B 工作,并且这些需要通过服务器到服务器的流量保持同步。

这里最好的方法是什么?

由于这可能会使情况复杂化,我将添加一个注释。在这种环境中,开发人员在主存储库之间切换的理想方式是通过更改存储库的 IP 地址/etc/hosts- 例如,在办公室时,存储库 A 被称为“gitserver”,而在远程时,存储库 B 被称为“gitserver”。

4

1 回答 1

0

(免责声明:我知道这个问题发布已有 7 年历史,但由于我不知道的原因,它出现在我的 StackOverflow 问题列表的顶部)

我有兴趣将本地 git 存储库设置为远程存储库的镜像。

好的...

我已经阅读了一些可能相关的帖子

什么帖子?

但是关键的区别是我需要对两个 repos 进行读写访问

为什么您没有对这两个存储库的读/写访问权限?请不要git与 GitHub 等 Git 托管服务混淆,并注意它git没有任何内置的权限系统- 安全性由您的“git 服务器”和使用的基础设施提供- 并且有各种各样的 git周围的服务器产品(从本地 GitHub Enterprise 和 Microsoft Team Foundation Server,到gitserver通常在 SSH 后面运行的默认收件箱(它是为您处理身份验证的 SSH)。您还可以通过 SMB(又名 Windows)托管 git repo文件共享)。

大多数时候,用户会针对 Repo A 工作,但是有时他们会针对 Repo B 工作,并且这些需要通过服务器到服务器的流量保持同步。

作为前言,请记住这git是一个去中心化的系统,不需要任何规范的回购。

我假设您的意思是用户将同时使用 RepoA 和 RepoB 而不是每个人在某些日子只使用 RepoA,然后在其他日子只使用RepoB)。在这种情况下,每隔几分钟就有一个cron工作,并且每次更新一个新分支时挂一个钩子就可以了。fetchpush

这里最好的方法是什么?

很难给出细节,因为您仍然没有提供很多细节(例如,这两个主机如何通信?是否需要可怕的 VPN 客户端/系统,或者它们是否通过开放 Internet 进行通信?您是否考虑过使用商业git托管像 GitHub 和 GitLab 这样的服务作为中间人使用?等等?

在这种环境中,开发人员在主存储库之间切换的理想方式是通过 /etc/hosts 更改存储库的 IP 地址 - 例如,在办公室时,存储库 A 被称为“gitserver”,而在远程时,存储库 B 被称为“gitserver” .

确认。不,不要那样做!让您的用户将两个存储库作为单独的远程仓库添加到他们的本地存储库中,并为他们提供一个小的 shell 脚本或宏,以将其转换git push为对所有当前可用存储库的推送。

...您的开发人员确实有本地(计算机上)存储库,对吗?我希望您没有在某种多用户模式下使用集中托管的 git 存储库?如果是这样,那么您使用 git 非常非常错误。

于 2021-02-22T20:42:32.653 回答