我在现场Linux服务器上有大量的git存储库,我需要每天备份到异地Windows服务器。因为有这么多文件,我想使用rsync而不是普通副本来节省时间和网络带宽。 (我将在安装Windows目标驱动器后使用rsync。)我还想避免一个解决方案,将所有文件加起来或以其他方式将它们压缩成一个大文件。这是因为offsite-server进一步复制到其他异地服务器,如果我使用一个大的tar文件,而不是只需要复制1或2个更改的小文件,就必须复制整个大的tar文件。 (* 1)
我的问题是,我是否应该在rsync上使用删除标记(--delete
)?
rsync上的删除标志将删除目标上但未在源上找到的文件。理想情况下,我希望关闭删除标志,因为如果一个想要的文件意外地从源中删除,它也会在目标上被删除。如果不使用删除标志,我们就有可能使目标成为我们想要的所有文件的超集。
这是一个问题吗?这会以某种方式破坏目的地的git存储库吗?如果它对您的答案产生影响,我们只允许将快进提交推送到我们的现场git服务器。也许是这样的情况,如果只进行快进提交,git永远不会删除.git目录中的文件?
(* 1)编辑1:添加关于想要避免将多个文件压缩为一个的解决方案的注释。因此git bundle不是一个有用的解决方案。如果rsync不是要走的路,我很想知道你推荐的任何替代方法。
答案 0 :(得分:0)
问题不在于--delete
选项(我会用来保持双方回购的一致图像),而且在复制这么多文件时会有更多的损坏风险。
一种解决方案是将作业逐步更新为本地(到服务器)bundles 一个包就像一个git repo,但是在一个文件中浓缩 在那里,你的rsync必须每个repo只复制一个文件,但是这不会备份每个repos的本地配置和本地挂钩。
另一种解决方案是使用类似rsync的解决方案,能够逐步备份大量数据: bup (在Git Minutes #24中显示)。