git值得管理大于500MB的文件

时间:2009-11-19 10:44:16

标签: git repository large-files

我会在版本控制下放置大量数据,即目录结构(深度< = 5),数百个文件,大小约为500Mb。)

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

我不需要sha1进行变化检测,更快的速度是可以接受的。

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

5 个答案:

答案 0 :(得分:10)

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

如果你需要,那就需要Git:

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

注意:仍在使用Git,您可以尝试this approach

  

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

     
      
  • 首先,它不是真正的版本控制系统。如果你想存储文件的多个修订版,你必须制作多个副本,这是浪费的,或xdelta它们,这是繁琐的(并且可能很慢重新组装,并且很难修剪中间版本),或者检查它们到git,因为你的文件太大,它仍然会融化。
  •   
  • Plus rsync实际上无法正确处理文件重命名。
  •   
     

好吧,另外一个想法:让我们将文件拆分成块,并将每个块分别检查为git
  那么git的delta压缩一次就不会有太多的咀嚼,我们只需要发送修改后的块......

基于gzip --rsyncablePOC available in this Git repo

答案 1 :(得分:8)

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

http://git-annex.branchable.com

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

  • 对所有小东西使用git repo。
  • 将单个“large_files”文件夹中的大文件符号链接到存储库中的相应位置。
  • 使用更传统的非版本化备份系统备份large_files文件夹,如果您需要将其传递给其他人,请将它们全部捆绑到一个zip文件中。

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

答案 4 :(得分:0)

像rsync这样的东西可以更好地满足您的需求(如果您只想要一些备份,不需要并发,合并,分支等)。