1

我在现场 linux 服务器上有大量 git 存储库,我需要每天将其备份到非现场 Windows 服务器。因为文件太多,所以我想用 rsync 代替纯副本来节省时间和网络带宽。(我将在安装 Windows 目标驱动器后使用 rsync。)我还想避免将所有文件压缩成 tar 或以其他方式将它们压缩成一个大文件的解决方案。这是因为异地服务器被进一步复制到其他异地服务器,如果我使用一个大的 tar 文件,而不是只需要复制更改的 1 或 2 个小文件,就必须复制整个大 tar 文件。(*1)

我的问题是,我应该还是不应该--delete在 rsync 上使用删除标志 ()?
rsync 上的删除标志将删除在目标上找到但不在源上找到的文件。理想情况下,我希望关闭删除标志,因为如果一个想要的文件意外地从源中删除,它也会在目标上被删除。如果不使用删除标志,我们就有可能使目标成为我们想要的所有文件的超集。

这是一个问题吗?这会以某种方式破坏目的地上的 git 存储库吗?如果您的回答有所不同,我们只允许将快进提交推送到我们的现场 git 服务器。如果只完成快进提交,也许是 git 永远不会删除 .git 目录中的文件?

(*1) 编辑 1:添加关于希望避免将多个文件压缩为一个的解决方案的注释。因此 git bundle 不会是一个想要的解决方案。如果 rsync 不是要走的路,我很想知道您推荐的任何替代方法。

4

1 回答 1

0

问题不在于--delete选项(我会用它来保持双方存储库的一致图像),而在复制这么多文件时更多的损坏风险。

一种解决方案是让作业以增量方式更新本地(到服务器)bundles
一个包就像一个 git repo,但压缩在一个文件中。
在那里,您的 rsync 必须在每个仓库中仅复制一个文件,但这不会备份每个仓库的本地配置和本地挂钩。

另一种解决方案是使用类似 rsync 的解决方案,能够增量备份大量数据:bup(在Git Minutes #24中介绍)。

于 2013-11-01T10:50:50.480 回答