使用 Rsync 备份多个 Git 存储库时使用删除标志?
Posted
技术标签:
【中文标题】使用 Rsync 备份多个 Git 存储库时使用删除标志?【英文标题】:Use Delete Flag when Using Rsync to Backup Multiple Git Repos? 【发布时间】:2013-10-31 21:04:41 【问题描述】:我在现场 linux 服务器上有大量 git 存储库,我需要每天将其备份到非现场 Windows 服务器。因为文件太多,所以我想用 rsync 代替纯副本来节省时间和网络带宽。 (我将在安装 Windows 目标驱动器后使用 rsync。)我还想避免一种将所有文件压缩成 tar 或以其他方式将它们压缩成一个大文件的解决方案。这是因为异地服务器被进一步复制到其他异地服务器,如果我使用一个大的 tar 文件,而不是只需要复制更改的 1 或 2 个小文件,就必须复制整个大 tar 文件。 (*1)
我的问题是,我应该还是不应该在 rsync 上使用删除标志 (--delete
)?
rsync 上的删除标志将删除在目标上找到但不在源上找到的文件。理想情况下,我希望关闭删除标志,因为如果想要的文件意外地从源中删除,它也会在目标上被删除。如果不使用删除标志,我们就有可能使目标成为我们想要的所有文件的超集。
这是个问题吗?这会以某种方式破坏目的地上的 git 存储库吗?如果您的回答有所不同,我们只允许将快进提交推送到我们的现场 git 服务器。可能是这样的情况,如果只做快进提交,git就永远不会删除.git目录下的文件?
(*1) 编辑 1:添加关于希望避免将多个文件压缩为一个的解决方案的注释。因此 git bundle 不会是一个想要的解决方案。如果 rsync 不是要走的路,我很想知道您推荐的任何替代方法。
【问题讨论】:
我提到的 bup 工具不会将所有内容压缩到一个大文件中,因此它符合您的要求。 【参考方案1】:问题不在于--delete
选项(我将使用它来保持双方的存储库图像一致),以及在复制这么多文件时更多的损坏风险。
一种解决方案是让作业在本地(到服务器)bundles 增量更新。 捆绑包类似于 git 存储库,但压缩在 一个 文件中。 在那里,您的 rsync 必须在每个 repo 中仅复制一个文件,但这不会备份每个 repos 的本地配置和本地挂钩。
另一个解决方案是使用类似 rsync 的解决方案,能够增量备份大量数据:bup(在Git Minutes #24 中提供)。
【讨论】:
以上是关于使用 Rsync 备份多个 Git 存储库时使用删除标志?的主要内容,如果未能解决你的问题,请参考以下文章
使用 SourceTree 克隆非常大的 git 存储库时出错
通过 FTP 将文件添加到 git 存储库时,在脚本中使用 inotifywait 自动执行 git 提交
git-upload-pack:克隆远程 Git 存储库时找不到命令