【问题标题】:Is git worth for managing many files bigger than 500MBgit 是否值得管理许多大于 500MB 的文件
【发布时间】:2009-11-19 10:44:15
【问题描述】:

我会将大量数据置于版本控制之下,即包含数百个大小约为 500Mb 的文件的目录结构(深度

我需要的是一个可以帮助我的系统: - 检测文件是否已更改 - 检测文件是否被添加/删除 - 将整个存储库克隆到另一个位置 - 存储一个“检查点”并在以后恢复它

我不需要 sha1 来检测变化,更快的东西是可以接受的。

git 值得吗?有更好的选择吗?

【问题讨论】:

    标签: git repository large-files


    【解决方案1】:

    正如我在“What are the Git limits”中提到的,Git 不是用来管理大文件(或大二进制文件)的。

    如果您需要,则需要 Git:

    • 了解文件中实际发生的变化。但对于目录级别,其他答案更好(Unison 或 rsynch)
    • 在您的开发数据和那些大型资源之间保持紧密的距离(即“相同的引用”)。只有一个引用会有所帮助,但是您需要一个 Git 的分支,例如 git-bigfiles 来有效地管理它们。

    注意:还在用Git,可以试试this approach

    不幸的是,rsync 对于我们的目的也不是很完美。

    • 首先,它并不是真正的版本控制系统。如果要存储文件的多个修订版,则必须制作多个副本,这很浪费,或者xdelta 它们很乏味(并且可能重新组装很慢,并且很难修剪中间版本),或者检查它们进入 git,它仍然会因为你的文件太大而融化。
    • 另外,rsync 确实无法正确处理文件重命名 - 完全没有。

    好的,还有一个想法:让我们将文件分成块,并将每个块分别检查到 git 中
    那么 git 的 delta 压缩一次不会有太多可咀嚼的东西,我们只需要发送修改过的块...

    基于gzip --rsyncable,带有POC available in this Git repo

    【讨论】:

      【解决方案2】:

      git-annex 是解决这个问题的方法。它不是将大文件数据直接存储在 git 中,而是将其存储在键/值存储中。然后将指向键的符号链接签入 git,作为实际大文件的代理。

      http://git-annex.branchable.com

      【讨论】:

        【解决方案3】:

        Unison File Synchroniser 是维护大型二进制文件的多个副本的出色工具。除了存储检查点之外,它会执行您要求的所有操作 - 但您可以使用 rsync 硬链接副本来完成。

        【讨论】:

          【解决方案4】:

          如果您使用的是 unix 系统(可能是,因为您使用的是 git):

          • 使用 git repo 处理所有小东西。
          • 将大文件从单个“large_files”文件夹符号链接到存储库中的适当位置。
          • 使用更传统的非版本控制备份系统备份 large_files 文件夹,如果您需要将它们传递给其他人,不时将它们全部打包成一个 zip 文件。

          这样,您可以获得 git 的好处,保留您想要的任何树结构,并且大型文件会备份到其他地方,尽管看起来仍然在正常的文件夹层次结构中。

          【讨论】:

            【解决方案5】:

            也许像 rsync 这样的东西更适合您的需求(如果您只想要一些备份、没有并发、合并、分支等)

            【讨论】:

              猜你喜欢
              • 2010-10-23
              • 1970-01-01
              • 2021-12-13
              • 2011-04-09
              • 1970-01-01
              • 2011-07-06
              • 2023-01-26
              • 2018-03-01
              • 2019-01-19
              相关资源
              最近更新 更多