我正在寻找一个备份多个共享git存储库的解决方案,每个存储库都有多个分支,并且一些分支得到了重新定义和强制(我知道这是针对最佳实践的,但这是我现在要处理的事情)
我认为一个简单的git clone --mirror,然后定期git remote update就足够了,但这不会保留任何因推力而得到重新定位的东西.
我试验过git bundle,我不认为这是我在这里尝试做的一个很好的解决方案.
寻找增量,轻巧和易于恢复的东西,我想也许git format-patch可以用来编写任何地方发生的每一个新提交的记录脚本.这个任务太过分了吗?
我认为这种clone --mirror方法值得回顾.如果你想恢复一个强制推动的分支的过去位置,只需看一下reflogs.要完全确定这一点,您可以设置gc.pruneExpire为never相同gc.reflogExpireUnreachable,以便永远不会删除reflogs和无法访问的对象.这应该涵盖你.重要说明:默认情况下,裸存储库中禁用了reflog.您可以通过设置启用它们core.logAllRefUpdates.
请注意,推送到存储库中的reflog将包含发生的任何强制推送的记录.如果你想更加确定这一点,你甚至可以编写一个更新钩子来检测传入的强制更新,并将它们记录在特殊的地方,也许是通过创建一个ref,类似于refs/backups/mybranch-{n}.
实际上,一些分支经常被重新定位并没有错,只要它是以明确定义的方式,所以没有人会措手不及.pugit.git中的分支就是一个很好的例子.