我会将大量数据置于版本控制之下,即包含数百个大小约为 500Mb 的文件的目录结构(深度<=5)。
我需要的是一个可以帮助我的系统: - 检测文件是否已更改 - 检测文件是否被添加/删除 - 将整个存储库克隆到另一个位置 - 存储“检查点”并稍后恢复
我不需要 sha1 来检测变化,更快的东西是可以接受的。
git值得吗?有更好的选择吗?
我会将大量数据置于版本控制之下,即包含数百个大小约为 500Mb 的文件的目录结构(深度<=5)。
我需要的是一个可以帮助我的系统: - 检测文件是否已更改 - 检测文件是否被添加/删除 - 将整个存储库克隆到另一个位置 - 存储“检查点”并稍后恢复
我不需要 sha1 来检测变化,更快的东西是可以接受的。
git值得吗?有更好的选择吗?
正如我在“什么是 Git 限制”中提到的,Git 不是用来管理大文件(或大二进制文件)的。
如果您需要执行以下操作,则需要 Git:
注意:还在用Git,可以试试这个方法
不幸的是,
rsync
对于我们的目的也不是很完美。
- 首先,它并不是真正的版本控制系统。如果要存储文件的多个修订版,则必须制作多个副本,这很浪费,或者
xdelta
它们很乏味(并且可能重新组装很慢,并且很难修剪中间版本),或者将它们签入 git ,由于您的文件太大,它仍然会崩溃。- 再加上 rsync 真的无法正确处理文件重命名 - 根本没有。
好的,另一个想法怎么样:让我们将文件分成块,并将这些块中的每一个分别检查到 git中。
那么 git 的 delta 压缩一次不会有太多可咀嚼的东西,我们只需要发送修改过的块......
基于,在这个 Git repo 中提供gzip --rsyncable
了一个POC 。
git-annex 是解决这个问题的方法。它不是将大文件数据直接存储在 git 中,而是将其存储在键/值存储中。然后将密钥的符号链接签入 git,作为实际大文件的代理。
Unison File Synchroniser是维护大型二进制文件的多个副本的出色工具。除了存储检查点之外,它会完成您要求的一切 - 但您可以使用 rsync 硬链接副本来完成。
如果您使用的是 unix 系统(可能是,因为您使用的是 git):
这样,您就可以获得 git 的好处,保留您想要的任何树结构,并且将大型文件备份到其他地方,尽管看起来仍然在正常的文件夹层次结构中。
也许像 rsync 这样的东西更适合您的需求(如果您只想要一些备份,没有并发,合并,分支等)