2

我有 2 个裸存储库。它们是这样制作的:

ssh git@primary.com
git init --bare repo1
ssh git@backup.com
git clone --bare git@primary.com:repo1

一个用于开发(我们称之为primary),一个用于备份(以防第一个无法访问)。是否可以自动同步它们 - 就像git pull备份一样。

我猜你不能合并或拉入裸存储库。是否有另一种方法可以使备份存储库保持最新状态,而不是这样:

ssh git@backup.com
rm repo1 -fr
git clone -- bare git@primary.com:repo1

当然,当一段时间无法访问主节点并且我使用备份时,我会想要更新主节点。

将 2 个遥控器添加到工作存储库也是一种解决方案,但是您必须不断地推送它们,如果其中一个无法访问,则不会发生这种情况。

所有冲突都在非裸存储库中解决

编辑为什么我需要备份存储库:

我们使用远程存储库来交换代码,并且每天都需要它。通常人们不需要其他开发人员编写的代码,但情况并非总是如此。我们与primary失去了3天的联系,发展并不容易。我在另一台服务器上创建了第二个存储库并克隆了本地,但我必须为很多项目这样做,而且很耗时。我更喜欢自动更新第二个存储库。

4

2 回答 2

3

您可以使用git push --mirror other-remote将一个存储库中的所有引用镜像到另一个存储库。但是,这不会反映存储库配置或存储 - 您可能还想查看这个问题的答案:


更新:针对您在下面澄清的问题和评论,我应该说git push --mirror双向都不安全,因为git push --mirror强制更新 refs 并删除已删除的 refs。例如,假设您的masteronprimary领先于 onbackup并且有一个primary尚未镜像的新分支 - 那么 agit push --mirror会将master分支重置primary为旧状态并删除新创建的分支。

此外,即使你只是从primaryto镜像backup,让人们推送到 也是不安全的backup,因为任何新推送到那里的东西都会被下一个镜像删除。

所以,你可以做什么?我假设当主存储库不可用时,整台机器都不可用。因此,在备份服务器上,我会按照您的建议创建一个裸存储库,主服务器上的 cron 作业会将存储库镜像到该存储库。但是,您不应该允许人们推送到该镜像存储库 - 当主服务器出现故障时,克隆镜像以创建人们可以同时推送到的裸存储库。当主服务器备份时,阻止人们推送到备份上的新存储库,然后在本地合并更改并将新工作推送回主服务器。

于 2011-04-05T13:58:38.333 回答
0

使用 crontab 脚本或类似脚本定期运行 git push --mirror remote 到您的备份。您还可以添加一个提交挂钩以自动强制推送到另一个远程更新,这样您就没有“失败窗口”。无需从备份进行更新,因为它可能永远不会拥有任何新的或更新的内容。

于 2011-04-05T17:43:58.600 回答