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