自动同步到远程git存储库

时间:2014-03-11 01:33:17

标签: git version-control synchronization backup

是否有自动方式将本地git存储库与远程存储库同步以进行备份?

基本上我设想的结构是:

  • 中央服务器上的“Master”存储库
    • 用户A的PC具有主仓库的本地克隆
      • 备份服务器具有用户A的repo
      • 的镜像
    • 用户B的PC具有主仓库的本地克隆
      • 备份服务器具有用户B的repo的镜像

用户和主人之间的互动是手动的 - 用户必须选择推送或拉动更改的时间。

用户与其个人备份之间的交互是自动的 - 每当用户在其本地存储库中提交任何更改(在任何分支上,包括创建新分支)时,如果服务器可访问,应立即将其推送到备份存储库,并且在服务器可以访问之前保持没有错误(或者当服务器可以访问时的下一个动作,如果这更容易),然后推送。 (即它应该容忍断开连接的时间段,但是在重新连接之后,那里的回购应该是一个完整的镜像,包括在断开连接时所做的更改)。

用户永远不需要有意识地推送到备份服务器。他们可能想要从备份服务器克隆一个新的仓库(例如,如果他们的硬盘驱动器死亡或他们需要使用第二台PC一段时间)。用户B可能想要从用户A的备份仓库中提取分支(尽管这种情况很少见;通常分支机构将通过主仓库进行交换)。但大多数情况下,它们应该是不可见的。

它应该尽可能即时,而不是计划任务,因为它们可能会提交然后关闭或断开网络连接,我仍然希望备份在这种情况下是最新的。

设置主克隆和个人克隆很容易。但是如何设置此备份镜像?

此外,虽然镜像只是提交的更改是可以的,但它可能会以某种方式镜像未提交的更改(包括未版本但未被忽略的文件)。我没有这样做(因为我怀疑它会变得混乱)。

1 个答案:

答案 0 :(得分:0)

这应该涉及一个后提交钩子,需要在每个客户端仓库上部署 或者该钩子可以是所有用户在使用git init时使用的git模板仓库的一部分:请参阅git init "TEMPLATE DIRECTORY" section

那个钩子将负责推送备份裸仓库,并且可能就像这个一样简单。

#!/bin/sh 
git push --mirror remote-name

您可以在“How to automatically push after committing in git?”中找到类似的想法。

相关问题