我有2个裸存储库。它们是这样的:
ssh git@primary.com
git init --bare repo1
ssh git@backup.com
git clone --bare git@primary.com:repo1
一个用于发展(让我们称之为的主)和一个用于备份(在第一情况下是不可访问)。是否可以自动同步它们 - 比如在备份时执行git pull
。
我猜你不能合并或拉上裸存储库。是否有其他方法可以使备份存储库保持最新状态,而不是:
ssh git@backup.com
rm repo1 -fr
git clone -- bare git@primary.com:repo1
当然,当主服务器暂时无法访问时,我使用了备份,然后我想更新主服务器。
另外加入2个遥控器来工作存储库是一个解决方案,但你必须不断推到它们两者,这是不可能发生的,如果一个是不可访问的。
所有冲突都在非裸存储库中解决
编辑为什么我需要备份存储库:
我们使用远程存储库来交换代码,并且每天都需要它。通常人们不需要其他开发人员编写的代码,但情况并非总是如此。我们与小学失去了3天的联系,这并不容易发展。我在另一台服务器上创建了第二个存储库并且我克隆了本地,但是我必须为很多项目执行此操作并且耗时。我更喜欢自动更新第二个存储库。
答案 0 :(得分:3)
您可以使用git push --mirror other-remote
将一个存储库中的所有引用镜像到另一个存储库。但是,这不会镜像存储库配置或存储 - 您可能还想查看此问题的答案:
更新:在回答您在下面澄清的问题和评论时,我应该说git push --mirror
在两个方向都不安全,因为git push --mirror
执行了{{3} }}。例如,假设master
上的primary
比backup
上的primary
更早,git push --mirror
上有一个尚未镜像的新分支 - 那么{{1}将master
上的primary
分支重置为旧状态并删除新创建的分支。
此外,即使您只是从primary
镜像到backup
,也不允许人们推送到backup
,因为任何新的推送到那里都会是被下一面镜子移走。
那么,你能做什么?我假设当主存储库不可用时,整个机器不可用。因此,在备份服务器上,我会创建一个裸存储库,如您所建议的那样,主存储器上的cron作业将镜像存储库。但是,您不应该允许人们推送到该镜像存储库 - 当主服务器出现故障时,克隆镜像以创建一个人们可以推送到同一时间的裸存储库。备份主服务器时,阻止人们推送到备份上的新存储库,然后在本地合并更改,并将新工作推送回主服务器。
答案 1 :(得分:0)
使用crontab脚本或类似程序定期运行git push --mirror remote到您的备份。您还可以添加一个提交挂钩,以便在更新时自动强制推送到另一个远程,这样您就没有“失败窗口”。无需从备份更新,因为它可能永远不会有任何新的或更新的内容。