备份git存储库中的所有分支,保留已重新绑定和强制的内容

时间:2011-01-13 23:09:58

标签: git backup

我正在寻找一个备份多个共享git存储库的解决方案,每个存储库都有多个分支,并且一些分支得到重新定义和强制(我知道这是针对最佳实践的,但我现在必须处理它)

我在考虑一个简单的git clone --mirror,然后定期git remote update就足够了,但这不会保留任何因推力而得到重新定位的东西。

我尝试了git bundle,我认为这不是我在这里尝试做的好方法。

寻找增量,轻巧且易于恢复的东西,我想也许git format-patch可以用来编写任何地方发生的每一个新提交的记录。这对于这个任务来说太过分了吗?

1 个答案:

答案 0 :(得分:7)

我认为clone --mirror方法值得回顾。如果你想恢复一个强制推动的分支的过去位置,只需看一下reflogs。要完全确定这一点,您可以将gc.pruneExpire设置为never,将gc.reflogExpireUnreachable设置为相同,以便永远不会删除reflogs和无法访问的对象。这应该涵盖你。重要说明:默认情况下,裸存储库中禁用了reflog。您可以通过设置core.logAllRefUpdates

来启用它们

请注意,推送到存储库中的reflog将包含发生的任何强制推送的记录。如果你想更加确定这一点,你甚至可以编写一个更新钩子来检测传入的强制更新并将它们记录在特殊的地方,也许是通过创建一个引用,如refs/backups/mybranch-{n}

实际上,一些分支经常被重新定位并没有错,只要它是一个明确定义的方式,这样就没有人会措手不及。 git.git中的pu分支就是一个很好的例子。