是否有自动方式将本地git存储库与远程存储库同步以进行备份?
基本上我设想的结构是:
用户和主人之间的互动是手动的 - 用户必须选择推送或拉动更改的时间。
用户与其个人备份之间的交互是自动的 - 每当用户在其本地存储库中提交任何更改(在任何分支上,包括创建新分支)时,如果服务器可访问,应立即将其推送到备份存储库,并且在服务器可以访问之前保持没有错误(或者当服务器可以访问时的下一个动作,如果这更容易),然后推送。 (即它应该容忍断开连接的时间段,但是在重新连接之后,那里的回购应该是一个完整的镜像,包括在断开连接时所做的更改)。
用户永远不需要有意识地推送到备份服务器。他们可能想要从备份服务器克隆一个新的仓库(例如,如果他们的硬盘驱动器死亡或他们需要使用第二台PC一段时间)。用户B可能想要从用户A的备份仓库中提取分支(尽管这种情况很少见;通常分支机构将通过主仓库进行交换)。但大多数情况下,它们应该是不可见的。
它应该尽可能即时,而不是计划任务,因为它们可能会提交然后关闭或断开网络连接,我仍然希望备份在这种情况下是最新的。
设置主克隆和个人克隆很容易。但是如何设置此备份镜像?
此外,虽然镜像只是提交的更改是可以的,但它可能会以某种方式镜像未提交的更改(包括未版本但未被忽略的文件)。我没有这样做(因为我怀疑它会变得混乱)。
答案 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?”中找到类似的想法。